diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 0000000..d54f752 --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,63 @@ +# Sample workflow for building and deploying a VitePress site to GitHub Pages +# +name: Deploy loom-io to Github Pages + +on: + # Runs on pushes targeting the `main` branch. Change this to `master` if you're + # using the `master` branch as the default branch. + push: + branches: [main] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: pages + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Not needed if lastUpdated is not enabled + - uses: pnpm/action-setup@v3 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Install dependencies + run: pnpm insatll + - name: Build with VitePress + run: pnpm run -r docs:build --if-present + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: documentation/.vitepress/dist + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + name: Deploy + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 18d4ab6..f15f587 100644 --- a/.gitignore +++ b/.gitignore @@ -180,3 +180,5 @@ dist tests/integration/test-tmp/ test-tmp/ + +documentation/.vitepress/cache/ diff --git a/adapters/minio/src/exports/lib.ts b/adapters/minio/src/exports/lib.ts index 7a99fa9..ba06c7a 100644 --- a/adapters/minio/src/exports/lib.ts +++ b/adapters/minio/src/exports/lib.ts @@ -1,17 +1,12 @@ import { source, type S3Options } from '../core/source'; import { type Directory, PLUGIN_TYPE, type LoomSourceAdapter, LoomFile, MaybePromise } from '@loom-io/core'; -export type S3MinioAdapterOptions = S3Options & { - bucket: string; -}; - -export default (key: string = 's3://', options: S3MinioAdapterOptions): LoomSourceAdapter => ({ +export default (key: string = 's3://', bucket: string, s3config: S3Options): LoomSourceAdapter => ({ $type: PLUGIN_TYPE.SOURCE_ADAPTER, source: (link: string, Type?: typeof Directory | typeof LoomFile): MaybePromise | void => { if(link.startsWith(key)) { const path = link.slice(key.length); - const { bucket, ...s3options } = options; - return source(path, bucket, s3options, Type); + return source(path, bucket, s3config, Type); } } }); \ No newline at end of file diff --git a/adapters/minio/test/source.spec.ts b/adapters/minio/test/source.spec.ts index 5f26224..19aa3aa 100644 --- a/adapters/minio/test/source.spec.ts +++ b/adapters/minio/test/source.spec.ts @@ -10,7 +10,4 @@ const s3config = { }; -testSource('s3://', S3MinioSourceAdapter(undefined, { - bucket: 'test-bucket', - ...s3config -})); \ No newline at end of file +testSource('s3://', S3MinioSourceAdapter(undefined, 'test-bucket', s3config)); diff --git a/documentation/.vitepress/config.mts b/documentation/.vitepress/config.mts new file mode 100644 index 0000000..2dc2f25 --- /dev/null +++ b/documentation/.vitepress/config.mts @@ -0,0 +1,54 @@ +import { defineConfig } from 'vitepress' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "loom-io", + description: "weave your data access", + lastUpdated: true, + themeConfig: { + logo: "/loom-io.png", + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: 'Home', link: '/' }, + { text: 'Doc', link: '/core/intro' } + ], + sidebar: [ + { + text: 'Getting Started', + items: [ + { text: 'Introduction', link: '/core/intro' }, + { text: 'Setup', link: '/core/setup' }, + { text: 'Examples', link: '/core/examples' } + ] + }, + { + text: 'Source Adapter', + items: [ + { text: 'In-Memory', link: '/adapter/in-memory-adapter' }, + { text: 'Filesystem', link: '/adapter/node-filesystem-adapter' }, + { text: 'S3-Minio', link: '/adapter/minio-s3-adapter' } + ] + }, + // { + // text: 'Converter', + // items: [ + // { text: 'JSON', link: '/converter/markdown-converter' }, + // { text: 'YAML', link: '/converter/yaml-converter' } + // ] + // } + { + text: 'Reference', + items: [ + { text: 'File', link: '/ref/file' }, + { text: 'Directory', link: '/ref/directory' }, + { text: 'List', link: '/ref/list'}, + { text: 'Editor', link: '/ref/editor' } + ] + } + ], + + socialLinks: [ + { icon: 'github', link: 'https://github.com/cotton-coding/loom-io' } + ] + } +}) diff --git a/documentation/adapter/in-memory-adapter.md b/documentation/adapter/in-memory-adapter.md new file mode 100644 index 0000000..a03a05d --- /dev/null +++ b/documentation/adapter/in-memory-adapter.md @@ -0,0 +1,34 @@ +--- +--- + +# In Memory Adapter + +This adapter was manly created for testing, but could also be used as a replacement for any other adapter. As the name told it stores all data in memory, which make it probably the fastest adapter. + +::: code-group + +```sh [npm] +npm add @loom-io/in-memory-adapter +``` + +```sh [pnpm] +pnpm add @loom-io/in-memory-adapter +``` + +```sh [bun] +bun add @loom-io/in-memory-adapter +``` + +::: + +## Setup and Config + +The adapter only has an default export and export a function to configure the adapter. In this case the only option is to set the key to reference it. As with all other adapters you can register it with different identifiers. The default identifier is `memory://`. + +```ts +import Loom from "@loom-io/core"; +import memoryAdapter from "@loom-io/in-memory-adapter"; + +Loom.register(memoryAdapter("my-memory://")); +Loom.register(memoryAdapter()); +``` diff --git a/documentation/adapter/minio-s3-adapter.md b/documentation/adapter/minio-s3-adapter.md new file mode 100644 index 0000000..987bc46 --- /dev/null +++ b/documentation/adapter/minio-s3-adapter.md @@ -0,0 +1,50 @@ +--- +--- + +# S3 Adapter + +Connects your S3 as it is a filesystem storage and based on the minio library. Even if it based on the minio library you can use it with all other S3 Storage e.g.: Digital Ocean Spaces, Amazon S3 + +::: code-group + +```sh [npm] +npm add @loom-io/minio-s3-adapter +``` + +```sh [pnpm] +pnpm add @loom-io/minio-s3-adapter +``` + +```sh [bun] +bun add @loom-io/minio-s3-adapter +``` + +::: + +## Setup and config + +Mainly the configuration is the same as with [minio](https://min.io/docs/minio/linux/developers/javascript/API.html). You just have setup a bucket name in advance. The default key to identify is `s3://` + +```ts +import Loom from "@loom-io/core"; +import s3Adapter from "@loom-io/s3-minio-adapter"; + +const s3ConfigMinio = { + endPoint: "play.min.io", + port: 9000, + useSSL: true, + accessKey: "Q3AM3UQ867SPQQA43P2F", + secretKey: "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG", +}; + +const s3ConfigDigitalOcean = { + endpoint: "ams3.digitaloceanspaces.com", + accessKey: "key", + secretKey: "secret", +}; + +// Set own key, bucket name and config for minio +Loom.register(memoryAdapter("my-s3://", "my-bucket", s3ConfigMinio)); +// set default key (s3://), bucket name and digital ocean space config +Loom.register(memoryAdapter(undefined, "other-bucket", s3ConfigDigitalOcean)); +``` diff --git a/documentation/adapter/node-filesystem-adapter.md b/documentation/adapter/node-filesystem-adapter.md new file mode 100644 index 0000000..815c20b --- /dev/null +++ b/documentation/adapter/node-filesystem-adapter.md @@ -0,0 +1,36 @@ +--- +--- + +# Filesystem Adapter + +Access Files from you local filesystem. Don't be confused from the node in the package name, it should also work with bun, because it is node compatible, but there are plans to do a more Bun specific adapter. For now you should also use this for bun, because all adapter exchange able you can easily switch later to the Bun specific adapter if you want to. + +::: code-group + +```sh [npm] +npm add @loom-io/node-filesystem-adapter +``` + +```sh [pnpm] +pnpm add @loom-io/node-filesystem-adapter +``` + +```sh [bun] +bun add @loom-io/node-filesystem-adapter +``` + +::: + +## Setup and config + +The default key for this adapter is `file://`, by default the adapter sets your project directory as root directory (manly the directory you starts you server from), but you can set any other directory. This directory looks like and is accessed like you root directory, so you will not be able to break out of this directory. + +```ts +import Loom from "@loom-io/core"; +import filesystemAdapter from "@loom-io/node-filesystem-adapter"; + +// sets key to root:// and the root path to you filesystem root, be careful +Loom.register(filesystemAdapter("root://", "/")); +// use default config. Key is file:// and the "root"-Directory is your project root +Loom.register(filesystemAdapter()); +``` diff --git a/documentation/core/examples.md b/documentation/core/examples.md new file mode 100644 index 0000000..b2ade5b --- /dev/null +++ b/documentation/core/examples.md @@ -0,0 +1,84 @@ +# Examples + +loom-io simplify the access to different storing systems and brings you additional functionality like reading directories recursive, search files, read them line by line or auto convert files to json. + +Take a look at the specific reference to get all details of functionality. This chapter will describe the api by use cases, but will not show the full functionality. + +## Configure + +As show in the chapter before, do not forget to setup and config loom-io before usage + +```ts +import Loom from "@loom-io/core"; +import fsAdapter from "@loom-io/node-filesystem-adapter"; + +// We add the adapter for filesystem now. +// By default the root of our filesystem is your project directory +Loom.register(fsAdapter("file://")); +``` + +The following examples will not show a registration of a adapter every time, because you will probably do this only once. + +## Create a directory and a file + +Creating a directory or file object do not mean the directory or file does exists. This means you could firstly create a virtual object and than create the real object in the storage system + +```ts +import Loom from "@loom-io/core"; + +const dir = await Loom.dir("file://welcome"); +const file = dir.file("hello-world.md"); +// till here everything is virtual and do not have to exit on your filesystem; + +console.log(await file.exists()); // Will be false; +console.log(await dir.exists()); // Will be false; + +// create an empty file welcome/hello-world.md +await file.create(); + +console.log(await dir.exists()); // Will be true; +console.log(await file.exists()); // Will be false; +``` + +While creating the file the directory was directly created too. To avoid and automatic creation of the directory use `file.write` + +## List all files in a directory + +This is one of the first functions implemented in the library and one of the main reason. We already registered an adapter above so it will be not necessary to have a second one, but to have a full example we will do it anyways. To get all details about the adapter or dir take a look to the doc sections + +```ts +import Loom from "@loom-io/core"; + +// the directory do not have to exist +//select the root dir, in this case the project dir +const dir = await Loom.dir("file://"); +//read dir recursive and search for files +const files = await dir.files(true); + +for (let file of files) { + console.log(file.path); +} +``` + +## List content of a Directory + +```ts +import Loom, { isFile, isDirectory } from "@loom-io/core"; + +const dir = await Loom.dir("file://"); +const list = await dir.list() // returns a iterable to get Files and Directories + +for(let el of list) { + if( isFile(el) ) { // check if it is a File + console.log(await el.text()); // do some Stuff with the file content + } else ( isDirectory(el) ) { // just to show, it could only be a file or directory + console.log((await el.list()).length) + } +} + +// to get the parent of a directory +if(dir.parent !== undefined) { + await dir.parent.list() +} + +``` diff --git a/documentation/core/intro.md b/documentation/core/intro.md new file mode 100644 index 0000000..8f0c604 --- /dev/null +++ b/documentation/core/intro.md @@ -0,0 +1,16 @@ +--- +--- + +# Introduction + +Nowadays there a lots of possible to store data, most application use sql like databases to handle there data. Loom-IO wants to go one step back, to classic files and also a lot of site generators go back to human readable files. At least there a still different formats and possibilities to store data: Git, Filesystem, S3, to just name some of them. + +To make this simpler and more easily, this lib abstract this and offers different adapters for storing systems and file formats. It even give you the possibility to create your own ones to be 100% flexible. + +## Modules + +To solve this problem the lib is split in multiple parts, what seem to be more complex at the first view. To make this easier for you, there are some pre bundled modules. You will find them in the base section. + +## Less dependencies + +Loom-IO will be build with the philosophy to avoid dependencies to other libraries, to reduce your risk of unknown dependencies. At least we wouldn't reinvent the wheel and implement everything at our own, so for example the YAML-Adapter is based on a other parsing library, but at least it is your decision to use it, implement your own or just a other one based on a other library. diff --git a/documentation/core/setup.md b/documentation/core/setup.md new file mode 100644 index 0000000..2d88137 --- /dev/null +++ b/documentation/core/setup.md @@ -0,0 +1,116 @@ +# Installation + +The Software is split in multiple adapter, that do a part of the work and give you the flexible. To start easily we would recomb to start with a pre configured bundle. + +## Install bundle + +Currently there is only one bundle to work with the filesystem, at least also this bundle could be extended by other adapters and plugins and over the same functionality as the core package. + +::: code-group + +```sh [npm] +npm add @loom-io/base-fs +``` + +```sh [pnpm] +pnpm add @loom-io/base-fs +``` + +```sh [bun] +bun add @loom-io/base-fs +``` + +::: + +## Install without bundle + +If you try to avoid unused dependencies it is recommended to the modules yourself, but also if the base bundles offer you not enough functionality. + +The heart connecting everything and implemented the used syntax is the core package. + +::: code-group + +```sh [npm] +npm add @loom-io/core +``` + +```sh [pnpm] +pnpm add @loom-io/core +``` + +```sh [bun] +bun add @loom-io/core +``` + +::: + +This package will not work out of the box, because it is missing an adapter to connect a storage system e.g. S3, Filesystem . For example to get a similar functionality as in the filesystem bundle you need to install the filesystem adapter and some converter to convert different filetypes to json. + +::: code-group + +```sh [npm] +npm add @loom-io/core @loom-io/node-filesystem-adapter @loom-io/yaml-converter @loom-io/json-converter +``` + +```sh [pnpm] +pnpm add @loom-io/core @loom-io/node-filesystem-adapter @loom-io/yaml-converter @loom-io/json-converter +``` + +```sh [bun] +bun add @loom-io/core @loom-io/node-filesystem-adapter @loom-io/yaml-converter @loom-io/json-converter +``` + +::: + +You will find installation package in the adapter and converter descriptions. + +## Basic Setup (S3) + +The default export of loom-io is a global Object you can import at server side without register a plugin or adapter again and again. We will import it as `Loom`, but you can give it any name. + +If you are not using a base bundle you need to register an adapter and probably some converters to read files as json. +To keep the examples more generic we will import `Loom` from the core library. If you are using a bundle replace the import `@loom-io/core` with the bundle name e.g. `@loom-io/base-fs`. + +For the setup you need the following packages: + +::: code-group + +```sh [npm] +npm add @loom-io/core @loom-io/s3-minio-adapter @loom-io/yaml-converter @loom-io/json-converter +``` + +```sh [pnpm] +pnpm add @loom-io/core @loom-io/ns3-minio-adapter @loom-io/yaml-converter @loom-io/json-converter +``` + +```sh [bun] +bun add @loom-io/core @loom-io/s3-minio-adapter @loom-io/yaml-converter @loom-io/json-converter +``` + +::: + +Now you can setup a S3 connection. In this example we will use a open minio instance from [minio](https://min.io/) + +```ts +import Loom from "@loom-io/core"; +import s3MinioAdapter from "@loom-io/minio-s3-adapter"; +import jsonConverter from "@loom-io/json-converter"; +import yamlConverter from "@loom-io/yaml-converter"; + +const minioConfig = { + endPoint: "play.min.io", + port: 9000, + useSSL: true, + accessKey: "Q3AM3UQ867SPQQA43P2F", + secretKey: "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG", +}; + +const bucketName = "loom-io-test-bucket"; + +Loom.register(s3MinioAdapter("s3://", bucketName, minioConfig)); + +Loom.register(jsonConverter); +Loom.register(yamlConverter); +``` + +Now we can dive deeper into loom-io and the storing system to access or create files and directories. diff --git a/documentation/index.md b/documentation/index.md new file mode 100644 index 0000000..7a62543 --- /dev/null +++ b/documentation/index.md @@ -0,0 +1,25 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "loom-io" + text: handle your files + tagline: weave your data access + actions: + - theme: brand + text: Introduction + link: /core/intro + - theme: alt + text: Get started + link: /core/install + - theme: alt + text: Github + link: https://github.com/cotton-coding/loom-io + +features: + - title: Sources + details: Handle different sources like s3, filesystem or in-memory the same way. Write you own source adapter and plug it + - title: Converter + details: Read yml or other file types directly as json, build your own converter to handle your own file structure +--- diff --git a/documentation/loom-io.png b/documentation/loom-io.png new file mode 100644 index 0000000..9846ba4 Binary files /dev/null and b/documentation/loom-io.png differ diff --git a/documentation/package.json b/documentation/package.json new file mode 100644 index 0000000..5d6c92d --- /dev/null +++ b/documentation/package.json @@ -0,0 +1,18 @@ +{ + "name": "documentation", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "docs:dev": "vitepress dev", + "docs:build": "vitepress build", + "docs:preview": "vitepress preview" + }, + "keywords": [], + "author": "", + "license": "Apache-2.0", + "devDependencies": { + "vitepress": "^1.0.1" + } +} \ No newline at end of file diff --git a/documentation/ref/directory.md b/documentation/ref/directory.md new file mode 100644 index 0000000..e9dcd1f --- /dev/null +++ b/documentation/ref/directory.md @@ -0,0 +1,6 @@ +--- +--- + +# Directory + +<<< ../../packages/core/dist/core/dir.d.ts diff --git a/documentation/ref/editor.md b/documentation/ref/editor.md new file mode 100644 index 0000000..7f3b4a4 --- /dev/null +++ b/documentation/ref/editor.md @@ -0,0 +1,6 @@ +--- +--- + +# Editor + +<<< ../../packages/core/dist/core/editor.d.ts diff --git a/documentation/ref/file.md b/documentation/ref/file.md new file mode 100644 index 0000000..8a6458b --- /dev/null +++ b/documentation/ref/file.md @@ -0,0 +1,6 @@ +--- +--- + +# File + +<<< ../../packages/core/dist/core/file.d.ts diff --git a/documentation/ref/list.md b/documentation/ref/list.md new file mode 100644 index 0000000..49f3475 --- /dev/null +++ b/documentation/ref/list.md @@ -0,0 +1,6 @@ +--- +--- + +# List + +<<< ../../packages/core/dist/core/list.d.ts diff --git a/packages/base-fs/package.json b/packages/base-fs/package.json index 03115d5..a5aa519 100644 --- a/packages/base-fs/package.json +++ b/packages/base-fs/package.json @@ -14,8 +14,8 @@ "dependencies": { "@loom-io/core": "workspace:^", "@loom-io/node-filesystem-adapter": "workspace:^", - "@loom-io/yamlConverter": "workspace:^", - "@loom-io/jsonConverter": "workspace:^" + "@loom-io/yaml-converter": "workspace:^", + "@loom-io/json-converter": "workspace:^" }, "exports": { ".": { diff --git a/packages/base-fs/src/bundle.ts b/packages/base-fs/src/bundle.ts index 5dd4562..8b6903f 100644 --- a/packages/base-fs/src/bundle.ts +++ b/packages/base-fs/src/bundle.ts @@ -1,6 +1,6 @@ import LoomIO from '@loom-io/core'; -import jsonConverter from '@loom-io/jsonConverter'; -import yamlConverter from '@loom-io/yamlConverter'; +import jsonConverter from '@loom-io/json-converter'; +import yamlConverter from '@loom-io/yaml-converter'; import fileSystemAdapter from '@loom-io/node-filesystem-adapter'; LoomIO.register(fileSystemAdapter('file://')); diff --git a/packages/core/src/core/file.ts b/packages/core/src/core/file.ts index d840cad..9ceddb6 100644 --- a/packages/core/src/core/file.ts +++ b/packages/core/src/core/file.ts @@ -110,6 +110,7 @@ export class LoomFile { } async create() { + await this._dir.create(); await this._adapter.writeFile(this.path, Buffer.alloc(0)); } diff --git a/plugins/jsonConverter/package.json b/plugins/json-converter/package.json similarity index 93% rename from plugins/jsonConverter/package.json rename to plugins/json-converter/package.json index 857b9c2..458b28a 100644 --- a/plugins/jsonConverter/package.json +++ b/plugins/json-converter/package.json @@ -1,5 +1,5 @@ { - "name": "@loom-io/jsonConverter", + "name": "@loom-io/json-converter", "version": "0.7.0", "description": "A plugin for @loom-io to convert json files to JSON", "main": "dist/jsonConverter.js", diff --git a/plugins/jsonConverter/src/jsonConverter.ts b/plugins/json-converter/src/jsonConverter.ts similarity index 100% rename from plugins/jsonConverter/src/jsonConverter.ts rename to plugins/json-converter/src/jsonConverter.ts diff --git a/plugins/jsonConverter/tsconfig.json b/plugins/json-converter/tsconfig.json similarity index 100% rename from plugins/jsonConverter/tsconfig.json rename to plugins/json-converter/tsconfig.json diff --git a/plugins/yamlConverter/package.json b/plugins/yaml-converter/package.json similarity index 93% rename from plugins/yamlConverter/package.json rename to plugins/yaml-converter/package.json index 79d573e..d692a74 100644 --- a/plugins/yamlConverter/package.json +++ b/plugins/yaml-converter/package.json @@ -1,5 +1,5 @@ { - "name": "@loom-io/yamlConverter", + "name": "@loom-io/yaml-converter", "version": "0.7.0", "description": "", "main": "dist/yamlConverter.js", diff --git a/plugins/yamlConverter/src/yamlConverter.ts b/plugins/yaml-converter/src/yamlConverter.ts similarity index 100% rename from plugins/yamlConverter/src/yamlConverter.ts rename to plugins/yaml-converter/src/yamlConverter.ts diff --git a/plugins/yamlConverter/tsconfig.json b/plugins/yaml-converter/tsconfig.json similarity index 100% rename from plugins/yamlConverter/tsconfig.json rename to plugins/yaml-converter/tsconfig.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b6677c..239aa2c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -90,20 +90,26 @@ importers: specifier: workspace:^ version: link:../../tests/test-utils + documentation: + devDependencies: + vitepress: + specifier: ^1.0.1 + version: 1.0.1(@algolia/client-search@4.23.2)(@types/node@20.11.30)(search-insights@2.13.0)(typescript@5.4.3) + packages/base-fs: dependencies: '@loom-io/core': specifier: workspace:^ version: link:../core - '@loom-io/jsonConverter': + '@loom-io/json-converter': specifier: workspace:^ - version: link:../../plugins/jsonConverter + version: link:../../plugins/json-converter '@loom-io/node-filesystem-adapter': specifier: workspace:^ version: link:../../adapters/node-fs - '@loom-io/yamlConverter': + '@loom-io/yaml-converter': specifier: workspace:^ - version: link:../../plugins/yamlConverter + version: link:../../plugins/yaml-converter devDependencies: '@loom-io/test-utils': specifier: workspace:* @@ -124,13 +130,13 @@ importers: specifier: workspace:* version: link:../../tests/test-utils - plugins/jsonConverter: + plugins/json-converter: dependencies: '@loom-io/core': specifier: ^0.7.0 version: link:../../packages/core - plugins/yamlConverter: + plugins/yaml-converter: dependencies: '@loom-io/core': specifier: ^0.7.0 @@ -144,15 +150,9 @@ importers: '@loom-io/core': specifier: workspace:* version: link:../../packages/core - '@loom-io/jsonConverter': - specifier: workspace:* - version: link:../../plugins/jsonConverter '@loom-io/test-utils': specifier: workspace:* version: link:../test-utils - '@loom-io/yamlConverter': - specifier: workspace:* - version: link:../../plugins/yamlConverter tests/interface-tests: dependencies: @@ -185,6 +185,156 @@ packages: engines: {node: '>=0.10.0'} dev: true + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2)(search-insights@2.13.0): + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2)(search-insights@2.13.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true + + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2)(search-insights@2.13.0): + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2) + search-insights: 2.13.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true + + /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2): + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2) + '@algolia/client-search': 4.23.2 + algoliasearch: 4.23.2 + dev: true + + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2): + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 4.23.2 + algoliasearch: 4.23.2 + dev: true + + /@algolia/cache-browser-local-storage@4.23.2: + resolution: {integrity: sha512-PvRQdCmtiU22dw9ZcTJkrVKgNBVAxKgD0/cfiqyxhA5+PHzA2WDt6jOmZ9QASkeM2BpyzClJb/Wr1yt2/t78Kw==} + dependencies: + '@algolia/cache-common': 4.23.2 + dev: true + + /@algolia/cache-common@4.23.2: + resolution: {integrity: sha512-OUK/6mqr6CQWxzl/QY0/mwhlGvS6fMtvEPyn/7AHUx96NjqDA4X4+Ju7aXFQKh+m3jW9VPB0B9xvEQgyAnRPNw==} + dev: true + + /@algolia/cache-in-memory@4.23.2: + resolution: {integrity: sha512-rfbi/SnhEa3MmlqQvgYz/9NNJ156NkU6xFxjbxBtLWnHbpj+qnlMoKd+amoiacHRITpajg6zYbLM9dnaD3Bczw==} + dependencies: + '@algolia/cache-common': 4.23.2 + dev: true + + /@algolia/client-account@4.23.2: + resolution: {integrity: sha512-VbrOCLIN/5I7iIdskSoSw3uOUPF516k4SjDD4Qz3BFwa3of7D9A0lzBMAvQEJJEPHWdVraBJlGgdJq/ttmquJQ==} + dependencies: + '@algolia/client-common': 4.23.2 + '@algolia/client-search': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/client-analytics@4.23.2: + resolution: {integrity: sha512-lLj7irsAztGhMoEx/SwKd1cwLY6Daf1Q5f2AOsZacpppSvuFvuBrmkzT7pap1OD/OePjLKxicJS8wNA0+zKtuw==} + dependencies: + '@algolia/client-common': 4.23.2 + '@algolia/client-search': 4.23.2 + '@algolia/requester-common': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/client-common@4.23.2: + resolution: {integrity: sha512-Q2K1FRJBern8kIfZ0EqPvUr3V29ICxCm/q42zInV+VJRjldAD9oTsMGwqUQ26GFMdFYmqkEfCbY4VGAiQhh22g==} + dependencies: + '@algolia/requester-common': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/client-personalization@4.23.2: + resolution: {integrity: sha512-vwPsgnCGhUcHhhQG5IM27z8q7dWrN9itjdvgA6uKf2e9r7vB+WXt4OocK0CeoYQt3OGEAExryzsB8DWqdMK5wg==} + dependencies: + '@algolia/client-common': 4.23.2 + '@algolia/requester-common': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/client-search@4.23.2: + resolution: {integrity: sha512-CxSB29OVGSE7l/iyoHvamMonzq7Ev8lnk/OkzleODZ1iBcCs3JC/XgTIKzN/4RSTrJ9QybsnlrN/bYCGufo7qw==} + dependencies: + '@algolia/client-common': 4.23.2 + '@algolia/requester-common': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/logger-common@4.23.2: + resolution: {integrity: sha512-jGM49Q7626cXZ7qRAWXn0jDlzvoA1FvN4rKTi1g0hxKsTTSReyYk0i1ADWjChDPl3Q+nSDhJuosM2bBUAay7xw==} + dev: true + + /@algolia/logger-console@4.23.2: + resolution: {integrity: sha512-oo+lnxxEmlhTBTFZ3fGz1O8PJ+G+8FiAoMY2Qo3Q4w23xocQev6KqDTA1JQAGPDxAewNA2VBwWOsVXeXFjrI/Q==} + dependencies: + '@algolia/logger-common': 4.23.2 + dev: true + + /@algolia/recommend@4.23.2: + resolution: {integrity: sha512-Q75CjnzRCDzgIlgWfPnkLtrfF4t82JCirhalXkSSwe/c1GH5pWh4xUyDOR3KTMo+YxxX3zTlrL/FjHmUJEWEcg==} + dependencies: + '@algolia/cache-browser-local-storage': 4.23.2 + '@algolia/cache-common': 4.23.2 + '@algolia/cache-in-memory': 4.23.2 + '@algolia/client-common': 4.23.2 + '@algolia/client-search': 4.23.2 + '@algolia/logger-common': 4.23.2 + '@algolia/logger-console': 4.23.2 + '@algolia/requester-browser-xhr': 4.23.2 + '@algolia/requester-common': 4.23.2 + '@algolia/requester-node-http': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/requester-browser-xhr@4.23.2: + resolution: {integrity: sha512-TO9wLlp8+rvW9LnIfyHsu8mNAMYrqNdQ0oLF6eTWFxXfxG3k8F/Bh7nFYGk2rFAYty4Fw4XUtrv/YjeNDtM5og==} + dependencies: + '@algolia/requester-common': 4.23.2 + dev: true + + /@algolia/requester-common@4.23.2: + resolution: {integrity: sha512-3EfpBS0Hri0lGDB5H/BocLt7Vkop0bTTLVUBB844HH6tVycwShmsV6bDR7yXbQvFP1uNpgePRD3cdBCjeHmk6Q==} + dev: true + + /@algolia/requester-node-http@4.23.2: + resolution: {integrity: sha512-SVzgkZM/malo+2SB0NWDXpnT7nO5IZwuDTaaH6SjLeOHcya1o56LSWXk+3F3rNLz2GVH+I/rpYKiqmHhSOjerw==} + dependencies: + '@algolia/requester-common': 4.23.2 + dev: true + + /@algolia/transporter@4.23.2: + resolution: {integrity: sha512-GY3aGKBy+8AK4vZh8sfkatDciDVKad5rTY2S10Aefyjh7e7UGBP4zigf42qVXwU8VOPwi7l/L7OACGMOFcjB0Q==} + dependencies: + '@algolia/cache-common': 4.23.2 + '@algolia/logger-common': 4.23.2 + '@algolia/requester-common': 4.23.2 + dev: true + /@ampproject/remapping@2.3.0: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -224,6 +374,49 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true + /@docsearch/css@3.6.0: + resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} + dev: true + + /@docsearch/js@3.6.0(@algolia/client-search@4.23.2)(search-insights@2.13.0): + resolution: {integrity: sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==} + dependencies: + '@docsearch/react': 3.6.0(@algolia/client-search@4.23.2)(search-insights@2.13.0) + preact: 10.20.1 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + dev: true + + /@docsearch/react@3.6.0(@algolia/client-search@4.23.2)(search-insights@2.13.0): + resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2)(search-insights@2.13.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2) + '@docsearch/css': 3.6.0 + algoliasearch: 4.23.2 + search-insights: 2.13.0 + transitivePeerDependencies: + - '@algolia/client-search' + dev: true + /@esbuild/aix-ppc64@0.20.2: resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} @@ -659,6 +852,16 @@ packages: dev: true optional: true + /@shikijs/core@1.2.1: + resolution: {integrity: sha512-KaIS0H4EQ3KI2d++TjYqRNgwp8E3M/68e9veR4QtInzA7kKFgcjeiJqb80fuXW+blDy5fmd11PN9g9soz/3ANQ==} + dev: true + + /@shikijs/transformers@1.2.1: + resolution: {integrity: sha512-H7cVtrdv6BW2kx83t2IQgP5ri1IA50mE3QnzgJ0AvOKCGtCEieXu0JIP3245cgjNLrL+LBwb8DtTXdky1iQL9Q==} + dependencies: + shiki: 1.2.1 + dev: true + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -675,6 +878,21 @@ packages: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true + /@types/linkify-it@3.0.5: + resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} + dev: true + + /@types/markdown-it@13.0.7: + resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} + dependencies: + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 + dev: true + + /@types/mdurl@1.0.5: + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + dev: true + /@types/node@20.11.30: resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} dependencies: @@ -685,6 +903,10 @@ packages: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: true + /@typescript-eslint/eslint-plugin@7.4.0(@typescript-eslint/parser@7.4.0)(eslint@8.57.0)(typescript@5.4.3): resolution: {integrity: sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -821,6 +1043,17 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true + /@vitejs/plugin-vue@5.0.4(vite@5.2.6)(vue@3.4.21): + resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + dependencies: + vite: 5.2.6(@types/node@20.11.30) + vue: 3.4.21(typescript@5.4.3) + dev: true + /@vitest/coverage-v8@1.4.0(vitest@1.4.0): resolution: {integrity: sha512-4hDGyH1SvKpgZnIByr9LhGgCEuF9DKM34IBLCC/fVfy24Z3+PZ+Ii9hsVBsHvY1umM1aGPEjceRkzxCfcQ10wg==} peerDependencies: @@ -884,6 +1117,181 @@ packages: pretty-format: 29.7.0 dev: true + /@vue/compiler-core@3.4.21: + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + dependencies: + '@babel/parser': 7.24.1 + '@vue/shared': 3.4.21 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + dev: true + + /@vue/compiler-dom@3.4.21: + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + dependencies: + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/compiler-sfc@3.4.21: + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} + dependencies: + '@babel/parser': 7.24.1 + '@vue/compiler-core': 3.4.21 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + estree-walker: 2.0.2 + magic-string: 0.30.8 + postcss: 8.4.38 + source-map-js: 1.2.0 + dev: true + + /@vue/compiler-ssr@3.4.21: + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/devtools-api@7.0.24(vue@3.4.21): + resolution: {integrity: sha512-4dsRfL+7CnRZ9TgkmFNHRc7fKSE6v74GNojwxop+F5lotUTxNDbN7HTYg/vJ7DfJtwKFYGQjMFbHxEDZQ4Sahg==} + dependencies: + '@vue/devtools-kit': 7.0.24(vue@3.4.21) + transitivePeerDependencies: + - vue + dev: true + + /@vue/devtools-kit@7.0.24(vue@3.4.21): + resolution: {integrity: sha512-6XD4ZRjbnk8XC5IM/GfuqB9O9UlmUU53pybuxg0/xBI9pxQfH3mOu5Gpyb55cG18uMW4c7hdEOgkxwFpUgYIrg==} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@vue/devtools-shared': 7.0.24 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + vue: 3.4.21(typescript@5.4.3) + dev: true + + /@vue/devtools-shared@7.0.24: + resolution: {integrity: sha512-hocNGlaQuc0s3hLNky64zXQK6DjQcIGEI0TJbizEAH7l5eZ6BCPB3P19ofu9HyUbbIn/PTJWqyLT8clzWqo0Xw==} + dependencies: + rfdc: 1.3.1 + dev: true + + /@vue/reactivity@3.4.21: + resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} + dependencies: + '@vue/shared': 3.4.21 + dev: true + + /@vue/runtime-core@3.4.21: + resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} + dependencies: + '@vue/reactivity': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/runtime-dom@3.4.21: + resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} + dependencies: + '@vue/runtime-core': 3.4.21 + '@vue/shared': 3.4.21 + csstype: 3.1.3 + dev: true + + /@vue/server-renderer@3.4.21(vue@3.4.21): + resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} + peerDependencies: + vue: 3.4.21 + dependencies: + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + vue: 3.4.21(typescript@5.4.3) + dev: true + + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + dev: true + + /@vueuse/core@10.9.0(vue@3.4.21): + resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.9.0 + '@vueuse/shared': 10.9.0(vue@3.4.21) + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/integrations@10.9.0(focus-trap@7.5.4)(vue@3.4.21): + resolution: {integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==} + peerDependencies: + async-validator: '*' + axios: '*' + change-case: '*' + drauu: '*' + focus-trap: '*' + fuse.js: '*' + idb-keyval: '*' + jwt-decode: '*' + nprogress: '*' + qrcode: '*' + sortablejs: '*' + universal-cookie: '*' + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + dependencies: + '@vueuse/core': 10.9.0(vue@3.4.21) + '@vueuse/shared': 10.9.0(vue@3.4.21) + focus-trap: 7.5.4 + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/metadata@10.9.0: + resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} + dev: true + + /@vueuse/shared@10.9.0(vue@3.4.21): + resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} + dependencies: + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + /@zxing/text-encoding@0.9.0: resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} requiresBuild: true @@ -918,6 +1326,26 @@ packages: uri-js: 4.4.1 dev: true + /algoliasearch@4.23.2: + resolution: {integrity: sha512-8aCl055IsokLuPU8BzLjwzXjb7ty9TPcUFFOk0pYOwsE5DMVhE3kwCMFtsCFKcnoPZK7oObm+H5mbnSO/9ioxQ==} + dependencies: + '@algolia/cache-browser-local-storage': 4.23.2 + '@algolia/cache-common': 4.23.2 + '@algolia/cache-in-memory': 4.23.2 + '@algolia/client-account': 4.23.2 + '@algolia/client-analytics': 4.23.2 + '@algolia/client-common': 4.23.2 + '@algolia/client-personalization': 4.23.2 + '@algolia/client-search': 4.23.2 + '@algolia/logger-common': 4.23.2 + '@algolia/logger-console': 4.23.2 + '@algolia/recommend': 4.23.2 + '@algolia/requester-browser-xhr': 4.23.2 + '@algolia/requester-common': 4.23.2 + '@algolia/requester-node-http': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1073,6 +1501,10 @@ packages: which: 2.0.2 dev: true + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: true + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -1129,6 +1561,11 @@ packages: esutils: 2.0.3 dev: true + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: true + /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -1265,6 +1702,10 @@ packages: engines: {node: '>=4.0'} dev: true + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: @@ -1367,6 +1808,12 @@ packages: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true + /focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + dependencies: + tabbable: 6.2.0 + dev: true + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -1509,6 +1956,10 @@ packages: function-bind: 1.1.2 dev: false + /hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + dev: true + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true @@ -1752,6 +2203,10 @@ packages: semver: 7.6.0 dev: true + /mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + dev: true + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true @@ -1826,6 +2281,14 @@ packages: xml2js: 0.5.0 dev: false + /minisearch@6.3.0: + resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} + dev: true + + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: true + /mlly@1.6.1: resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} dependencies: @@ -1976,6 +2439,10 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true + /perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + dev: true + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true @@ -2007,6 +2474,10 @@ packages: source-map-js: 1.2.0 dev: true + /preact@10.20.1: + resolution: {integrity: sha512-JIFjgFg9B2qnOoGiYMVBtrcFxHqn+dNXbq76bVmcaHYJFYR4lW67AOcXgAYQQTDYXDOg/kTZrKPNCdRgJ2UJmw==} + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2073,6 +2544,10 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true + /rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + dev: true + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -2124,6 +2599,10 @@ packages: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} dev: false + /search-insights@2.13.0: + resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==} + dev: true + /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} @@ -2156,6 +2635,12 @@ packages: engines: {node: '>=8'} dev: true + /shiki@1.2.1: + resolution: {integrity: sha512-u+XW6o0vCkUNlneZb914dLO+AayEIwK5tI62WeS//R5HIXBFiYaj/Hc5xcq27Yh83Grr4JbNtUBV8W6zyK4hWg==} + dependencies: + '@shikijs/core': 1.2.1 + dev: true + /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} dev: true @@ -2175,6 +2660,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + dev: true + /split-on-first@1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} @@ -2233,6 +2723,10 @@ packages: has-flag: 4.0.0 dev: true + /tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + dev: true + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -2404,6 +2898,61 @@ packages: fsevents: 2.3.3 dev: true + /vitepress@1.0.1(@algolia/client-search@4.23.2)(@types/node@20.11.30)(search-insights@2.13.0)(typescript@5.4.3): + resolution: {integrity: sha512-eNr5pOBppYUUjEhv8S0S2t9Tv95LQ6mMeHj6ivaGwfHxpov70Vduuwl/QQMDRznKDSaP0WKV7a82Pb4JVOaqEw==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + dependencies: + '@docsearch/css': 3.6.0 + '@docsearch/js': 3.6.0(@algolia/client-search@4.23.2)(search-insights@2.13.0) + '@shikijs/core': 1.2.1 + '@shikijs/transformers': 1.2.1 + '@types/markdown-it': 13.0.7 + '@vitejs/plugin-vue': 5.0.4(vite@5.2.6)(vue@3.4.21) + '@vue/devtools-api': 7.0.24(vue@3.4.21) + '@vueuse/core': 10.9.0(vue@3.4.21) + '@vueuse/integrations': 10.9.0(focus-trap@7.5.4)(vue@3.4.21) + focus-trap: 7.5.4 + mark.js: 8.11.1 + minisearch: 6.3.0 + shiki: 1.2.1 + vite: 5.2.6(@types/node@20.11.30) + vue: 3.4.21(typescript@5.4.3) + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + dev: true + /vitest@1.4.0(@types/node@20.11.30): resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==} engines: {node: ^18.0.0 || >=20.0.0} @@ -2460,6 +3009,37 @@ packages: - terser dev: true + /vue-demi@0.14.7(vue@3.4.21): + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.4.21(typescript@5.4.3) + dev: true + + /vue@3.4.21(typescript@5.4.3): + resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-sfc': 3.4.21 + '@vue/runtime-dom': 3.4.21 + '@vue/server-renderer': 3.4.21(vue@3.4.21) + '@vue/shared': 3.4.21 + typescript: 5.4.3 + dev: true + /web-encoding@1.1.5: resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7b44e93..1d196e6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,3 +3,4 @@ packages: - "adapters/*" - "plugins/*" - "tests/*" + - "documentation" diff --git a/tests/integration/package.json b/tests/integration/package.json index 7440534..d81c325 100644 --- a/tests/integration/package.json +++ b/tests/integration/package.json @@ -9,8 +9,6 @@ }, "devDependencies": { "@loom-io/core": "workspace:*", - "@loom-io/jsonConverter": "workspace:*", - "@loom-io/yamlConverter": "workspace:*", "@loom-io/test-utils": "workspace:*" }, "keywords": [],