diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0c4398f..aec78de 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,9 @@ packages: - sdk/ng-sdk-js/pkg + - sdk/ng-sdk-js/ng-signals + - sdk/ng-sdk-js/ng-alien-deepsignals + - sdk/ng-sdk-js/ng-ldo-compact + - sdk/ng-sdk-js/examples/multi-framework-signals onlyBuiltDependencies: - '@parcel/watcher' - '@swc/core' diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/.gitignore b/sdk/ng-sdk-js/examples/multi-framework-signals/.gitignore new file mode 100644 index 0000000..c680351 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/.gitignore @@ -0,0 +1,42 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store + +.astro + +# Playwright +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/README.md b/sdk/ng-sdk-js/examples/multi-framework-signals/README.md new file mode 100644 index 0000000..23e4ceb --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/README.md @@ -0,0 +1,4 @@ +# Multi-Framework Signal Proxies + +Thanks for providing the basic multi-framework template: +https://github.com/aleksadencic/multi-framework-app \ No newline at end of file diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/astro.config.mjs b/sdk/ng-sdk-js/examples/multi-framework-signals/astro.config.mjs new file mode 100644 index 0000000..e7d8371 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/astro.config.mjs @@ -0,0 +1,11 @@ +import { defineConfig } from "astro/config"; + +import react from "@astrojs/react"; +import vue from "@astrojs/vue"; +import svelte from "@astrojs/svelte"; + +// https://astro.build/config +export default defineConfig({ + integrations: [react(), vue(), svelte()], + srcDir: "./src/app", +}); diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/package-lock.json b/sdk/ng-sdk-js/examples/multi-framework-signals/package-lock.json new file mode 100644 index 0000000..c872808 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/package-lock.json @@ -0,0 +1,11452 @@ +{ + "name": "multi-framework-signal-proxies", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "multi-framework-signal-proxies", + "version": "0.1.0", + "dependencies": { + "@astrojs/react": "4.3.0", + "@astrojs/svelte": "7.1.0", + "@astrojs/vue": "^5.1.0", + "@gn8/alien-signals-react": "^0.1.1", + "@gn8/alien-signals-solid": "^0.1.1", + "@gn8/alien-signals-svelte": "^0.1.1", + "@gn8/alien-signals-vue": "^0.1.1", + "@ldo/ldo": "^1.0.0-alpha.32", + "@types/react": "19.1.10", + "@types/react-dom": "19.1.7", + "@types/shexj": "^2.1.7", + "alien-deepsignals": "^0.1.0", + "alien-signals": "^2.0.7", + "astro": "5.13.2", + "install": "^0.13.0", + "npm": "^11.5.2", + "prettier-eslint": "^16.4.2", + "react": "19.1.1", + "react-dom": "19.1.1", + "svelte": "5.38.2", + "vue": "3.5.19" + }, + "devDependencies": { + "@ldo/traverser-shexj": "^1.0.0-alpha.28", + "@playwright/test": "^1.55.0", + "@types/node": "24.3.0", + "@types/react": "19.1.10", + "@types/react-dom": "19.1.7", + "vite": "7.1.3", + "vitest": "^3.2.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.12.2.tgz", + "integrity": "sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.2.tgz", + "integrity": "sha512-KCkCqR3Goym79soqEtbtLzJfqhTWMyVaizUi35FLzgGSzBotSw8DB1qwsu7U96ihOJgYhDk2nVPz+3LnXPeX6g==", + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.6.tgz", + "integrity": "sha512-bwylYktCTsLMVoCOEHbn2GSUA3c5KT/qilekBKA3CBng0bo1TYjNZPr761vxumRk9kJGqTOtU+fgCAp5Vwokug==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.2", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.1.0", + "js-yaml": "^4.1.0", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.2.1", + "smol-toml": "^1.3.4", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/react": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-4.3.0.tgz", + "integrity": "sha512-N02aj52Iezn69qHyx5+XvPqgsPMEnel9mI5JMbGiRMTzzLMuNaxRVoQTaq2024Dpr7BLsxCjqMkNvelqMDhaHA==", + "license": "MIT", + "dependencies": { + "@vitejs/plugin-react": "^4.4.1", + "ultrahtml": "^1.6.0", + "vite": "^6.3.5" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0", + "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0", + "react": "^17.0.2 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@astrojs/react/node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/@astrojs/svelte": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/svelte/-/svelte-7.1.0.tgz", + "integrity": "sha512-nNAO7iFgCZXCN31N4xBSS/k7vZAZxeZ/v8V6VWZOKG47gVlxeAJBHzn2GlXMMVkxIamr6dhrkDrhYFKIPzoGpw==", + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "svelte2tsx": "^0.7.39", + "vite": "^6.3.5" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "astro": "^5.0.0", + "svelte": "^5.1.16", + "typescript": "^5.3.3" + } + }, + "node_modules/@astrojs/svelte/node_modules/@sveltejs/vite-plugin-svelte": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.1.1.tgz", + "integrity": "sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==", + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", + "debug": "^4.4.1", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.17", + "vitefu": "^1.0.6" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "svelte": "^5.0.0", + "vite": "^6.0.0" + } + }, + "node_modules/@astrojs/svelte/node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz", + "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.7" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "svelte": "^5.0.0", + "vite": "^6.0.0" + } + }, + "node_modules/@astrojs/svelte/node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/vue": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/vue/-/vue-5.1.0.tgz", + "integrity": "sha512-iBEprrO32D2gluauSohmewONb60kdHr1QSxhONHJEWBPunXaie9/equ0kLpRH8lfqqYp8WYKdLGoD84ESpXU3Q==", + "license": "MIT", + "dependencies": { + "@vitejs/plugin-vue": "5.2.1", + "@vitejs/plugin-vue-jsx": "^4.2.0", + "@vue/compiler-sfc": "^3.5.14", + "vite": "^6.3.5", + "vite-plugin-vue-devtools": "^7.7.6" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "astro": "^5.0.0", + "vue": "^3.2.30" + } + }, + "node_modules/@astrojs/vue/node_modules/@vitejs/plugin-vue": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@astrojs/vue/node_modules/@vitejs/plugin-vue-jsx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.2.0.tgz", + "integrity": "sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1", + "@rolldown/pluginutils": "^1.0.0-beta.9", + "@vue/babel-plugin-jsx": "^1.4.0" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@astrojs/vue/node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", + "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.3", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", + "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-2.4.0.tgz", + "integrity": "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==", + "license": "MIT", + "dependencies": { + "blob-to-buffer": "^1.2.8", + "cross-fetch": "^3.0.4", + "fontkit": "^2.0.2" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@gn8/alien-signals-react": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@gn8/alien-signals-react/-/alien-signals-react-0.1.1.tgz", + "integrity": "sha512-PijJtuYAugrcwJhWcEseHc7BNrrw2eLSYVLiTVe7Z/XRI5/ytXipyci+zgjkTgDMzaljFGU0KY20QxhINeiHbw==", + "license": "MIT", + "peerDependencies": { + "alien-signals": ">=2.0.0", + "react": ">=18.0.0" + } + }, + "node_modules/@gn8/alien-signals-solid": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@gn8/alien-signals-solid/-/alien-signals-solid-0.1.1.tgz", + "integrity": "sha512-1iYyiqR20AdIUIbAJ1WZr7rzgZQ18Lh8iiTVgEnZqRbKgDNAueXH/VdTYmzQr91SrO1gmNrIVYt49+yOmfUiLw==", + "license": "MIT", + "peerDependencies": { + "alien-signals": ">=2.0.0", + "solid-js": ">=1.6.0" + } + }, + "node_modules/@gn8/alien-signals-svelte": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@gn8/alien-signals-svelte/-/alien-signals-svelte-0.1.1.tgz", + "integrity": "sha512-BSFMkPvMXA6CkOeIV3K7iS4xo8vxWYSq3OIJn9BR3DxluqkNwpcJKbHvHCe+BGba3f2YUUddphbwz8t7E4AR6Q==", + "license": "MIT", + "peerDependencies": { + "alien-signals": ">=2.0.0", + "svelte": ">=5.0.0" + } + }, + "node_modules/@gn8/alien-signals-vue": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@gn8/alien-signals-vue/-/alien-signals-vue-0.1.1.tgz", + "integrity": "sha512-mjufpR+m4ukmHe31iUFE6CltFfkXN0tXVlzIV8ddzUiWyrsWDCV2tKD9DFj4MTRS/gjJ0BuClteIjR4iJ2AwNQ==", + "license": "MIT", + "peerDependencies": { + "alien-signals": ">=2.0.0", + "vue": ">=3.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "license": "BSD-3-Clause" + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@ldo/dataset": { + "version": "1.0.0-alpha.30", + "resolved": "https://registry.npmjs.org/@ldo/dataset/-/dataset-1.0.0-alpha.30.tgz", + "integrity": "sha512-XKGtsOULCZ32AtNlGqNYGjaZADwJtIWuILmL12TWeWpjzSfEodpzudjx4Ux+SES56MflGVl5CNuazsyj9+/5Gg==", + "license": "MIT", + "dependencies": { + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@rdfjs/dataset": "^1.1.0", + "buffer": "^6.0.3", + "readable-stream": "^4.2.0" + } + }, + "node_modules/@ldo/jsonld-dataset-proxy": { + "version": "1.0.0-alpha.32", + "resolved": "https://registry.npmjs.org/@ldo/jsonld-dataset-proxy/-/jsonld-dataset-proxy-1.0.0-alpha.32.tgz", + "integrity": "sha512-ll8jOP6L6sCEce73PNkBZWhs+GmDE1vNsg/7fRv6eqROZJOhOqHTs74/qkvyOTzRVVOthIB0MMoRva4kE96r2Q==", + "license": "MIT", + "dependencies": { + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@ldo/subscribable-dataset": "^1.0.0-alpha.32", + "jsonld2graphobject": "^0.0.4" + } + }, + "node_modules/@ldo/ldo": { + "version": "1.0.0-alpha.32", + "resolved": "https://registry.npmjs.org/@ldo/ldo/-/ldo-1.0.0-alpha.32.tgz", + "integrity": "sha512-B5yEKAjpQA4VbXOv3faxYYxjgDZUSxTy4vCSATpVvGt96RxolJzewJ7ELl0C2KG0EANcWoHyUB0ac7oOJrmUCQ==", + "license": "MIT", + "dependencies": { + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.32", + "@ldo/subscribable-dataset": "^1.0.0-alpha.32", + "buffer": "^6.0.3", + "readable-stream": "^4.3.0" + } + }, + "node_modules/@ldo/rdf-utils": { + "version": "1.0.0-alpha.30", + "resolved": "https://registry.npmjs.org/@ldo/rdf-utils/-/rdf-utils-1.0.0-alpha.30.tgz", + "integrity": "sha512-nYCaf//tysYOhQfj1SmYTvuRzAK1VCENMOFYJlF0oNKIK/pEqXOkxFKt8yhkNEZ5e9BZ5ofLmGFeyj3OLiYivw==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^1.2.0", + "n3": "^1.17.1", + "rdf-string": "^1.6.3" + } + }, + "node_modules/@ldo/subscribable-dataset": { + "version": "1.0.0-alpha.32", + "resolved": "https://registry.npmjs.org/@ldo/subscribable-dataset/-/subscribable-dataset-1.0.0-alpha.32.tgz", + "integrity": "sha512-E42L2tDRxqOx5vxLGG0HiuZ6SMdW9iothJcFREV4f92kE9KE+l+Ope9hpfAmRfyNMdAEbl1wvW2iCfyj/J5naw==", + "license": "MIT", + "dependencies": { + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "uuid": "^11.1.0" + } + }, + "node_modules/@ldo/traverser-shexj": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@ldo/traverser-shexj/-/traverser-shexj-1.0.0-alpha.28.tgz", + "integrity": "sha512-N06+LOWhv6//unPRLbFMd56MqPf5lO2ihZgle9hNLmxt6QJmNrZM3oXzHCL3TfDu4OT1/NUZp3kj2HmztQIZkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ldo/type-traverser": "^1.0.0-alpha.28" + } + }, + "node_modules/@ldo/type-traverser": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@ldo/type-traverser/-/type-traverser-1.0.0-alpha.28.tgz", + "integrity": "sha512-pGMIVxLzoLjYVhADuVhg6r5ZDNleXZ9DcyIvLXo1/ADEocLnysg/Xjk9D/7l/Rw3WtDJrTFOOtBv8OnH+VPgKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "uuid": "^8.3.2" + } + }, + "node_modules/@ldo/type-traverser/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@playwright/test": { + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.0.tgz", + "integrity": "sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.55.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", + "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.1" + }, + "bin": { + "rdfjs-data-model-test": "bin/test.js" + } + }, + "node_modules/@rdfjs/dataset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-1.1.1.tgz", + "integrity": "sha512-BNwCSvG0cz0srsG5esq6CQKJc1m8g/M0DZpLuiEp0MMpfwguXX7VeS8TCg4UUG3DV/DqEvhy83ZKSEjdsYseeA==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^1.2.0" + }, + "bin": { + "rdfjs-dataset-test": "bin/test.js" + } + }, + "node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", + "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.47.1", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.47.1", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, + "node_modules/@shikijs/core": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.11.0.tgz", + "integrity": "sha512-oJwU+DxGqp6lUZpvtQgVOXNZcVsirN76tihOLBmwILkKuRuwHteApP8oTXmL4tF5vS5FbOY0+8seXmiCoslk4g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.11.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.11.0.tgz", + "integrity": "sha512-6/ov6pxrSvew13k9ztIOnSBOytXeKs5kfIR7vbhdtVRg+KPzvp2HctYGeWkqv7V6YIoLicnig/QF3iajqyElZA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.11.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.3" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.11.0.tgz", + "integrity": "sha512-4DwIjIgETK04VneKbfOE4WNm4Q7WC1wo95wv82PoHKdqX4/9qLRUwrfKlmhf0gAuvT6GHy0uc7t9cailk6Tbhw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.11.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.11.0.tgz", + "integrity": "sha512-Njg/nFL4HDcf/ObxcK2VeyidIq61EeLmocrwTHGGpOQx0BzrPWM1j55XtKQ1LvvDWH15cjQy7rg96aJ1/l63uw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.11.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.11.0.tgz", + "integrity": "sha512-BhhWRzCTEk2CtWt4S4bgsOqPJRkapvxdsifAwqP+6mk5uxboAQchc0etiJ0iIasxnMsb764qGD24DK9albcU9Q==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.11.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.11.0.tgz", + "integrity": "sha512-RB7IMo2E7NZHyfkqAuaf4CofyY8bPzjWPjJRzn6SEak3b46fIQyG6Vx5fG/obqkfppQ+g8vEsiD7Uc6lqQt32Q==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.5", + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "license": "MIT" + }, + "node_modules/@types/fontkit": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/fontkit/-/fontkit-2.0.8.tgz", + "integrity": "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/http-link-header": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.7.tgz", + "integrity": "sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jsonld": { + "version": "1.5.15", + "resolved": "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.15.tgz", + "integrity": "sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "24.3.0", + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, + "node_modules/@types/react": { + "version": "19.1.10", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.7", + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/shexj": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/shexj/-/shexj-2.1.7.tgz", + "integrity": "sha512-pu/0vIZxFTMPVjTlo5MJKFkBL/EbAuFhtCXpmBB7ZdUiyNpc6pt8GxfyRPqdf6q2SsWu71a/vbhvGK2IZN2Eug==", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz", + "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==", + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz", + "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.2", + "@vue/babel-helper-vue-transform-on": "1.5.0", + "@vue/babel-plugin-resolve-type": "1.5.0", + "@vue/shared": "^3.5.18" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz", + "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/parser": "^7.28.0", + "@vue/compiler-sfc": "^3.5.18" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.19", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/shared": "3.5.19", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.19", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.19", + "@vue/shared": "3.5.19" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.19", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/compiler-core": "3.5.19", + "@vue/compiler-dom": "3.5.19", + "@vue/compiler-ssr": "3.5.19", + "@vue/shared": "3.5.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.19", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.19", + "@vue/shared": "3.5.19" + } + }, + "node_modules/@vue/devtools-core": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.7.tgz", + "integrity": "sha512-9z9TLbfC+AjAi1PQyWX+OErjIaJmdFlbDHcD+cAMYKY6Bh5VlsAtCeGyRMrXwIlMEQPukvnWt3gZBLwTAIMKzQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7", + "@vue/devtools-shared": "^7.7.7", + "mitt": "^3.0.1", + "nanoid": "^5.1.0", + "pathe": "^2.0.3", + "vite-hot-client": "^2.0.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.19", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.19" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.19", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.19", + "@vue/shared": "3.5.19" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.19", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.19", + "@vue/runtime-core": "3.5.19", + "@vue/shared": "3.5.19", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.19", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.19", + "@vue/shared": "3.5.19" + }, + "peerDependencies": { + "vue": "3.5.19" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.19", + "license": "MIT" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alien-deepsignals": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/alien-deepsignals/-/alien-deepsignals-0.1.0.tgz", + "integrity": "sha512-sP1JRIqLNbQ9gt31Kmv182sq4gAx6tW0mF+YXIsNrvkd2J/x0ifdsiI162M5x2fjCo8zkZFzUFxaa9S2vWC/sA==", + "license": "MIT", + "dependencies": { + "alien-signals": "^1.0.0" + } + }, + "node_modules/alien-deepsignals/node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "license": "MIT" + }, + "node_modules/alien-signals": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-2.0.7.tgz", + "integrity": "sha512-wE7y3jmYeb0+h6mr5BOovuqhFv22O/MV9j5p0ndJsa7z1zJNPGQ4ph5pQk/kTTCWRC3xsA4SmtwmkzQO+7NCNg==", + "license": "MIT" + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/astro": { + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.13.2.tgz", + "integrity": "sha512-yjcXY0Ua3EwjpVd3GoUXa65HQ6qgmURBptA+M9GzE0oYvgfuyM7bIbH8IR/TWIbdefVUJR5b7nZ0oVnMytmyfQ==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.12.2", + "@astrojs/internal-helpers": "0.7.2", + "@astrojs/markdown-remark": "6.3.6", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^2.4.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.1.4", + "acorn": "^8.14.1", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.2.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.0.2", + "cssesc": "^3.0.0", + "debug": "^4.4.0", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.1.1", + "diff": "^5.2.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.6.0", + "esbuild": "^0.25.0", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.3.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.1.1", + "import-meta-resolve": "^4.1.0", + "js-yaml": "^4.1.0", + "kleur": "^4.1.5", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.0", + "package-manager-detector": "^1.1.0", + "picomatch": "^4.0.2", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.1", + "shiki": "^3.2.1", + "smol-toml": "^1.3.4", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.12", + "tsconfck": "^3.1.5", + "ultrahtml": "^1.6.0", + "unifont": "~0.5.0", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.15.0", + "vfile": "^6.0.3", + "vite": "^6.3.4", + "vitefu": "^1.0.6", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.1", + "zod": "^3.24.4", + "zod-to-json-schema": "^3.24.5", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.33.3" + } + }, + "node_modules/astro/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/astro/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/astro/node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/birpc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.5.0.tgz", + "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/blob-to-buffer": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz", + "integrity": "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browserslist": { + "version": "4.25.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", + "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001735", + "electron-to-chromium": "^1.5.204", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001736", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001736.tgz", + "integrity": "sha512-ImpN5gLEY8gWeqfLUyEF4b7mYWcYoR2Si1VhnrbM4JizRFmfGaAQ12PhNykq6nvI4XvKLrsp8Xde74D5phJOSw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chai": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.1.tgz", + "integrity": "sha512-48af6xm9gQK8rhIcOxWwdGzIervm8BVTin+yRp9HEvU20BtVZ2lBywlIJBzwaDtvo0FvjeL7QdCADoUoqIbV3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "license": "MIT" + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.207", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.207.tgz", + "integrity": "sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.9", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/esm-env": { + "version": "1.2.2", + "license": "MIT" + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrap": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC" + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.3.0.tgz", + "integrity": "sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg==", + "license": "MIT", + "dependencies": { + "@types/fontkit": "^2.0.8", + "fontkit": "^2.0.4" + } + }, + "node_modules/fontkit": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", + "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", + "license": "MIT", + "dependencies": { + "@swc/helpers": "^0.5.12", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "dfa": "^1.2.0", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.4.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/fs-extra": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", + "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT" + }, + "node_modules/h3": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz", + "integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.2", + "radix3": "^1.1.2", + "ufo": "^1.6.1", + "uncrypto": "^0.1.3" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-link-header": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/install": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz", + "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT", + "optional": true + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-reference": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonld-context-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", + "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "cross-fetch": "^3.0.6", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/jsonld-context-parser/node_modules/@types/node": { + "version": "18.19.124", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.124.tgz", + "integrity": "sha512-hY4YWZFLs3ku6D2Gqo3RchTd9VRCcrjqp/I0mmohYeUVA5Y8eCXKJEasHxLAJVZRJuQogfd1GiJ9lgogBgKeuQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/jsonld-context-parser/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/jsonld2graphobject": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/jsonld2graphobject/-/jsonld2graphobject-0.0.4.tgz", + "integrity": "sha512-7siWYw9/EaD9lWyMbHr2uLMy8kbNVyOtDlsAWJUlUjVfXpcJcwLN6f0qeNt0ySV4fDoAJOjJXNvo7V/McrubAg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "jsonld-context-parser": "^2.1.5", + "uuid": "^8.3.2" + } + }, + "node_modules/jsonld2graphobject/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/jsonld2graphobject/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loglevel-colored-level-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==", + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "loglevel": "^1.4.1" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loupe": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.0.tgz", + "integrity": "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/n3": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/n3/-/n3-1.26.0.tgz", + "integrity": "sha512-SQknS0ua90rN+3RHuk8BeIqeYyqIH/+ecViZxX08jR4j6MugqWRjtONl3uANG/crWXnOM2WIqBJtjIhVYFha+w==", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.2.tgz", + "integrity": "sha512-zWaamgDUdo9SSLw47we78+zYw/bDr5gH8pH7oRRs8V3KmBtu8GLgGIbV2p/gRPd3LWpEOpjQj7X1FOU3VFMJ8g==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.5.2.tgz", + "integrity": "sha512-qsEkHPw/Qdw4eA1kKVxsa5F6QeJCiLM1GaexGt/FpUpfiBxkLXVXIVtscOAeVWVe17pmYwD9Aji8dfsXR4r68w==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "normalize-package-data", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which" + ], + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^9.1.3", + "@npmcli/config": "^10.3.1", + "@npmcli/fs": "^4.0.0", + "@npmcli/map-workspaces": "^4.0.2", + "@npmcli/package-json": "^6.2.0", + "@npmcli/promise-spawn": "^8.0.2", + "@npmcli/redact": "^3.2.2", + "@npmcli/run-script": "^9.1.0", + "@sigstore/tuf": "^3.1.1", + "abbrev": "^3.0.1", + "archy": "~1.0.0", + "cacache": "^19.0.1", + "chalk": "^5.4.1", + "ci-info": "^4.3.0", + "cli-columns": "^4.0.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^10.4.5", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^8.1.0", + "ini": "^5.0.0", + "init-package-json": "^8.2.1", + "is-cidr": "^5.1.1", + "json-parse-even-better-errors": "^4.0.0", + "libnpmaccess": "^10.0.1", + "libnpmdiff": "^8.0.6", + "libnpmexec": "^10.1.5", + "libnpmfund": "^7.0.6", + "libnpmorg": "^8.0.0", + "libnpmpack": "^9.0.6", + "libnpmpublish": "^11.1.0", + "libnpmsearch": "^9.0.0", + "libnpmteam": "^8.0.1", + "libnpmversion": "^8.0.1", + "make-fetch-happen": "^14.0.3", + "minimatch": "^9.0.5", + "minipass": "^7.1.1", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^11.2.0", + "nopt": "^8.1.0", + "normalize-package-data": "^7.0.1", + "npm-audit-report": "^6.0.0", + "npm-install-checks": "^7.1.1", + "npm-package-arg": "^12.0.2", + "npm-pick-manifest": "^10.0.0", + "npm-profile": "^11.0.1", + "npm-registry-fetch": "^18.0.2", + "npm-user-validate": "^3.0.0", + "p-map": "^7.0.3", + "pacote": "^21.0.0", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^4.1.0", + "semver": "^7.7.2", + "spdx-expression-parse": "^4.0.0", + "ssri": "^12.0.0", + "supports-color": "^10.0.0", + "tar": "^6.2.1", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^6.0.2", + "which": "^5.0.0" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "9.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/metavuln-calculator": "^9.0.0", + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.1", + "@npmcli/query": "^4.0.0", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^9.0.1", + "bin-links": "^5.0.0", + "cacache": "^19.0.1", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^8.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^8.0.0", + "npm-install-checks": "^7.1.0", + "npm-package-arg": "^12.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.1", + "pacote": "^21.0.0", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "proggy": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "ssri": "^12.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "10.3.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/package-json": "^6.0.1", + "ci-info": "^4.0.0", + "ini": "^5.0.0", + "nopt": "^8.1.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^19.0.0", + "json-parse-even-better-errors": "^4.0.0", + "pacote": "^21.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "6.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "3.2.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "9.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "2.0.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.4.3", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "2.1.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-styles": { + "version": "6.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^7.0.0", + "npm-normalize-package-bin": "^4.0.0", + "proc-log": "^5.0.0", + "read-cmd-shim": "^5.0.0", + "write-file-atomic": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "19.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/minizlib": { + "version": "3.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/mkdirp": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/tar": { + "version": "7.4.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "5.4.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "4.1.3", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^5.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.4.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/diff": { + "version": "7.0.0", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.2", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/foreground-child": { + "version": "3.3.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.4.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "8.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.2.0", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/ini": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "8.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^6.1.0", + "npm-package-arg": "^12.0.0", + "promzard": "^2.0.0", + "read": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "5.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^4.1.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "3.4.3", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "10.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "8.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.3", + "@npmcli/installed-package-contents": "^3.0.0", + "binary-extensions": "^3.0.0", + "diff": "^7.0.0", + "minimatch": "^9.0.4", + "npm-package-arg": "^12.0.0", + "pacote": "^21.0.0", + "tar": "^6.2.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "10.1.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.3", + "@npmcli/package-json": "^6.1.1", + "@npmcli/run-script": "^9.0.1", + "ci-info": "^4.0.0", + "npm-package-arg": "^12.0.0", + "pacote": "^21.0.0", + "proc-log": "^5.0.0", + "read": "^4.0.0", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "7.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "8.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "9.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.3", + "@npmcli/run-script": "^9.0.1", + "npm-package-arg": "^12.0.0", + "pacote": "^21.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "11.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^6.2.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1", + "proc-log": "^5.0.0", + "semver": "^7.3.7", + "sigstore": "^3.0.0", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "9.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "8.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "8.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.1", + "@npmcli/run-script": "^9.0.1", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "10.4.3", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "14.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "9.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "7.1.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "4.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": { + "version": "3.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "11.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minizlib": { + "version": "3.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/tar": { + "version": "7.4.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "8.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "7.0.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^8.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "7.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "12.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "10.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "10.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "11.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "18.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": { + "version": "3.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "3.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "7.0.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/package-json-from-dist": { + "version": "1.0.1", + "inBundle": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/npm/node_modules/pacote": { + "version": "21.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^10.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.11.1", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/proggy": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^2.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/read-package-json-fast": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.7.2", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.8.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.21", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/sprintf-js": { + "version": "1.1.3", + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/npm/node_modules/ssri": { + "version": "12.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "10.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.14", + "inBundle": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "inBundle": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "3.0.1", + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/which": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/which/node_modules/isexe": { + "version": "3.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz", + "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz", + "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", + "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", + "license": "MIT" + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright": { + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.0.tgz", + "integrity": "sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.55.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.0.tgz", + "integrity": "sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-eslint": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-16.4.2.tgz", + "integrity": "sha512-vtJAQEkaN8fW5QKl08t7A5KCjlZuDUNeIlr9hgolMS5s3+uzbfRHDwaRnzrdqnY2YpHDmeDS/8zY0MKQHXJtaA==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/parser": "^6.21.0", + "common-tags": "^1.8.2", + "dlv": "^1.1.3", + "eslint": "^8.57.1", + "indent-string": "^4.0.0", + "lodash.merge": "^4.6.2", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^3.5.3", + "pretty-format": "^29.7.0", + "require-relative": "^0.8.7", + "tslib": "^2.8.1", + "vue-eslint-parser": "^9.4.3" + }, + "engines": { + "node": ">=16.10.0" + }, + "funding": { + "url": "https://opencollective.com/prettier-eslint" + }, + "peerDependencies": { + "prettier-plugin-svelte": "^3.0.0", + "svelte-eslint-parser": "*" + }, + "peerDependenciesMeta": { + "prettier-plugin-svelte": { + "optional": true + }, + "svelte-eslint-parser": { + "optional": true + } + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/rdf-data-factory": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.3.tgz", + "integrity": "sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^1.0.0" + } + }, + "node_modules/rdf-data-factory/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rdf-string": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", + "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/react": { + "version": "19.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.1", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.1" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", + "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relative-to-absolute-iri": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz", + "integrity": "sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q==", + "license": "MIT" + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restructure": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", + "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", + "license": "MIT" + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.47.1", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.47.1", + "@rollup/rollup-android-arm64": "4.47.1", + "@rollup/rollup-darwin-arm64": "4.47.1", + "@rollup/rollup-darwin-x64": "4.47.1", + "@rollup/rollup-freebsd-arm64": "4.47.1", + "@rollup/rollup-freebsd-x64": "4.47.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.47.1", + "@rollup/rollup-linux-arm-musleabihf": "4.47.1", + "@rollup/rollup-linux-arm64-gnu": "4.47.1", + "@rollup/rollup-linux-arm64-musl": "4.47.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.47.1", + "@rollup/rollup-linux-ppc64-gnu": "4.47.1", + "@rollup/rollup-linux-riscv64-gnu": "4.47.1", + "@rollup/rollup-linux-riscv64-musl": "4.47.1", + "@rollup/rollup-linux-s390x-gnu": "4.47.1", + "@rollup/rollup-linux-x64-gnu": "4.47.1", + "@rollup/rollup-linux-x64-musl": "4.47.1", + "@rollup/rollup-win32-arm64-msvc": "4.47.1", + "@rollup/rollup-win32-ia32-msvc": "4.47.1", + "@rollup/rollup-win32-x64-msvc": "4.47.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.26.0", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/seroval": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", + "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/seroval-plugins": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.2.tgz", + "integrity": "sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.11.0.tgz", + "integrity": "sha512-VgKumh/ib38I1i3QkMn6mAQA6XjjQubqaAYhfge71glAll0/4xnt8L2oSuC45Qcr/G5Kbskj4RliMQddGmy/Og==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.11.0", + "@shikijs/engine-javascript": "3.11.0", + "@shikijs/engine-oniguruma": "3.11.0", + "@shikijs/langs": "3.11.0", + "@shikijs/themes": "3.11.0", + "@shikijs/types": "3.11.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sirv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/smol-toml": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.4.2.tgz", + "integrity": "sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/solid-js": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.9.tgz", + "integrity": "sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==", + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.1.0", + "seroval": "~1.3.0", + "seroval-plugins": "~1.3.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true, + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svelte": { + "version": "5.38.2", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "esm-env": "^1.2.1", + "esrap": "^2.1.0", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte2tsx": { + "version": "0.7.42", + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.42.tgz", + "integrity": "sha512-PSNrKS16aVdAajoFjpF5M0t6TA7ha7GcKbBajD9RG3M+vooAuvLnWAGUSC6eJL4zEOVbOWKtcS2BuY4rxPljoA==", + "license": "MIT", + "dependencies": { + "dedent-js": "^1.0.1", + "pascal-case": "^3.1.1" + }, + "peerDependencies": { + "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", + "typescript": "^4.9.4 || ^5.0.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.10.0", + "license": "MIT" + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.5.2.tgz", + "integrity": "sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0", + "ofetch": "^1.4.1", + "ohash": "^2.0.0" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unstorage": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.1.tgz", + "integrity": "sha512-gdpZ3guLDhz+zWIlYP1UwQ259tG5T5vYRzDaHMkQ1bBY1SQPutvZnrRjTFaWUUpseErJIgAZS51h6NOcZVZiqQ==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.3", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.6", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "7.1.3", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-hot-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz", + "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.7.tgz", + "integrity": "sha512-d0fIh3wRcgSlr4Vz7bAk4va1MkdqhQgj9ANE/rBhsAjOnRfTLs2ocjFMvSUOsv6SRRXU9G+VM7yMgqDb6yI4iQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-core": "^7.7.7", + "@vue/devtools-kit": "^7.7.7", + "@vue/devtools-shared": "^7.7.7", + "execa": "^9.5.2", + "sirv": "^3.0.1", + "vite-plugin-inspect": "0.8.9", + "vite-plugin-vue-inspector": "^5.3.1" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-plugin-vue-devtools/node_modules/vite-plugin-inspect": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", + "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", + "license": "MIT", + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.1.1", + "sirv": "^3.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz", + "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.19", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.19", + "@vue/compiler-sfc": "3.5.19", + "@vue/runtime-dom": "3.5.19", + "@vue/server-renderer": "3.5.19", + "@vue/shared": "3.5.19" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/package.json b/sdk/ng-sdk-js/examples/multi-framework-signals/package.json new file mode 100644 index 0000000..7727f5f --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/package.json @@ -0,0 +1,48 @@ +{ + "name": "multi-framework-signals", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro", + "test": "vitest", + "test:e2e": "playwright test" + }, + "dependencies": { + "ng-signals": "0.1.0", + "@astrojs/react": "4.3.0", + "@astrojs/svelte": "7.1.0", + "@astrojs/vue": "^5.1.0", + "@gn8/alien-signals-react": "^0.1.1", + "@gn8/alien-signals-solid": "^0.1.1", + "@gn8/alien-signals-svelte": "^0.1.1", + "@gn8/alien-signals-vue": "^0.1.1", + "@ldo/ldo": "^1.0.0-alpha.32", + "@types/react": "19.1.10", + "@types/react-dom": "19.1.7", + "@types/shexj": "^2.1.7", + "ng-alien-deepsignals": "^0.1.0", + "alien-signals": "^2.0.7", + "astro": "5.13.2", + "install": "^0.13.0", + "npm": "^11.5.2", + "prettier-eslint": "^16.4.2", + "react": "19.1.1", + "react-dom": "19.1.1", + "svelte": "5.38.2", + "vue": "3.5.19" + }, + "devDependencies": { + "@ldo/traverser-shexj": "^1.0.0-alpha.28", + "@playwright/test": "^1.55.0", + "@types/node": "24.3.0", + "@types/react": "19.1.10", + "@types/react-dom": "19.1.7", + "vite": "7.1.3", + "vitest": "^3.2.4" + } +} diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/playwright.config.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/playwright.config.ts new file mode 100644 index 0000000..d73ec77 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/playwright.config.ts @@ -0,0 +1,79 @@ +import { defineConfig, devices } from "@playwright/test"; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// import dotenv from 'dotenv'; +// import path from 'path'; +// dotenv.config({ path: path.resolve(__dirname, '.env') }); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: "./src/frontends/tests", + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: "html", + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: "http://localhost:4321", + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: "on-first-retry", + }, + + /* Configure projects for major browsers */ + projects: [ + // { + // name: "chromium", + // use: { ...devices["Desktop Chrome"] }, + // }, + + { + name: "firefox", + use: { ...devices["Desktop Firefox"] }, + }, + + { + name: "webkit", + use: { ...devices["Desktop Safari"] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + webServer: { + command: "npm run dev", + url: "http://localhost:4321", + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/Highlight.astro b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/Highlight.astro new file mode 100644 index 0000000..93001d4 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/Highlight.astro @@ -0,0 +1,43 @@ +--- +const { react, svelte, vue, astro } = Astro.props; + +const frameworkName = Object.keys(Astro.props)[0]; +--- + +
+

{frameworkName}

+
+ +
+
+ + diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/ReactRoot.tsx b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/ReactRoot.tsx new file mode 100644 index 0000000..92c370c --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/ReactRoot.tsx @@ -0,0 +1,7 @@ +import { HelloWorldReact } from "src/frontends/react/HelloWorld"; + +const Root = () => { + return ; +}; + +export default Root; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/SvelteRoot.svelte b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/SvelteRoot.svelte new file mode 100644 index 0000000..0bff059 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/SvelteRoot.svelte @@ -0,0 +1,5 @@ + + + diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/VueRoot.vue b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/VueRoot.vue new file mode 100644 index 0000000..7afcd54 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/components/VueRoot.vue @@ -0,0 +1,9 @@ + + + diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/layouts/Layout.astro b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/layouts/Layout.astro new file mode 100644 index 0000000..ca39233 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/layouts/Layout.astro @@ -0,0 +1,21 @@ +--- +import Highlight from "../components/Highlight.astro"; +--- + + + + + + + Multi-Framework Signal Experiments + + + +
Multi-Framework Signal Experiments
+ +
+ +
+
+ + diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/pages/index.astro b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/pages/index.astro new file mode 100644 index 0000000..bf359a6 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/pages/index.astro @@ -0,0 +1,24 @@ +--- +import Layout from "../layouts/Layout.astro"; +import Highlight from "../components/Highlight.astro"; + +import VueRoot from "../components/VueRoot.vue"; +import ReactRoot from "../components/ReactRoot"; +import SvelteRoot from "../components/SvelteRoot.svelte"; + +const title = "Multi-framework app"; +--- + + + + + + + + + + + + + + diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/store/state.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/store/state.ts new file mode 100644 index 0000000..06d3711 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/app/store/state.ts @@ -0,0 +1,3 @@ +import { atom } from "nanostores"; + +export const selectedFilters = atom([]); diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/react/HelloWorld.tsx b/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/react/HelloWorld.tsx new file mode 100644 index 0000000..5c4a860 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/react/HelloWorld.tsx @@ -0,0 +1,152 @@ +import React from "react"; +import useShape from "ng-signals/frontendAdapters/react/useShape"; +import flattenObject from "../utils/flattenObject"; +import { TestObjectShapeType } from "src/shapes/ldo/testShape.shapeTypes"; + +export function HelloWorldReact() { + const state = useShape(TestObjectShapeType); + + // @ts-expect-error + window.reactState = state; + + if (!state) return <>Loading state; + + // Create a table from the state object: One column for keys, one for values, one with an input to change the value. + + return ( +
+

Rendered in React

+ + + + + + + + + + + + + {(() => { + const setNestedValue = (obj: any, path: string, value: any) => { + const keys = path.split("."); + let current = obj; + + for (let i = 0; i < keys.length - 1; i++) { + current = current[keys[i]]; + } + + current[keys[keys.length - 1]] = value; + }; + + const getNestedValue = (obj: any, path: string) => { + return path + .split(".") + .reduce((current, key) => current[key], obj); + }; + + return flattenObject(state).map(([key, value]) => ( + + + + + + )); + })()} + +
KeyValueEdit
{key} + {value instanceof Set + ? Array.from(value).join(", ") + : Array.isArray(value) + ? `[${value.join(", ")}]` + : JSON.stringify(value)} + + {typeof value === "string" ? ( + { + setNestedValue(state, key, e.target.value); + }} + /> + ) : typeof value === "number" ? ( + { + setNestedValue(state, key, Number(e.target.value)); + }} + /> + ) : typeof value === "boolean" ? ( + { + setNestedValue(state, key, e.target.checked); + }} + /> + ) : Array.isArray(value) ? ( +
+ + +
+ ) : value instanceof Set ? ( +
+ + +
+ ) : ( + "N/A" + )} +
+
+ ); +} diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/svelte/HelloWorld.svelte b/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/svelte/HelloWorld.svelte new file mode 100644 index 0000000..e2cad44 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/svelte/HelloWorld.svelte @@ -0,0 +1,122 @@ + + +{#if $shapeObject} +
+

Rendered in Svelte

+ + + + + + + + + + {#each flatEntries as [key, value] (key)} + + + + + + {/each} + +
KeyValueEdit
{key} + {#if value instanceof Set} + {Array.from(value).join(", ")} + {:else if Array.isArray(value)} + [{value.join(", ")}] + {:else} + {JSON.stringify(value)} + {/if} + + {#if typeof value === "string"} + + setNestedValue($shapeObject, key, e.target.value)} + /> + {:else if typeof value === "number"} + + setNestedValue($shapeObject, key, Number(e.target.value))} + /> + {:else if typeof value === "boolean"} + + setNestedValue($shapeObject, key, e.target.checked)} + /> + {:else if Array.isArray(value)} +
+ + +
+ {:else if value instanceof Set} +
+ + +
+ {:else} + N/A + {/if} +
+
+{:else} +

Loading state

+{/if} diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/tests/reactiveCrossFramework.spec.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/tests/reactiveCrossFramework.spec.ts new file mode 100644 index 0000000..3f4f836 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/tests/reactiveCrossFramework.spec.ts @@ -0,0 +1,177 @@ +import { test, expect } from "@playwright/test"; + +const mockTestObject = { + type: "TestObject", + stringValue: "string", + numValue: 42, + boolValue: true, + nullValue: null, + arrayValue: [1, 2, 3], + objectValue: { + nestedString: "nested", + nestedNum: 7, + nestedArray: [10, 12], + }, + setValue: new Set(["v1", "v2", "v3"]), +}; + +test("components load", async ({ page }) => { + await page.goto("/"); + await page.waitForSelector(".vue astro-island"); + + await expect(page.locator(".vue .title")).toHaveText("vue"); + await expect(page.locator(".react .title")).toHaveText("react"); + await expect(page.locator(".svelte .title")).toHaveText("svelte"); +}); + +// TODO: Test without signal pooling. +test.describe("cross framework propagation", () => { + const frameworks = ["vue", "react", "svelte"] as const; + + const isPlainObject = (v: unknown): v is Record => + typeof v === "object" && + v !== null && + !Array.isArray(v) && + !(v instanceof Set); + + function changedValue(original: unknown) { + if (typeof original === "string") return original + "_changed"; + if (typeof original === "number") return original + 10; + if (typeof original === "boolean") return !original; + if (Array.isArray(original)) return [...original, {}, {}]; + if (original instanceof Set) new Set(original).add("_changed"); + + return original; + } + + async function mutateCell( + row: ReturnType<(typeof test)["info"] extends any ? any : never>, + original: unknown + ) { + if (typeof original === "string") { + const input = row.locator("input[type='text']"); + await input.fill(String(changedValue(original))); + await input.blur(); + } else if (typeof original === "number") { + const input = row.locator("input[type='number']"); + await input.fill(String(changedValue(original))); + await input.blur(); + } else if (typeof original === "boolean") { + const input = row.locator("input[type='checkbox']"); + await input.setChecked(Boolean(changedValue(original))); + } else if (Array.isArray(original)) { + const addButton = row.locator("button", { hasText: "Add" }); + await addButton.click(); + await addButton.click(); + } + } + + async function assertCell( + row: ReturnType<(typeof test)["info"] extends any ? any : never>, + original: unknown, + meta: { framework: string; key: string } + ) { + const { framework, key } = meta; + const expected = changedValue(original); + const cell = row.locator("td").nth(1); + + if (typeof original === "string") { + const input = row.locator("input[type='text']"); + await expect( + input, + `Text value mismatch (${framework}:${key})` + ).toHaveValue(String(expected)); + await expect( + cell, + `Rendered text mismatch (${framework}:${key})` + ).toContainText(String(expected)); + } else if (typeof original === "number") { + const input = row.locator("input[type='number']"); + await expect( + input, + `Number value mismatch (${framework}:${key})` + ).toHaveValue(String(expected)); + await expect( + cell, + `Rendered number mismatch (${framework}:${key})` + ).toContainText(String(expected)); + } else if (typeof original === "boolean") { + const input = row.locator("input[type='checkbox']"); + await expect( + input, + `Checkbox state mismatch (${framework}:${key})` + ).toBeChecked({ + checked: Boolean(expected), + }); + await expect( + cell, + `Rendered boolean mismatch (${framework}:${key})` + ).toContainText(String(expected)); + } else if (Array.isArray(original)) { + const expectedLength = (original as unknown[]).length + 2; + await expect( + cell, + `Array length mismatch (${framework}:${key}) expected ${expectedLength}` + ).toContainText(String(expectedLength)); + } + } + + for (const source of frameworks) { + for (const target of frameworks) { + if (source === target) continue; + + test(`${source} edits propagate to ${target}`, async ({ page }) => { + await page.goto("/"); + await page.waitForSelector(".vue astro-island"); + + // Mutate in source + await test.step(`Mutate values in ${source}`, async () => { + for (const [key, value] of Object.entries(mockTestObject)) { + if (isPlainObject(value)) { + for (const [k2, v2] of Object.entries(value)) { + const fullKey = `${key}.${k2}`; + const row = page.locator(`.${source} tr`, { hasText: fullKey }); + await mutateCell(row, v2); + } + } else { + const row = page.locator(`.${source} tr`, { hasText: key }); + await mutateCell(row, value); + } + } + }); + + // Assert in target + await test.step(`Assert propagation into ${target}`, async () => { + for (const [key, value] of Object.entries(mockTestObject)) { + if (isPlainObject(value)) { + for (const [k2, v2] of Object.entries(value)) { + const fullKey = `${key}.${k2}`; + const row = page.locator(`.${target} tr`, { hasText: fullKey }); + await assertCell(row, v2, { framework: target, key: fullKey }); + } + } else { + const row = page.locator(`.${target} tr`, { hasText: key }); + await assertCell(row, value, { framework: target, key }); + } + } + }); + + // Optional: also ensure source reflects its own changes (helps isolate failures) + await test.step(`Validate mutated source ${source}`, async () => { + for (const [key, value] of Object.entries(mockTestObject)) { + if (isPlainObject(value)) { + for (const [k2, v2] of Object.entries(value)) { + const fullKey = `${key}.${k2}`; + const row = page.locator(`.${source} tr`, { hasText: fullKey }); + await assertCell(row, v2, { framework: source, key: fullKey }); + } + } else { + const row = page.locator(`.${source} tr`, { hasText: key }); + await assertCell(row, value, { framework: source, key }); + } + } + }); + }); + } + } +}); diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/utils/flattenObject.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/utils/flattenObject.ts new file mode 100644 index 0000000..1b55bf3 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/utils/flattenObject.ts @@ -0,0 +1,43 @@ +interface FlattenOptions { + /** Maximum depth to traverse (default: 8). */ + maxDepth?: number; + /** Skip keys that start with a dollar sign (deepSignal meta). Default: true */ + skipDollarKeys?: boolean; +} + +const isPlainObject = (v: any) => + Object.prototype.toString.call(v) === "[object Object]"; + +const flattenObject = ( + obj: any, + prefix = "", + options: FlattenOptions = {}, + seen = new Set(), + depth = 0 +): Array<[string, any, string, any]> => { + const { maxDepth = 8, skipDollarKeys = true } = options; + const result: Array<[string, any, string, any]> = []; + if (!obj || typeof obj !== "object") return result; + if (seen.has(obj)) return result; // cycle detected + seen.add(obj); + if (depth > maxDepth) return result; + + for (const [key, value] of Object.entries(obj)) { + if (skipDollarKeys && key.startsWith("$")) continue; + const fullKey = prefix ? `${prefix}.${key}` : key; + if ( + value && + typeof value === "object" && + !Array.isArray(value) && + !(value instanceof Set) && + isPlainObject(value) + ) { + result.push(...flattenObject(value, fullKey, options, seen, depth + 1)); + } else { + result.push([fullKey, value, key, obj]); + } + } + return result; +}; + +export default flattenObject; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/vue/HelloWorld.vue b/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/vue/HelloWorld.vue new file mode 100644 index 0000000..a90d409 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/frontends/vue/HelloWorld.vue @@ -0,0 +1,126 @@ + + + + \ No newline at end of file diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/tests/applyDiff.test.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/tests/applyDiff.test.ts new file mode 100644 index 0000000..b08dab4 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/tests/applyDiff.test.ts @@ -0,0 +1,218 @@ +import { describe, test, expect } from "vitest"; +import { + applyDiff, + applyDiffToDeepSignal, +} from "ng-signals/connector/applyDiff"; +import type { Patch } from "ng-signals/connector/applyDiff"; + +/** + * Build a patch path string from segments (auto-prefix /) + */ +function p(...segs: (string | number)[]) { + return "/" + segs.map(String).join("/"); +} + +describe("applyDiff - set operations (primitives)", () => { + test("add single primitive into new set", () => { + const state: any = {}; + const diff: Patch[] = [ + { op: "add", type: "set", path: p("tags"), value: "a" }, + ]; + applyDiff(state, diff); + expect(state.tags).toBeInstanceOf(Set); + expect([...state.tags]).toEqual(["a"]); + }); + test("add multiple primitives into new set", () => { + const state: any = {}; + const diff: Patch[] = [ + { op: "add", type: "set", path: p("nums"), value: [1, 2, 3] }, + ]; + applyDiff(state, diff); + expect([...state.nums]).toEqual([1, 2, 3]); + }); + test("add primitives merging into existing set", () => { + const state: any = { nums: new Set([1]) }; + const diff: Patch[] = [ + { op: "add", type: "set", path: p("nums"), value: [2, 3] }, + ]; + applyDiff(state, diff); + expect([...state.nums].sort()).toEqual([1, 2, 3]); + }); + test("remove single primitive from set", () => { + const state: any = { tags: new Set(["a", "b"]) }; + const diff: Patch[] = [ + { op: "remove", type: "set", path: p("tags"), value: "a" }, + ]; + applyDiff(state, diff); + expect([...state.tags]).toEqual(["b"]); + }); + test("remove multiple primitives from set", () => { + const state: any = { nums: new Set([1, 2, 3, 4]) }; + const diff: Patch[] = [ + { op: "remove", type: "set", path: p("nums"), value: [2, 4] }, + ]; + applyDiff(state, diff); + expect([...state.nums].sort()).toEqual([1, 3]); + }); +}); + +describe("applyDiff - set operations (object sets)", () => { + test("add object entries to new object-set", () => { + const state: any = {}; + const diff: Patch[] = [ + { + op: "add", + type: "set", + path: p("users"), + value: { u1: { id: "u1", n: 1 }, u2: { id: "u2", n: 2 } }, + }, + ]; + applyDiff(state, diff); + expect(state.users.u1).toEqual({ id: "u1", n: 1 }); + expect(state.users.u2).toEqual({ id: "u2", n: 2 }); + }); + test("merge object entries into existing object-set", () => { + const state: any = { users: { u1: { id: "u1", n: 1 } } }; + const diff: Patch[] = [ + { + op: "add", + type: "set", + path: p("users"), + value: { u2: { id: "u2", n: 2 } }, + }, + ]; + applyDiff(state, diff); + expect(Object.keys(state.users).sort()).toEqual(["u1", "u2"]); + }); + test("remove object entries from object-set", () => { + const state: any = { users: { u1: {}, u2: {}, u3: {} } }; + const diff: Patch[] = [ + { op: "remove", type: "set", path: p("users"), value: ["u1", "u3"] }, + ]; + applyDiff(state, diff); + expect(Object.keys(state.users)).toEqual(["u2"]); + }); + test("adding primitives to existing object-set replaces with Set", () => { + const state: any = { mixed: { a: {}, b: {} } }; + const diff: Patch[] = [ + { op: "add", type: "set", path: p("mixed"), value: [1, 2] }, + ]; + applyDiff(state, diff); + expect(state.mixed).toBeInstanceOf(Set); + expect([...state.mixed]).toEqual([1, 2]); + }); +}); + +describe("applyDiff - object & literal operations", () => { + test("add object (create empty object)", () => { + const state: any = {}; + const diff: Patch[] = [{ op: "add", path: p("address"), type: "object" }]; + applyDiff(state, diff); + expect(state.address).toEqual({}); + }); + test("add nested object path with ensurePathExists", () => { + const state: any = {}; + const diff: Patch[] = [ + { op: "add", path: p("a", "b", "c"), type: "object" }, + ]; + applyDiff(state, diff, true); + expect(state.a.b.c).toEqual({}); + }); + test("add primitive value", () => { + const state: any = { address: {} }; + const diff: Patch[] = [ + { op: "add", path: p("address", "street"), value: "1st" }, + ]; + applyDiff(state, diff); + expect(state.address.street).toBe("1st"); + }); + test("overwrite primitive value", () => { + const state: any = { address: { street: "old" } }; + const diff: Patch[] = [ + { op: "add", path: p("address", "street"), value: "new" }, + ]; + applyDiff(state, diff); + expect(state.address.street).toBe("new"); + }); + test("remove primitive", () => { + const state: any = { address: { street: "1st", country: "Greece" } }; + const diff: Patch[] = [{ op: "remove", path: p("address", "street") }]; + applyDiff(state, diff); + expect(state.address.street).toBeUndefined(); + expect(state.address.country).toBe("Greece"); + }); + test("remove object branch", () => { + const state: any = { address: { street: "1st" }, other: 1 }; + const diff: Patch[] = [{ op: "remove", path: p("address") }]; + applyDiff(state, diff); + expect(state.address).toBeUndefined(); + expect(state.other).toBe(1); + }); +}); + +describe("applyDiff - multiple mixed patches in a single diff", () => { + test("sequence of mixed set/object/literal add & remove", () => { + const state: any = { + users: { u1: { id: "u1" } }, + tags: new Set(["old"]), + }; + const diff: Patch[] = [ + { op: "add", type: "set", path: p("users"), value: { u2: { id: "u2" } } }, + { op: "add", path: p("profile"), type: "object" }, + { op: "add", path: p("profile", "name"), value: "Alice" }, + { op: "add", type: "set", path: p("tags"), value: ["new"] }, + { op: "remove", type: "set", path: p("tags"), value: "old" }, + ]; + applyDiff(state, diff); + expect(Object.keys(state.users).sort()).toEqual(["u1", "u2"]); + expect(state.profile.name).toBe("Alice"); + expect([...state.tags]).toEqual(["new"]); + }); + + test("complex nested path creation and mutations with ensurePathExists", () => { + const state: any = {}; + const diff: Patch[] = [ + { op: "add", path: p("a", "b"), type: "object" }, + { op: "add", path: p("a", "b", "c"), value: 1 }, + { op: "add", type: "set", path: p("a", "nums"), value: [1, 2, 3] }, + { op: "remove", type: "set", path: p("a", "nums"), value: 2 }, + { op: "add", path: p("a", "b", "d"), value: 2 }, + { op: "remove", path: p("a", "b", "c") }, + ]; + applyDiff(state, diff, true); + expect(state.a.b.c).toBeUndefined(); + expect(state.a.b.d).toBe(2); + expect(state.a.nums).toBeInstanceOf(Set); + expect([...state.a.nums].sort()).toEqual([1, 3]); + }); +}); + +describe("applyDiff - ignored / invalid scenarios", () => { + test("skip patch with non-leading slash path", () => { + const state: any = {}; + const diff: Patch[] = [{ op: "add", path: "address/street", value: "x" }]; + applyDiff(state, diff); + expect(state).toEqual({}); + }); + test("missing parent without ensurePathExists -> patch skipped and no mutation", () => { + const state: any = {}; + const diff: Patch[] = [{ op: "add", path: p("a", "b", "c"), value: 1 }]; + applyDiff(state, diff, false); + expect(state).toEqual({}); + }); +}); + +describe("applyDiff - ignored / invalid scenarios", () => { + test("skip patch with non-leading slash path", () => { + const state: any = {}; + const diff: Patch[] = [{ op: "add", path: "address/street", value: "x" }]; + applyDiff(state, diff); + expect(state).toEqual({}); + }); + test("missing parent without ensurePathExists -> patch skipped and no mutation", () => { + const state: any = {}; + const diff: Patch[] = [{ op: "add", path: p("a", "b", "c"), value: 1 }]; + applyDiff(state, diff, false); + expect(state).toEqual({}); + }); +}); diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/tests/updatesWithWasm.test.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/tests/updatesWithWasm.test.ts new file mode 100644 index 0000000..7acd893 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/tests/updatesWithWasm.test.ts @@ -0,0 +1,56 @@ +import { describe, expect, test } from "vitest"; +import { createSignalObjectForShape } from "ng-signals/connector/createSignalObjectForShape.ts"; + +const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +describe("Signal modification and propagation to backend with or without signal pooling", () => { + for (const withPooling of [true, false]) { + test(`shape object notification comes back to others ${ + withPooling ? "with" : "without" + } signal pooling`, async () => { + const object1 = createSignalObjectForShape( + "TestShape", + undefined, + withPooling + ); + const object2 = createSignalObjectForShape( + "TestShape", + undefined, + withPooling + ); + + const object3 = createSignalObjectForShape( + "Shape2", + undefined, + withPooling + ); + const object4 = createSignalObjectForShape( + "Shape2", + undefined, + withPooling + ); + + await wait(10); + + // Update object 1 and expect object 2 to update as well. + // @ts-expect-error + object1.name = "Updated name from object1"; + + await wait(10); + // @ts-expect-error + expect(object2.name).toBe("Updated name from object1"); + + // Expect object of different shape not to have changed. + // @ts-expect-error + expect(object3.name).toBe("Niko's cat"); + + // Update object 4 and expect object 3 with same shape to have updated. + // @ts-expect-error + object4.name = "Updated name from object4"; + + await wait(10); + // @ts-expect-error + expect(object3!.name).toBe("Updated name from object4"); + }); + } +}); diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/shapeHandler.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/shapeHandler.ts new file mode 100644 index 0000000..589804b --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/shapeHandler.ts @@ -0,0 +1,255 @@ +import * as shapeManager from "./shapeManager"; +import type { WasmConnection, Diff, Scope } from "./types"; +import type { CompactShapeType, LdoCompactBase } from "@ldo/ldo"; +import type { Person } from "src/shapes/ldo/personShape.typings"; +import type { Cat } from "src/shapes/ldo/catShape.typings"; +import type { TestObject } from "src/shapes/ldo/testShape.typings"; +import updateShape from "./updateShape"; + +// Messages exchanged over the BroadcastChannel("shape-manager") +interface WasmMessage { + type: + | "Request" + | "InitialResponse" + | "FrontendUpdate" + | "BackendUpdate" + | "Stop"; + connectionId: string; + diff?: Diff; + schema?: CompactShapeType["schema"]; + initialData?: LdoCompactBase; +} + +export const mockTestObject = { + id: "ex:mock-id-1", + type: "TestObject", + stringValue: "string", + numValue: 42, + boolValue: true, + arrayValue: [1, 2, 3], + objectValue: { + id: "urn:obj-1", + nestedString: "nested", + nestedNum: 7, + nestedArray: [10, 12], + }, + anotherObject: { + "id:1": { + id: "id:1", + prop1: "prop1 value", + prop2: 100, + }, + "id:2": { + id: "id:1", + prop1: "prop2 value", + prop2: 200, + }, + }, +} satisfies TestObject; + +const mockShapeObject1 = { + id: "ex:person-1", + type: "Person", + name: "Bob", + address: { + id: "urn:person-home-1", + street: "First street", + houseNumber: "15", + }, + hasChildren: true, + numberOfHouses: 0, +} satisfies Person; + +const mockShapeObject2 = { + id: "ex:cat-1", + type: "Cat", + name: "Niko's cat", + age: 12, + numberOfHomes: 3, + address: { + id: "Nikos-cat-home", + street: "Niko's street", + houseNumber: "15", + floor: 0, + }, +} satisfies Cat; + +// Single BroadcastChannel for wasm-land side +const communicationChannel = new BroadcastChannel("shape-manager"); + +function getInitialObjectByShapeId( + shapeId?: string, +): T { + if (shapeId?.includes("TestObject")) return mockTestObject as unknown as T; + if (shapeId?.includes("Person")) return mockShapeObject1 as unknown as T; + if (shapeId?.includes("Cat")) return mockShapeObject2 as unknown as T; + console.warn( + "BACKEND: requestShape for unknown shape, returning empty object.", + shapeId, + ); + return {} as T; +} + +// Register handler for messages coming from js-land +communicationChannel.addEventListener( + "message", + (event: MessageEvent) => { + console.log("BACKEND: Received message", event.data); + const { type, connectionId, schema } = event.data; + + if (type === "Request") { + const shapeId = schema?.shapes?.[0]?.id; + const initialData = getInitialObjectByShapeId(shapeId); + + // Store connection. We store the shapeId string to allow equality across connections. + shapeManager.connections.set(connectionId, { + id: connectionId, + // Cast to any to satisfy WasmConnection type, comparison in updateShape uses == + shape: (shapeId ?? "__unknown__") as any, + state: initialData, + callback: (diff: Diff, conId: WasmConnection["id"]) => { + // Notify js-land about backend updates + const msg: WasmMessage = { + type: "BackendUpdate", + connectionId: conId, + diff, + }; + communicationChannel.postMessage(msg); + }, + }); + + const msg: WasmMessage = { + type: "InitialResponse", + connectionId, + initialData, + }; + communicationChannel.postMessage(msg); + return; + } + + if (type === "Stop") { + shapeManager.connections.delete(connectionId); + return; + } + + if (type === "FrontendUpdate" && event.data.diff) { + updateShape(connectionId, event.data.diff); + return; + } + + console.warn("BACKEND: Unknown message type or missing diff", event.data); + }, +); + +// Keep the original function for compatibility with any direct callers. +let connectionIdCounter = 1; +export default async function requestShape( + shape: CompactShapeType, + _scope: Scope | undefined, + callback: (diff: Diff, connectionId: WasmConnection["id"]) => void, +): Promise<{ connectionId: string; shapeObject: T }> { + const connectionId = `connection-${connectionIdCounter++}-${shape.schema.shapes?.[0]?.id}`; + const shapeId = shape.schema.shapes?.[0]?.id; + const shapeObject = getInitialObjectByShapeId(shapeId); + + shapeManager.connections.set(connectionId, { + id: connectionId, + shape: (shapeId ?? "__unknown__") as any, + state: shapeObject, + callback, + }); + + return { connectionId, shapeObject }; +} + +const getObjectsForShapeType = ( + shape: CompactShapeType, + scope: string = "", +): T[] => { + // Procedure + // - Get all triples for the scope + // - Parse the schema (all shapes and anonymous shapes required for the shape type). + + // - Group triples by subject + // - For the shapeType in the schema, match all required predicates + // - For predicates pointing to nested objects + // - recurse + + // Repeat procedure for all matched subjects with optional predicates + + const quads: [ + string, + string, + number | string | boolean, + string | undefined, + ][] = []; + + // The URI of the shape to find matches for. + const schemaId = shape.shape; + // ShexJ shape object + const rootShapeDecl = shape.schema.shapes?.find( + (shape) => shape.id === schemaId, + ); + if (!rootShapeDecl) + throw new Error(`Could not find shape id ${schemaId} in shape schema`); + + if (rootShapeDecl.shapeExpr.type !== "Shape") + throw new Error("Expected shapeExpr.type to be Shape"); + + const shapeExpression = rootShapeDecl.shapeExpr.expression; + // If shape is a reference... + if (typeof shapeExpression === "string") { + // TODO: Recurse + return []; + } + + const requiredPredicates = []; + const optionalPredicates = []; + + if (shapeExpression?.type === "EachOf") { + const predicates = shapeExpression.expressions.map((constraint) => { + if (typeof constraint === "string") { + // Cannot parse constraint refs + return; + } else if (constraint.type === "TripleConstraint") { + requiredPredicates.push({ + predicate: constraint.predicate, + }); + } else { + // EachOf or OneOf possible? + } + }); + } else if (shapeExpression?.type === "OneOf") { + // Does not occur AFAIK. + } else if (shapeExpression?.type === "TripleConstraint") { + // Does not occur AFAIK. + } + + return []; +}; + +interface ShapeConstraintTracked { + subject: string; + childOf?: ShapeConstraintTracked; + predicates: [ + { + displayName: string; + uri: string; + type: "number" | "string" | "boolean" | "nested" | "literal"; + literalValue?: number | string | boolean | number[] | string[]; + nested?: ShapeConstraintTracked; + min: number; + max: number; + currentCount: number; + }, + ]; +} + +// Group by subject, check predicates of root level +// For all subjects of root level, +// - recurse + +// Construct matching subjects +// for each optional and non-optional predicate +// - fill objects and record +// - build tracked object (keeping reference counts to check if the object is still valid) diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/shapeManager.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/shapeManager.ts new file mode 100644 index 0000000..5807530 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/shapeManager.ts @@ -0,0 +1,10 @@ +import type { Diff, ObjectState, WasmConnection } from "./types"; + +const connections: Map = new Map(); + +/** Mock function to apply diffs. Just uses a copy of the diff as the new object. */ +export function applyDiff(currentState: ObjectState, diff: Diff): ObjectState { + return JSON.parse(JSON.stringify(diff)); +} + +export { connections }; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/README.md b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/README.md new file mode 100644 index 0000000..ef7439e --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/README.md @@ -0,0 +1,14 @@ +# SPARQL builders + +Utilities to build SPARQL SELECT and CONSTRUCT queries from a ShapeConstraint structure. + +Exports: + +- buildSelectQuery(shape, options) +- buildConstructQuery(shape, options) + +Options: + +- prefixes: Record +- graph: named graph IRI or CURIE +- includeOptionalForMinZero: wrap min=0 predicates in OPTIONAL (default true) diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/buildConstruct.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/buildConstruct.ts new file mode 100644 index 0000000..31b4ed0 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/buildConstruct.ts @@ -0,0 +1,149 @@ +import type { + BuildContext, + PredicateConstraint, + ShapeConstraint, + SparqlBuildOptions, +} from "./common"; +import { + predicateToSparql, + prefixesToText, + toIriOrCurie, + uniqueVar, + valuesBlock, + varToken, +} from "./common"; + +/** + * Build a SPARQL CONSTRUCT query from a ShapeConstraint definition. + * The WHERE mirrors the graph template. Optional predicates (min=0) are wrapped in OPTIONAL in WHERE + * but still appear in the CONSTRUCT template so that matched triples are constructed. + */ +export function buildConstructQuery( + shape: ShapeConstraint, + options?: SparqlBuildOptions, +): string { + const ctx: BuildContext = { usedVars: new Set() }; + const prefixes = prefixesToText(options?.prefixes); + const subject = toIriOrCurie(shape.subject); + + const templateLines: string[] = []; + const whereLines: string[] = []; + const postFilters: string[] = []; + const valuesBlocks: string[] = []; + + const rootVar = + subject.startsWith("?") || subject.startsWith("$") + ? subject + : uniqueVar(ctx, "s"); + if (!subject.startsWith("?") && !subject.startsWith("$")) { + valuesBlocks.push(valuesBlock(rootVar, [subject] as any)); + } + + const predicates = Array.isArray(shape.predicates) + ? shape.predicates + : [...shape.predicates]; + for (const pred of predicates) { + addConstructPattern( + ctx, + pred, + rootVar, + templateLines, + whereLines, + postFilters, + valuesBlocks, + options, + ); + } + + const graphWrap = (body: string) => + options?.graph + ? `GRAPH ${toIriOrCurie(options.graph)} {\n${body}\n}` + : body; + + const where = [ + ...valuesBlocks, + graphWrap(whereLines.join("\n")), + ...postFilters, + ] + .filter(Boolean) + .join("\n"); + + const template = templateLines.join("\n"); + + return [prefixes, `CONSTRUCT {`, template, `} WHERE {`, where, `}`].join( + "\n", + ); +} + +function addConstructPattern( + ctx: BuildContext, + pred: PredicateConstraint, + subjectVar: string, + template: string[], + where: string[], + postFilters: string[], + valuesBlocks: string[], + options?: SparqlBuildOptions, +) { + const p = predicateToSparql(pred.uri); + const objVar = uniqueVar(ctx, pred.displayName || "o"); + const objTerm = + pred.type === "nested" && + pred.nested?.subject && + !pred.nested.subject.match(/^\?|^\$/) + ? toIriOrCurie(pred.nested.subject) + : objVar; + + const triple = `${subjectVar} ${p} ${objTerm} .`; + + const isOptional = + (pred.min ?? 0) === 0 && (options?.includeOptionalForMinZero ?? true); + + if (pred.type === "nested" && pred.nested) { + template.push(triple); + const nestedBody: string[] = [triple]; + const nestedPreds = Array.isArray(pred.nested.predicates) + ? pred.nested.predicates + : [...pred.nested.predicates]; + for (const n of nestedPreds) { + addConstructPattern( + ctx, + n, + objTerm, + template, + nestedBody, + postFilters, + valuesBlocks, + options, + ); + } + const block = nestedBody.join("\n"); + where.push(isOptional ? `OPTIONAL {\n${block}\n}` : block); + return; + } + + // Non-nested + template.push(triple); + const blockLines: string[] = [triple]; + + if (pred.type === "literal" && pred.literalValue !== undefined) { + if (Array.isArray(pred.literalValue)) { + valuesBlocks.push(valuesBlock(objVar, pred.literalValue as any[])); + } else { + const lit = + typeof pred.literalValue === "string" || + typeof pred.literalValue === "number" || + typeof pred.literalValue === "boolean" + ? pred.literalValue + : String(pred.literalValue); + postFilters.push( + `FILTER(${objVar} = ${typeof lit === "string" ? `"${String(lit).replace(/"/g, '\\"')}"` : lit})`, + ); + } + } + + const block = blockLines.join("\n"); + where.push(isOptional ? `OPTIONAL {\n${block}\n}` : block); +} + +export default buildConstructQuery; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/buildSelect.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/buildSelect.ts new file mode 100644 index 0000000..57e6118 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/buildSelect.ts @@ -0,0 +1,152 @@ +import type { + BuildContext, + PredicateConstraint, + ShapeConstraint, + SparqlBuildOptions, +} from "./common"; +import { + predicateToSparql, + prefixesToText, + toIriOrCurie, + uniqueVar, + valuesBlock, + varToken, +} from "./common"; + +/** + * Build a SPARQL SELECT query from a ShapeConstraint definition. + * The query matches the shape subject and constraints; optional predicates (min=0) are wrapped in OPTIONAL. + */ +export function buildSelectQuery( + shape: ShapeConstraint, + options?: SparqlBuildOptions, +): string { + const ctx: BuildContext = { usedVars: new Set() }; + const prefixes = prefixesToText(options?.prefixes); + const subject = toIriOrCurie(shape.subject); + + const selectVars: string[] = []; + const whereLines: string[] = []; + const postFilters: string[] = []; + const valuesBlocks: string[] = []; + + // ensure a consistent root variable when subject is a variable + const rootVar = + subject.startsWith("?") || subject.startsWith("$") + ? subject + : uniqueVar(ctx, "s"); + if (!subject.startsWith("?") && !subject.startsWith("$")) { + // bind fixed subject via VALUES for portability + valuesBlocks.push(valuesBlock(rootVar, [subject] as any)); + } + + const predicates = Array.isArray(shape.predicates) + ? shape.predicates + : [...shape.predicates]; + + for (const pred of predicates) { + addPredicatePattern( + ctx, + pred, + rootVar, + whereLines, + selectVars, + postFilters, + valuesBlocks, + options, + ); + } + + const graphWrap = (body: string) => + options?.graph + ? `GRAPH ${toIriOrCurie(options.graph)} {\n${body}\n}` + : body; + + const where = [ + ...valuesBlocks, + graphWrap(whereLines.join("\n")), + ...postFilters, + ] + .filter(Boolean) + .join("\n"); + + const select = selectVars.length ? selectVars.join(" ") : "*"; + + return [prefixes, `SELECT ${select} WHERE {`, where, `}`].join("\n"); +} + +function addPredicatePattern( + ctx: BuildContext, + pred: PredicateConstraint, + subjectVar: string, + where: string[], + selectVars: string[], + postFilters: string[], + valuesBlocks: string[], + options?: SparqlBuildOptions, +) { + const p = predicateToSparql(pred.uri); + const objVar = uniqueVar(ctx, pred.displayName || "o"); + const objTerm = + pred.type === "nested" && + pred.nested?.subject && + !pred.nested.subject.match(/^\?|^\$/) + ? toIriOrCurie(pred.nested.subject) + : objVar; + + const triple = `${subjectVar} ${p} ${objTerm} .`; + + const isOptional = + (pred.min ?? 0) === 0 && (options?.includeOptionalForMinZero ?? true); + + if (pred.type === "nested" && pred.nested) { + // For nested, we select the nested object var and then recurse + if (objTerm === objVar) selectVars.push(objVar); + const nestedBody: string[] = [triple]; + const nestedPreds = Array.isArray(pred.nested.predicates) + ? pred.nested.predicates + : [...pred.nested.predicates]; + for (const n of nestedPreds) { + addPredicatePattern( + ctx, + n, + objTerm, + nestedBody, + selectVars, + postFilters, + valuesBlocks, + options, + ); + } + const block = nestedBody.join("\n"); + where.push(isOptional ? `OPTIONAL {\n${block}\n}` : block); + return; + } + + // Non-nested: literals or IRIs + selectVars.push(objVar); + const blockLines: string[] = [triple]; + + if (pred.type === "literal" && pred.literalValue !== undefined) { + if (Array.isArray(pred.literalValue)) { + // VALUES block for IN-like matching + valuesBlocks.push(valuesBlock(objVar, pred.literalValue as any[])); + } else { + // simple equality filter + const lit = + typeof pred.literalValue === "string" || + typeof pred.literalValue === "number" || + typeof pred.literalValue === "boolean" + ? pred.literalValue + : String(pred.literalValue); + postFilters.push( + `FILTER(${objVar} = ${typeof lit === "string" ? `"${String(lit).replace(/"/g, '\\"')}"` : lit})`, + ); + } + } + + const block = blockLines.join("\n"); + where.push(isOptional ? `OPTIONAL {\n${block}\n}` : block); +} + +export default buildSelectQuery; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/common.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/common.ts new file mode 100644 index 0000000..aaed2c6 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/sparql/common.ts @@ -0,0 +1,125 @@ +/** + * Shared helpers and types to build SPARQL queries from ShapeConstraint + */ + +export type LiteralKind = + | "number" + | "string" + | "boolean" + | "nested" + | "literal"; + +export interface PredicateConstraint { + displayName: string; + uri: string; + type: LiteralKind; + literalValue?: number | string | boolean | number[] | string[]; + nested?: ShapeConstraint; + min: number; + max: number; + currentCount: number; +} + +export interface ShapeConstraint { + subject: string; + // In upstream code this is typed as a 1-length tuple; we normalize to an array here + predicates: PredicateConstraint[] | [PredicateConstraint]; +} + +export interface SparqlBuildOptions { + prefixes?: Record; + graph?: string; // IRI of the named graph to query, if any + includeOptionalForMinZero?: boolean; // default true +} + +export const defaultPrefixes: Record = { + xsd: "http://www.w3.org/2001/XMLSchema#", + rdf: "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + rdfs: "http://www.w3.org/2000/01/rdf-schema#", +}; + +export function prefixesToText(prefixes?: Record): string { + const all = { ...defaultPrefixes, ...(prefixes ?? {}) }; + return Object.entries(all) + .map(([p, iri]) => `PREFIX ${p}: <${iri}>`) + .join("\n"); +} + +export function toIriOrCurie(term: string): string { + // variable + if (term.startsWith("?") || term.startsWith("$")) return term; + // blank node + if (term.startsWith("_:")) return term; + // full IRI + if (term.includes("://")) return `<${term}>`; + // fallback: assume CURIE or already-angled + if (term.startsWith("<") && term.endsWith(">")) return term; + return term; // CURIE, caller must ensure prefix provided +} + +export function predicateToSparql(uri: string): string { + // Allow CURIEs or IRIs + return toIriOrCurie(uri); +} + +export function safeVarName(name: string): string { + const base = name + .replace(/[^a-zA-Z0-9_]/g, "_") + .replace(/^([0-9])/, "_$1") + .slice(0, 60); + return base || "v"; +} + +export function varToken(name: string): string { + const n = name.startsWith("?") || name.startsWith("$") ? name.slice(1) : name; + return `?${safeVarName(n)}`; +} + +export function formatLiteral(value: string | number | boolean): string { + if (typeof value === "number") return String(value); + if (typeof value === "boolean") return value ? "true" : "false"; + // default string literal + const escaped = value.replace(/"/g, '\\"'); + return `"${escaped}"`; +} + +export function formatTermForValues(value: string | number | boolean): string { + if (typeof value === "number" || typeof value === "boolean") + return formatLiteral(value); + // strings: detect IRI or CURIE and keep raw; otherwise quote + const v = value.trim(); + const looksLikeIri = v.startsWith("<") && v.endsWith(">"); + const looksLikeHttp = v.includes("://"); + const looksLikeCurie = + /^[A-Za-z_][A-Za-z0-9_-]*:.+$/u.test(v) && !looksLikeHttp; + if (looksLikeIri || looksLikeHttp || looksLikeCurie) { + return looksLikeHttp ? `<${v}>` : v; + } + return formatLiteral(v); +} + +export function valuesBlock( + varName: string, + values: Array, +): string { + const rendered = values.map(formatTermForValues).join(" "); + return `VALUES ${varName} { ${rendered} }`; +} + +export interface BuildContext { + // Tracks used variable names to avoid collisions + usedVars: Set; +} + +export function uniqueVar(ctx: BuildContext, base: string): string { + let candidate = varToken(base); + if (!ctx.usedVars.has(candidate)) { + ctx.usedVars.add(candidate); + return candidate; + } + let i = 2; + while (ctx.usedVars.has(`${candidate}_${i}`)) i++; + const unique = `${candidate}_${i}`; + ctx.usedVars.add(unique); + return unique; +} diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/types.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/types.ts new file mode 100644 index 0000000..f48b044 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/types.ts @@ -0,0 +1,19 @@ +import type { CompactShapeType, LdoCompactBase } from "@ldo/ldo"; +import type { Patch } from "ng-signals/connector/applyDiff"; +import type { Shape } from "ng-signals/types"; + +/** The Scope of a shape request */ +export type Scope = string | string[]; + +/** The diff format used to communicate updates between wasm-land and js-land. */ +export type Diff = Patch[]; + +export type ObjectState = object; + +/** A connection established between wasm-land and js-land for subscription of a shape. */ +export type WasmConnection = { + id: string; + shape: CompactShapeType; + state: ObjectState; + callback: (diff: Diff, connectionId: WasmConnection["id"]) => void; +}; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/updateShape.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/updateShape.ts new file mode 100644 index 0000000..4ea1a6f --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/ng-mock/wasm-land/updateShape.ts @@ -0,0 +1,22 @@ +import * as shapeManager from "./shapeManager"; +import type { WasmConnection, Diff } from "./types"; + +export default async function updateShape( + connectionId: WasmConnection["id"], + diff: Diff, +) { + const connection = shapeManager.connections.get(connectionId); + if (!connection) throw new Error("No Connection found."); + + console.log("BACKEND: Received update request from ", connectionId); + + const newState = shapeManager.applyDiff(connection.state, diff); + connection.state = newState; + + shapeManager.connections.forEach((con) => { + // if (con.shape == connection.shape) { + // con.state = newState; + // con.callback(diff, con.id); + // } + }); +} diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/catShape.schema.compact.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/catShape.schema.compact.ts new file mode 100644 index 0000000..a035919 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/catShape.schema.compact.ts @@ -0,0 +1,77 @@ +import type { CompactSchema } from "@ldo/ldo"; + +/** + * ============================================================================= + * catShapeSchema: Compact Schema for catShape + * ============================================================================= + */ +export const catShapeSchema: CompactSchema = { + "http://example.org/Cat": { + iri: "http://example.org/Cat", + predicates: [ + { + type: "literal", + literalValue: ["Cat"], + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + readablePredicate: "type", + }, + { + type: "string", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/name", + readablePredicate: "name", + }, + { + type: "number", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/age", + readablePredicate: "age", + }, + { + type: "number", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/numberOfHomes", + readablePredicate: "numberOfHomes", + }, + { + type: "nested", + nestedSchema: "http://example.org/Cat::http://example.org/address", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/address", + readablePredicate: "address", + }, + ], + }, + "http://example.org/Cat::http://example.org/address": { + iri: "http://example.org/Cat::http://example.org/address", + predicates: [ + { + type: "string", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/street", + readablePredicate: "street", + }, + { + type: "string", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/houseNumber", + readablePredicate: "houseNumber", + }, + { + type: "number", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/floor", + readablePredicate: "floor", + }, + ], + }, +}; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/catShape.shapeTypes.compact.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/catShape.shapeTypes.compact.ts new file mode 100644 index 0000000..6c9d4eb --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/catShape.shapeTypes.compact.ts @@ -0,0 +1,9 @@ +import type { CompactShapeType } from "@ldo/ldo"; +import { catShapeSchema } from "./catShape.schema"; +import type { Cat } from "./catShape.typings"; + +// Compact ShapeTypes for catShape +export const CatShapeType: CompactShapeType = { + schema: catShapeSchema, + shape: "http://example.org/Cat", +}; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/catShape.typings.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/catShape.typings.ts new file mode 100644 index 0000000..d75ed9d --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/catShape.typings.ts @@ -0,0 +1,48 @@ +export type IRI = string; + +/** + * ============================================================================= + * Typescript Typings for catShape + * ============================================================================= + */ + +/** + * Cat Type + */ +export interface Cat { + id: IRI; + /** + * Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type + */ + type: "Cat"; + /** + * Original IRI: http://example.org/name + */ + name: string; + /** + * Original IRI: http://example.org/age + */ + age: number; + /** + * Original IRI: http://example.org/numberOfHomes + */ + numberOfHomes: number; + /** + * Original IRI: http://example.org/address + */ + address: { + id: IRI; + /** + * Original IRI: http://example.org/street + */ + street: string; + /** + * Original IRI: http://example.org/houseNumber + */ + houseNumber: string; + /** + * Original IRI: http://example.org/floor + */ + floor: number; + }; +} diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/personShape.schema.compact.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/personShape.schema.compact.ts new file mode 100644 index 0000000..869e9db --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/personShape.schema.compact.ts @@ -0,0 +1,70 @@ +import type { CompactSchema } from "@ldo/ldo"; + +/** + * ============================================================================= + * personShapeSchema: Compact Schema for personShape + * ============================================================================= + */ +export const personShapeSchema: CompactSchema = { + "http://example.org/Person": { + iri: "http://example.org/Person", + predicates: [ + { + type: "literal", + literalValue: ["Person"], + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + readablePredicate: "type", + }, + { + type: "string", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/name", + readablePredicate: "name", + }, + { + type: "nested", + nestedSchema: "http://example.org/Person::http://example.org/address", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/address", + readablePredicate: "address", + }, + { + type: "boolean", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/hasChildren", + readablePredicate: "hasChildren", + }, + { + type: "number", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/numberOfHouses", + readablePredicate: "numberOfHouses", + }, + ], + }, + "http://example.org/Person::http://example.org/address": { + iri: "http://example.org/Person::http://example.org/address", + predicates: [ + { + type: "string", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/street", + readablePredicate: "street", + }, + { + type: "string", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/houseNumber", + readablePredicate: "houseNumber", + }, + ], + }, +}; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/personShape.shapeTypes.compact.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/personShape.shapeTypes.compact.ts new file mode 100644 index 0000000..c9f06c8 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/personShape.shapeTypes.compact.ts @@ -0,0 +1,9 @@ +import type { CompactShapeType } from "@ldo/ldo"; +import { personShapeSchema } from "./personShape.schema"; +import type { Person } from "./personShape.typings"; + +// Compact ShapeTypes for personShape +export const PersonShapeType: CompactShapeType = { + schema: personShapeSchema, + shape: "http://example.org/Person", +}; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/personShape.typings.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/personShape.typings.ts new file mode 100644 index 0000000..a2d53e2 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/personShape.typings.ts @@ -0,0 +1,44 @@ +export type IRI = string; + +/** + * ============================================================================= + * Typescript Typings for personShape + * ============================================================================= + */ + +/** + * Person Type + */ +export interface Person { + id: IRI; + /** + * Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type + */ + type: "Person"; + /** + * Original IRI: http://example.org/name + */ + name: string; + /** + * Original IRI: http://example.org/address + */ + address: { + id: IRI; + /** + * Original IRI: http://example.org/street + */ + street: string; + /** + * Original IRI: http://example.org/houseNumber + */ + houseNumber: string; + }; + /** + * Original IRI: http://example.org/hasChildren + */ + hasChildren: boolean; + /** + * Original IRI: http://example.org/numberOfHouses + */ + numberOfHouses: number; +} diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/testShape.schema.compact.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/testShape.schema.compact.ts new file mode 100644 index 0000000..af41956 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/testShape.schema.compact.ts @@ -0,0 +1,121 @@ +import type { CompactSchema } from "@ldo/ldo"; + +/** + * ============================================================================= + * testShapeSchema: Compact Schema for testShape + * ============================================================================= + */ +export const testShapeSchema: CompactSchema = { + "http://example.org/TestObject": { + iri: "http://example.org/TestObject", + predicates: [ + { + type: "literal", + literalValue: ["TestObject"], + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + readablePredicate: "type", + extra: true, + }, + { + type: "string", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/stringValue", + readablePredicate: "stringValue", + }, + { + type: "number", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/numValue", + readablePredicate: "numValue", + }, + { + type: "boolean", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/boolValue", + readablePredicate: "boolValue", + }, + { + type: "number", + maxCardinality: -1, + minCardinality: 0, + predicateUri: "http://example.org/arrayValue", + readablePredicate: "arrayValue", + }, + { + type: "nested", + nestedSchema: + "http://example.org/TestObject::http://example.org/objectValue", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/objectValue", + readablePredicate: "objectValue", + }, + { + type: "nested", + nestedSchema: + "http://example.org/TestObject::http://example.org/anotherObject", + maxCardinality: -1, + minCardinality: 0, + predicateUri: "http://example.org/anotherObject", + readablePredicate: "anotherObject", + }, + { + type: "string", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/numOrStr", + readablePredicate: "numOrStr", + }, + ], + }, + "http://example.org/TestObject::http://example.org/objectValue": { + iri: "http://example.org/TestObject::http://example.org/objectValue", + predicates: [ + { + type: "string", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/nestedString", + readablePredicate: "nestedString", + }, + { + type: "number", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/nestedNum", + readablePredicate: "nestedNum", + }, + { + type: "number", + maxCardinality: -1, + minCardinality: 0, + predicateUri: "http://example.org/nestedArray", + readablePredicate: "nestedArray", + }, + ], + }, + "http://example.org/TestObject::http://example.org/anotherObject": { + iri: "http://example.org/TestObject::http://example.org/anotherObject", + predicates: [ + { + type: "string", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/prop1", + readablePredicate: "prop1", + }, + { + type: "number", + maxCardinality: 1, + minCardinality: 1, + predicateUri: "http://example.org/prop2", + readablePredicate: "prop2", + }, + ], + }, +}; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/testShape.shapeTypes.compact.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/testShape.shapeTypes.compact.ts new file mode 100644 index 0000000..8d7d260 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/testShape.shapeTypes.compact.ts @@ -0,0 +1,9 @@ +import type { CompactShapeType } from "@ldo/ldo"; +import { testShapeSchema } from "./testShape.schema"; +import type { TestObject } from "./testShape.typings"; + +// Compact ShapeTypes for testShape +export const TestObjectShapeType: CompactShapeType = { + schema: testShapeSchema, + shape: "http://example.org/TestObject", +}; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/testShape.typings.ts b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/testShape.typings.ts new file mode 100644 index 0000000..b04d85e --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/ldo/testShape.typings.ts @@ -0,0 +1,73 @@ +export type IRI = string; + +/** + * ============================================================================= + * Typescript Typings for testShape + * ============================================================================= + */ + +/** + * TestObject Type + */ +export interface TestObject { + id: IRI; + /** + * Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type + */ + type: "TestObject"; + /** + * Original IRI: http://example.org/stringValue + */ + stringValue: string; + /** + * Original IRI: http://example.org/numValue + */ + numValue: number; + /** + * Original IRI: http://example.org/boolValue + */ + boolValue: boolean; + /** + * Original IRI: http://example.org/arrayValue + */ + arrayValue?: Set; + /** + * Original IRI: http://example.org/objectValue + */ + objectValue: { + id: IRI; + /** + * Original IRI: http://example.org/nestedString + */ + nestedString: string; + /** + * Original IRI: http://example.org/nestedNum + */ + nestedNum: number; + /** + * Original IRI: http://example.org/nestedArray + */ + nestedArray?: Set; + }; + /** + * Original IRI: http://example.org/anotherObject + */ + anotherObject?: Record< + IRI, + { + id: IRI; + /** + * Original IRI: http://example.org/prop1 + */ + prop1: string; + /** + * Original IRI: http://example.org/prop2 + */ + prop2: number; + } + >; + /** + * Original IRI: http://example.org/numOrStr + */ + numOrStr: string; +} diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/shex/catShape.shex b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/shex/catShape.shex new file mode 100644 index 0000000..5751278 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/shex/catShape.shex @@ -0,0 +1,15 @@ +PREFIX ex: +PREFIX xsd: + +ex:Cat { + a ["Cat"] ; + ex:name xsd:string ; + ex:age xsd:integer ; + ex:numberOfHomes xsd:integer ; + ex:address { + ex:street xsd:string ; + ex:houseNumber xsd:string ; + ex:floor xsd:integer + } +} + diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/shex/personShape.shex b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/shex/personShape.shex new file mode 100644 index 0000000..e2859e2 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/shex/personShape.shex @@ -0,0 +1,14 @@ +PREFIX ex: +PREFIX xsd: + +ex:Person { + a ["Person"] ; + ex:name xsd:string ; + ex:address { + ex:street xsd:string ; + ex:houseNumber xsd:string + } ; + ex:hasChildren xsd:boolean ; + ex:numberOfHouses xsd:integer ; +} + diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/shex/testShape.shex b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/shex/testShape.shex new file mode 100644 index 0000000..6e7ede0 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/src/shapes/shex/testShape.shex @@ -0,0 +1,21 @@ +PREFIX ex: +PREFIX xsd: + +ex:TestObject EXTRA a { + a ["TestObject"] ; + ex:stringValue xsd:string ; + ex:numValue xsd:integer ; + ex:boolValue xsd:boolean ; + ex:arrayValue xsd:integer* ; + ex:objectValue { + ex:nestedString xsd:string ; + ex:nestedNum xsd:integer ; + ex:nestedArray xsd:integer* ; + } ; + ex:anotherObject { + ex:prop1 xsd:string; + ex:prop2 xsd:integer ; + } * ; + ex:numOrStr xsd:string; + # TODO: ShapeOr -- | ex:numOrStr xsd:integer +} diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/svelte.config.js b/sdk/ng-sdk-js/examples/multi-framework-signals/svelte.config.js new file mode 100644 index 0000000..cf44f38 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/svelte.config.js @@ -0,0 +1,5 @@ +import { vitePreprocess } from "@astrojs/svelte"; + +export default { + preprocess: vitePreprocess(), +}; diff --git a/sdk/ng-sdk-js/examples/multi-framework-signals/tsconfig.json b/sdk/ng-sdk-js/examples/multi-framework-signals/tsconfig.json new file mode 100644 index 0000000..aa7b157 --- /dev/null +++ b/sdk/ng-sdk-js/examples/multi-framework-signals/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "react", + "baseUrl": "." + }, + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +} diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/.gitignore b/sdk/ng-sdk-js/ng-alien-deepsignals/.gitignore new file mode 100644 index 0000000..f2130d2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.sln +*.sw? + +coverage \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/README.md b/sdk/ng-sdk-js/ng-alien-deepsignals/README.md new file mode 100644 index 0000000..04d87db --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/README.md @@ -0,0 +1,168 @@ +# alien-deepsignals + +Deep structural reactivity for plain objects / arrays / Sets built on top of `alien-signals`. + +Core idea: wrap a data tree in a `Proxy` that lazily creates per-property signals the first time you read them. Accessing a property returns the plain value; accessing `$prop` returns the underlying signal function. Deep mutations emit compact batched patch objects you can observe with `watch()`. + +## Features + +* Lazy: signals & child proxies created only when touched. +* Deep: nested objects, arrays, Sets proxied on demand. + * [ ] TODO: Methods might not be proxied (e.g. array.push)? +* Per-property signals: fine‑grained invalidation without traversal on each change. +* Patch stream: microtask‑batched granular mutations (paths + op) for syncing external stores / framework adapters. +* Getter => computed: property getters become derived (readonly) signals automatically. +* `$` accessors: TypeScript exposes `$prop` for each non‑function key plus `$` / `$length` for arrays. +* Sets: structural `add/delete/clear` emit patches; object entries get synthetic stable ids (prefers `id` / `@id` fields or auto‑generated blank IDs). +* Shallow escape hatch: wrap sub-objects with `shallow(obj)` to track only reference replacement. + +## Install + +```bash +pnpm add alien-deepsignals +# or +npm i alien-deepsignals +``` + +## Quick start + +```ts +import { deepSignal } from 'alien-deepsignals' + +const state = deepSignal({ + count: 0, + user: { name: 'Ada' }, + items: [{ id: 'i1', qty: 1 }], + settings: new Set(['dark']) +}) + +state.count++ // mutate normally +state.user.name = 'Grace' // nested write +state.items.push({ id: 'i2', qty: 2 }) +state.settings.add('beta') + +// Direct signal access +state.$count!.set(5) // update via signal +console.log(state.$count!()) // read via signal function +``` + +## Watching patches + +`watch(root, cb, options?)` observes a deepSignal root and invokes your callback with microtask‑batched mutation patches plus snapshots. + +```ts +import { watch } from 'alien-deepsignals' + +const stop = watch(state, ({ patches, oldValue, newValue }) => { + for (const p of patches) { + console.log(p.op, p.path.join('.'), 'value' in p ? p.value : p.type) + } +}) + +state.user.name = 'Lin' +state.items[0].qty = 3 +await Promise.resolve() // flush microtask +stop() +``` + +### Callback event shape + +```ts +type WatchPatchEvent = { + patches: DeepPatch[] // empty only on immediate + oldValue: T | undefined // deep-cloned snapshot before batch + newValue: T // live proxy (already mutated) + registerCleanup(fn): void // register disposer for next batch/stop + stopListening(): void // unsubscribe +} +``` + +### Options + +| Option | Type | Default | Description | +|--------|------|---------|-------------| +| `immediate` | boolean | false | Fire once right away with `patches: []`. | +| `once` | boolean | false | Auto stop after first callback (immediate counts). | + +`observe()` is an alias of `watch()`. + +## DeepPatch format + +```ts +type DeepPatch = { + root: symbol // stable id per deepSignal root + path: (string | number)[] // root-relative segments +} & ( + | { op: 'add'; type: 'object' } // assigned object/array/Set entry object + | { op: 'add'; value: string | number | boolean } // primitive write + | { op: 'remove' } // deletion + | { op: 'add'; type: 'set'; value: [] } // Set.clear() + | { op: 'add'; type: 'set'; value: (string|number|boolean)[] | { [id: string]: object } } // (reserved) +) +``` + +Notes: +* `type:'object'` omits value to avoid deep cloning; read from `newValue` if needed. +* `Set.add(entry)` emits object vs primitive form depending on entry type; path ends with synthetic id. +* `Set.clear()` emits one structural patch and suppresses per‑entry removals in same batch. + +## Sets & synthetic ids + +Object entries inside Sets need a stable key. Priority: +1. `entry.id` +2. `entry['@id']` +3. Custom via `setSetEntrySyntheticId(entry, 'myId')` before `add` +4. Auto `_bN` blank id + +Helpers: +```ts +import { addWithId, setSetEntrySyntheticId } from 'alien-deepsignals' + +setSetEntrySyntheticId(obj, 'custom') +state.settings.add(obj) +addWithId(state.settings as any, { x:1 }, 'x1') +``` + +## Shallow + +Skip deep proxying of a subtree (only reference replacement tracked): +```ts +import { shallow } from 'alien-deepsignals' +state.config = shallow({ huge: { blob: true } }) +``` + +## TypeScript ergonomics + +`DeepSignal` exposes both plain properties and optional `$prop` signal accessors (excluded for function members). Arrays add `$` (index signal map) and `$length`. + +```ts +const state = deepSignal({ count: 0, user: { name: 'A' } }) +state.count++ // ok +state.$count!.set(9) // write via signal +const n: number = state.$count!() // typed number +``` + +## API surface + +| Function | Description | +|----------|-------------| +| `deepSignal(obj)` | Create (or reuse) reactive deep proxy. | +| `watch(root, cb, opts?)` | Observe batched deep mutations. | +| `observe(root, cb, opts?)` | Alias of `watch`. | +| `peek(obj,key)` | Untracked property read. | +| `shallow(obj)` | Mark object to skip deep proxying. | +| `isDeepSignal(val)` | Runtime predicate. | +| `isShallow(val)` | Was value marked shallow. | +| `setSetEntrySyntheticId(obj,id)` | Assign custom Set entry id. | +| `addWithId(set, entry, id)` | Insert with desired synthetic id. | +| `subscribeDeepMutations(root, cb)` | Low-level patch stream (used by watch). | + +## Credits + +Inspired by [deepsignal](https://github.com/luisherranz/deepsignal) – thanks to @luisherranz. Re-imagined with patch batching & Set support. + +## License + +MIT + + diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/package.json b/sdk/ng-sdk-js/ng-alien-deepsignals/package.json new file mode 100644 index 0000000..f017115 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/package.json @@ -0,0 +1,53 @@ +{ + "name": "@nextgraph-monorepo/ng-alien-deepsignals", + "version": "0.1.0", + "private": false, + "author": "CCherry07", + "license": "MIT", + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist/index.js" + } + }, + "description": "AlienDeepSignals 🧶 -alien signals, but using regular JavaScript objects", + "scripts": { + "test": "vitest --coverage", + "dev": "tsup --watch src", + "build": "tsup", + "release": "bumpp && npm run build && npm publish --registry=https://registry.npmjs.org/" + }, + "dependencies": { + "alien-signals": "^2.0.7" + }, + "devDependencies": { + "@types/node": "^22.10.9", + "@vitest/coverage-v8": "3.0.2", + "bumpp": "^9.9.2", + "tsup": "^8.3.5", + "typescript": "^5.4.3", + "vitest": "^3.0.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CCherry07/alien-deepsignals.git" + }, + "keywords": [ + "signal", + "signals", + "deepsignals", + "alien-signals", + "alien-deepsignals" + ], + "bugs": { + "url": "https://github.com/CCherry07/alien-deepsignals/issues" + }, + "homepage": "https://github.com/CCherry07/alien-deepsignals#readme", + "packageManager": "pnpm@9.14.2+sha512.6e2baf77d06b9362294152c851c4f278ede37ab1eba3a55fda317a4a17b209f4dbb973fb250a77abc463a341fcb1f17f17cfa24091c4eb319cda0d9b84278387" +} diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/pnpm-lock.yaml b/sdk/ng-sdk-js/ng-alien-deepsignals/pnpm-lock.yaml new file mode 100644 index 0000000..c2b1eb8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/pnpm-lock.yaml @@ -0,0 +1,2200 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + alien-signals: + specifier: ^2.0.7 + version: 2.0.7 + devDependencies: + '@types/node': + specifier: ^22.10.9 + version: 22.10.9 + '@vitest/coverage-v8': + specifier: 3.0.2 + version: 3.0.2(vitest@3.0.2(@types/node@22.10.9)) + bumpp: + specifier: ^9.9.2 + version: 9.9.2(magicast@0.3.5) + tsup: + specifier: ^8.3.5 + version: 8.3.5(jiti@2.4.2)(postcss@8.4.49)(typescript@5.7.2) + typescript: + specifier: ^5.4.3 + version: 5.7.2 + vitest: + specifier: ^3.0.2 + version: 3.0.2(@types/node@22.10.9) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.3': + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/rollup-android-arm-eabi@4.29.1': + resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.29.1': + resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.29.1': + resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.29.1': + resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.29.1': + resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.29.1': + resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.29.1': + resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.29.1': + resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.29.1': + resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.29.1': + resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.29.1': + resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': + resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.29.1': + resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.29.1': + resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.29.1': + resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.29.1': + resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.29.1': + resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.29.1': + resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.29.1': + resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} + cpu: [x64] + os: [win32] + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/node@22.10.9': + resolution: {integrity: sha512-Ir6hwgsKyNESl/gLOcEz3krR4CBGgliDqBQ2ma4wIhEx0w+xnoeTq3tdrNw15kU3SxogDjOgv9sqdtLW8mIHaw==} + + '@vitest/coverage-v8@3.0.2': + resolution: {integrity: sha512-U+hZYb0FtgNDb6B3E9piAHzXXIuxuBw2cd6Lvepc9sYYY4KjgiwCBmo3Sird9ZRu3ggLpLBTfw1ZRr77ipiSfw==} + peerDependencies: + '@vitest/browser': 3.0.2 + vitest: 3.0.2 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@3.0.2': + resolution: {integrity: sha512-dKSHLBcoZI+3pmP5hiZ7I5grNru2HRtEW8Z5Zp4IXog8QYcxhlox7JUPyIIFWfN53+3HW3KPLIl6nSzUGgKSuQ==} + + '@vitest/mocker@3.0.2': + resolution: {integrity: sha512-Hr09FoBf0jlwwSyzIF4Xw31OntpO3XtZjkccpcBf8FeVW3tpiyKlkeUzxS/txzHqpUCNIX157NaTySxedyZLvA==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.0.2': + resolution: {integrity: sha512-yBohcBw/T/p0/JRgYD+IYcjCmuHzjC3WLAKsVE4/LwiubzZkE8N49/xIQ/KGQwDRA8PaviF8IRO8JMWMngdVVQ==} + + '@vitest/runner@3.0.2': + resolution: {integrity: sha512-GHEsWoncrGxWuW8s405fVoDfSLk6RF2LCXp6XhevbtDjdDme1WV/eNmUueDfpY1IX3MJaCRelVCEXsT9cArfEg==} + + '@vitest/snapshot@3.0.2': + resolution: {integrity: sha512-h9s67yD4+g+JoYG0zPCo/cLTabpDqzqNdzMawmNPzDStTiwxwkyYM1v5lWE8gmGv3SVJ2DcxA2NpQJZJv9ym3g==} + + '@vitest/spy@3.0.2': + resolution: {integrity: sha512-8mI2iUn+PJFMT44e3ISA1R+K6ALVs47W6eriDTfXe6lFqlflID05MB4+rIFhmDSLBj8iBsZkzBYlgSkinxLzSQ==} + + '@vitest/utils@3.0.2': + resolution: {integrity: sha512-Qu01ZYZlgHvDP02JnMBRpX43nRaZtNpIzw3C1clDXmn8eakgX6iQVGzTQ/NjkIr64WD8ioqOjkaYRVvHQI5qiw==} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + alien-signals@2.0.7: + resolution: {integrity: sha512-wE7y3jmYeb0+h6mr5BOovuqhFv22O/MV9j5p0ndJsa7z1zJNPGQ4ph5pQk/kTTCWRC3xsA4SmtwmkzQO+7NCNg==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + bumpp@9.9.2: + resolution: {integrity: sha512-ggRxRV1rWHEyWXnf55UqYzGvttS/Vpkl1zxcNdE5xoYMTHlSgRA0Td4nKn3ckCcMuC+MTgaGQrbKBeyr0V9+Hg==} + engines: {node: '>=10'} + hasBin: true + + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + + c12@2.0.1: + resolution: {integrity: sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + consola@3.3.3: + resolution: {integrity: sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==} + engines: {node: ^14.18.0 || >=16.10.0} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} + + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + giget@1.2.3: + resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} + hasBin: true + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.3: + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nypm@0.3.12: + resolution: {integrity: sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + ohash@1.1.4: + resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.2: + resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-types@1.3.0: + resolution: {integrity: sha512-kS7yWjVFCkIw9hqdJBoMxDdzEngmkr5FXeWZZfQ6GoYacjVnsW6l2CcYW/0ThD0vF4LPJgVYnrg4d0uuhwYQbg==} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + rollup@4.29.1: + resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tsup@8.3.5: + resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + vite-node@3.0.2: + resolution: {integrity: sha512-hsEQerBAHvVAbv40m3TFQe/lTEbOp7yDpyqMJqr2Tnd+W58+DEYOt+fluQgekOePcsNBmR77lpVAnIU2Xu4SvQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@3.0.2: + resolution: {integrity: sha512-5bzaHakQ0hmVVKLhfh/jXf6oETDBtgPo8tQCHYB+wftNgFJ+Hah67IsWc8ivx4vFL025Ow8UiuTf4W57z4izvQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.2 + '@vitest/ui': 3.0.2 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/parser@7.28.3': + dependencies: + '@babel/types': 7.28.2 + + '@babel/types@7.28.2': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@bcoe/v8-coverage@1.0.2': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.24.2': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.24.2': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.24.2': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.24.2': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.24.2': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.24.2': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.24.2': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.24.2': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.24.2': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.24.2': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.24.2': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.24.2': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.24.2': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.24.2': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.24.2': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.24.2': + optional: true + + '@esbuild/openbsd-arm64@0.24.2': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.24.2': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.24.2': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.24.2': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.24.2': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.24.2': + optional: true + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/rollup-android-arm-eabi@4.29.1': + optional: true + + '@rollup/rollup-android-arm64@4.29.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.29.1': + optional: true + + '@rollup/rollup-darwin-x64@4.29.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.29.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.29.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.29.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.29.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.29.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.29.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.29.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.29.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.29.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.29.1': + optional: true + + '@types/estree@1.0.6': {} + + '@types/node@22.10.9': + dependencies: + undici-types: 6.20.0 + + '@vitest/coverage-v8@3.0.2(vitest@3.0.2(@types/node@22.10.9))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + magic-string: 0.30.17 + magicast: 0.3.5 + std-env: 3.8.0 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.2(@types/node@22.10.9) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@3.0.2': + dependencies: + '@vitest/spy': 3.0.2 + '@vitest/utils': 3.0.2 + chai: 5.1.2 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.0.2(vite@5.4.11(@types/node@22.10.9))': + dependencies: + '@vitest/spy': 3.0.2 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 5.4.11(@types/node@22.10.9) + + '@vitest/pretty-format@3.0.2': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.0.2': + dependencies: + '@vitest/utils': 3.0.2 + pathe: 2.0.2 + + '@vitest/snapshot@3.0.2': + dependencies: + '@vitest/pretty-format': 3.0.2 + magic-string: 0.30.17 + pathe: 2.0.2 + + '@vitest/spy@3.0.2': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@3.0.2': + dependencies: + '@vitest/pretty-format': 3.0.2 + loupe: 3.1.2 + tinyrainbow: 2.0.0 + + acorn@8.14.0: {} + + alien-signals@2.0.7: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + argparse@2.0.1: {} + + assertion-error@2.0.1: {} + + balanced-match@1.0.2: {} + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + bumpp@9.9.2(magicast@0.3.5): + dependencies: + c12: 2.0.1(magicast@0.3.5) + cac: 6.7.14 + escalade: 3.2.0 + js-yaml: 4.1.0 + jsonc-parser: 3.3.1 + prompts: 2.4.2 + semver: 7.6.3 + tinyexec: 0.3.2 + tinyglobby: 0.2.10 + transitivePeerDependencies: + - magicast + + bundle-require@5.1.0(esbuild@0.24.2): + dependencies: + esbuild: 0.24.2 + load-tsconfig: 0.2.5 + + c12@2.0.1(magicast@0.3.5): + dependencies: + chokidar: 4.0.3 + confbox: 0.1.8 + defu: 6.1.4 + dotenv: 16.4.7 + giget: 1.2.3 + jiti: 2.4.2 + mlly: 1.7.3 + ohash: 1.1.4 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.3.0 + rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 + + cac@6.7.14: {} + + chai@5.1.2: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 + pathval: 2.0.0 + + check-error@2.1.1: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.0.2 + + chownr@2.0.0: {} + + citty@0.1.6: + dependencies: + consola: 3.3.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@4.1.1: {} + + confbox@0.1.8: {} + + consola@3.3.3: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + deep-eql@5.0.2: {} + + defu@6.1.4: {} + + destr@2.0.3: {} + + dotenv@16.4.7: {} + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + es-module-lexer@1.6.0: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + + escalade@3.2.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + expect-type@1.1.0: {} + + fdir@6.4.2(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fsevents@2.3.3: + optional: true + + get-stream@8.0.1: {} + + giget@1.2.3: + dependencies: + citty: 0.1.6 + consola: 3.3.3 + defu: 6.1.4 + node-fetch-native: 1.6.4 + nypm: 0.3.12 + ohash: 1.1.4 + pathe: 1.1.2 + tar: 6.2.1 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + has-flag@4.0.0: {} + + html-escaper@2.0.2: {} + + human-signals@5.0.0: {} + + is-fullwidth-code-point@3.0.0: {} + + is-stream@3.0.0: {} + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@2.4.2: {} + + joycon@3.1.1: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsonc-parser@3.3.1: {} + + kleur@3.0.3: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + load-tsconfig@0.2.5: {} + + lodash.sortby@4.7.0: {} + + loupe@3.1.2: {} + + lru-cache@10.4.3: {} + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magicast@0.3.5: + dependencies: + '@babel/parser': 7.28.3 + '@babel/types': 7.28.2 + source-map-js: 1.2.1 + + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + + merge-stream@2.0.0: {} + + mimic-fn@4.0.0: {} + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp@1.0.4: {} + + mlly@1.7.3: + dependencies: + acorn: 8.14.0 + pathe: 1.1.2 + pkg-types: 1.3.0 + ufo: 1.5.4 + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.8: {} + + node-fetch-native@1.6.4: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nypm@0.3.12: + dependencies: + citty: 0.1.6 + consola: 3.3.3 + execa: 8.0.1 + pathe: 1.1.2 + pkg-types: 1.3.0 + ufo: 1.5.4 + + object-assign@4.1.1: {} + + ohash@1.1.4: {} + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + package-json-from-dist@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + pathe@1.1.2: {} + + pathe@2.0.2: {} + + pathval@2.0.0: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.2: {} + + pirates@4.0.6: {} + + pkg-types@1.3.0: + dependencies: + confbox: 0.1.8 + mlly: 1.7.3 + pathe: 1.1.2 + + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.49): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.4.2 + postcss: 8.4.49 + + postcss@8.4.49: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + punycode@2.3.1: {} + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.3 + + readdirp@4.0.2: {} + + resolve-from@5.0.0: {} + + rollup@4.29.1: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.29.1 + '@rollup/rollup-android-arm64': 4.29.1 + '@rollup/rollup-darwin-arm64': 4.29.1 + '@rollup/rollup-darwin-x64': 4.29.1 + '@rollup/rollup-freebsd-arm64': 4.29.1 + '@rollup/rollup-freebsd-x64': 4.29.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 + '@rollup/rollup-linux-arm-musleabihf': 4.29.1 + '@rollup/rollup-linux-arm64-gnu': 4.29.1 + '@rollup/rollup-linux-arm64-musl': 4.29.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 + '@rollup/rollup-linux-riscv64-gnu': 4.29.1 + '@rollup/rollup-linux-s390x-gnu': 4.29.1 + '@rollup/rollup-linux-x64-gnu': 4.29.1 + '@rollup/rollup-linux-x64-musl': 4.29.1 + '@rollup/rollup-win32-arm64-msvc': 4.29.1 + '@rollup/rollup-win32-ia32-msvc': 4.29.1 + '@rollup/rollup-win32-x64-msvc': 4.29.1 + fsevents: 2.3.3 + + semver@7.6.3: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + siginfo@2.0.0: {} + + signal-exit@4.1.0: {} + + sisteransi@1.0.5: {} + + source-map-js@1.2.1: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + stackback@0.0.2: {} + + std-env@3.8.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@3.0.0: {} + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.10: + dependencies: + fdir: 6.4.2(picomatch@4.0.2) + picomatch: 4.0.2 + + tinypool@1.0.2: {} + + tinyrainbow@2.0.0: {} + + tinyspy@3.0.2: {} + + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + tree-kill@1.2.2: {} + + ts-interface-checker@0.1.13: {} + + tsup@8.3.5(jiti@2.4.2)(postcss@8.4.49)(typescript@5.7.2): + dependencies: + bundle-require: 5.1.0(esbuild@0.24.2) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.3.3 + debug: 4.4.0 + esbuild: 0.24.2 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.4.49) + resolve-from: 5.0.0 + rollup: 4.29.1 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.10 + tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.4.49 + typescript: 5.7.2 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + + typescript@5.7.2: {} + + ufo@1.5.4: {} + + undici-types@6.20.0: {} + + vite-node@3.0.2(@types/node@22.10.9): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.2 + vite: 5.4.11(@types/node@22.10.9) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.11(@types/node@22.10.9): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.49 + rollup: 4.29.1 + optionalDependencies: + '@types/node': 22.10.9 + fsevents: 2.3.3 + + vitest@3.0.2(@types/node@22.10.9): + dependencies: + '@vitest/expect': 3.0.2 + '@vitest/mocker': 3.0.2(vite@5.4.11(@types/node@22.10.9)) + '@vitest/pretty-format': 3.0.2 + '@vitest/runner': 3.0.2 + '@vitest/snapshot': 3.0.2 + '@vitest/spy': 3.0.2 + '@vitest/utils': 3.0.2 + chai: 5.1.2 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.2 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 5.4.11(@types/node@22.10.9) + vite-node: 3.0.2(@types/node@22.10.9) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.10.9 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + webidl-conversions@4.0.2: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + yallist@4.0.0: {} diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/contents.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/contents.ts new file mode 100644 index 0000000..424396a --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/contents.ts @@ -0,0 +1,5 @@ +export enum ReactiveFlags { + IS_SIGNAL = '__v_isSignal', + SKIP = "__v_skip", + IS_SHALLOW = "__v_isShallow", +} diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/core.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/core.ts new file mode 100644 index 0000000..00eb35d --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/core.ts @@ -0,0 +1,163 @@ +/** Lightweight façade adding ergonomic helpers (.value/.peek/.get/.set) to native alien-signals function signals. */ +// Native re-exports for advanced usage. +export { + signal as _rawSignal, + computed as _rawComputed, + effect, + startBatch, + endBatch, + getCurrentSub, + setCurrentSub, +} from "alien-signals"; + +import { + signal as alienSignal, + computed as alienComputed, + effect as alienEffect, + startBatch as alienStartBatch, + endBatch as alienEndBatch, +} from "alien-signals"; +import { ReactiveFlags as ReactiveFlags_ } from "./contents"; +import { isFunction } from "./utils"; + +// Nominal constructor removal: we no longer expose classes; signals are plain tagged functions. + +/** Internal shape of a tagged writable signal after adding ergonomic helpers. */ +type TaggedSignal = ReturnType> & { + /** Tracking read / write via property syntax */ + value: T; + /** Non-tracking read */ + peek(): T; + /** Alias for tracking read */ + get(): T; + /** Write helper */ + set(v: T): void; +}; + +/** + * Decorate a native signal function with legacy helpers & identity. + */ +function tagSignal(fn: any): TaggedSignal { + Object.defineProperty(fn, ReactiveFlags_.IS_SIGNAL, { value: true }); + Object.defineProperty(fn, "value", { + get: () => fn(), + set: (v) => fn(v), + }); + // Add peek to mirror old API (non-tracking read) + if (!fn.peek) Object.defineProperty(fn, "peek", { value: () => fn() }); + if (!fn.get) Object.defineProperty(fn, "get", { value: () => fn() }); + if (!fn.set) Object.defineProperty(fn, "set", { value: (v: any) => fn(v) }); + return fn; +} + +/** + * Decorate a native computed function similarly (readonly value accessor). + */ +function tagComputed(fn: any) { + Object.defineProperty(fn, ReactiveFlags_.IS_SIGNAL, { value: true }); + Object.defineProperty(fn, "value", { get: () => fn() }); + if (!fn.peek) Object.defineProperty(fn, "peek", { value: () => fn() }); + if (!fn.get) Object.defineProperty(fn, "get", { value: () => fn() }); + return fn; +} + +/** + * Create a new writable function-form signal enhanced with `.value`, `.peek()`, `.get()`, `.set()`. + * + * @example + * const count = signal(0); + * count(); // 0 (track) + * count(1); // write + * count.value; // 1 (track) + * count.peek(); // 1 (non-tracking) + */ +export const signal = (v?: T) => tagSignal(alienSignal(v)); +/** + * Create a lazy computed (readonly) signal derived from other signals. + * The returned function is tagged with `.value` and `.peek()` for convenience. + */ +export const computed = (getter: () => T) => + tagComputed(alienComputed(getter)); + +/** Union allowing a plain value or a writable signal wrapping that value. */ +export type MaybeSignal = T | ReturnType; +/** Union allowing value, writable signal, computed signal or plain getter function. */ +export type MaybeSignalOrGetter = + | MaybeSignal + | ReturnType + | (() => T); +/** Runtime guard that an unknown value is one of our tagged signals/computeds. */ +export const isSignal = (s: any): boolean => + typeof s === "function" && !!s && !!s[ReactiveFlags_.IS_SIGNAL]; + +/** + * Minimal Effect wrapper for legacy watch implementation. + * Provides: active, dirty, scheduler hook, run() & stop(). + */ +/** + * Minimal Effect wrapper mimicking the legacy interface used by the watch implementation. + * + * Each instance wraps a native alien `effect`, setting `dirty=true` on invalidation and invoking + * the provided scheduler callback. Consumers may manually `run()` the getter (marks clean) or `stop()` + * to dispose the underlying reactive subscription. + */ +export class Effect { + public active = true; + public dirty = true; + public scheduler: (immediateFirstRun?: boolean) => void = () => {}; + private _runner: any; + constructor(private _getter: () => any) { + const self = this; + this._runner = alienEffect(function wrapped() { + self.dirty = true; + self._getter(); + self.scheduler(); + }); + } + run() { + this.dirty = false; + return this._getter(); + } + stop() { + if (this.active) { + this._runner(); + this.active = false; + } + } +} +/** Resolve a plain value, a signal/computed or a getter function to its current value. */ +// Lightweight direct resolver (inlined former toValue/unSignal logic) +/** + * Resolve a possibly reactive input to its current value. + * Accepts: plain value, writable signal, computed signal, or getter function. + * Signals & getters are invoked once; plain values are returned directly. + */ +export function toValue(src: MaybeSignalOrGetter): T { + return isFunction(src) + ? (src as any)() + : isSignal(src) + ? (src as any)() + : (src as any); +} + +/** + * Execute multiple signal writes in a single batched update frame. + * All downstream computed/effect re-evaluations are deferred until the function exits. + * + * IMPORTANT: The callback MUST be synchronous. If it returns a Promise the batch will + * still end immediately after scheduling, possibly causing mid-async flushes. + * + * @example + * batch(() => { + * count(count() + 1); + * other(other() + 2); + * }); // effects observing both run only once + */ +export function batch(fn: () => T): T { + alienStartBatch(); + try { + return fn(); + } finally { + alienEndBatch(); + } +} diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/deepSignal.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/deepSignal.ts new file mode 100644 index 0000000..0d90548 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/deepSignal.ts @@ -0,0 +1,833 @@ +import { ReactiveFlags } from "./contents"; +import { computed, signal, isSignal } from "./core"; +/** + * deepSignal: wrap an object / array / Set graph in lazy per-property signals plus an optional deep patch stream. + * - `$prop` returns a signal; plain prop returns its current value. + * - Getter props become computed signals. + * - Arrays expose `$` (index signals) & `$length`; Sets emit structural entry patches with synthetic ids. + * - subscribeDeepMutations(root, cb) batches set/delete ops per microtask (DeepPatch[]). + * - shallow(obj) skips deep proxying of a subtree. + */ + +/** A batched deep mutation (set/add/remove) from a deepSignal root. */ +export type DeepPatch = { + /** Unique identifier for the deep signal root which produced this patch. */ + root: symbol; + /** Property path (array indices, object keys, synthetic Set entry ids) from the root to the mutated location. */ + path: (string | number)[]; +} & ( + | DeepSetAddPatch + | DeepSetRemovePatch + | DeepObjectAddPatch + | DeepRemovePatch + | DeepLiteralAddPatch +); +export interface DeepSetAddPatch { + /** Mutation kind applied at the resolved `path`. */ + op: "add"; + type: "set"; + /** New value for `set` mutations (omitted for `delete`). */ + value: (number | string | boolean)[] | { [id: string]: object }; +} +export interface DeepSetRemovePatch { + /** Mutation kind applied at the resolved `path`. */ + op: "remove"; + type: "set"; + /** The value to be removed from the set. Either a literal or the key (id) of an object. */ + value: string | number | boolean; +} +export interface DeepObjectAddPatch { + /** Mutation kind applied at the resolved `path`. */ + op: "add"; + type: "object"; +} + +export interface DeepRemovePatch { + /** Mutation kind applied at the resolved `path`. */ + op: "remove"; +} +export interface DeepLiteralAddPatch { + /** Mutation kind applied at the resolved `path` */ + op: "add"; + /** The literal value to be added at the resolved `path` */ + value: string | number | boolean; +} + +/** Callback signature for subscribeDeepMutations. */ +export type DeepPatchSubscriber = (patches: DeepPatch[]) => void; + +/** Minimal per-proxy metadata for path reconstruction. */ +interface ProxyMeta { + /** Parent proxy in the object graph (undefined for root). */ + parent?: object; + /** Key within the parent pointing to this proxy (undefined for root). */ + key?: string | number; + /** Stable root id symbol shared by the entire deepSignal tree. */ + root: symbol; +} + +// Proxy -> metadata +const proxyMeta = new WeakMap(); +// Root symbol -> subscribers +const mutationSubscribers = new Map>(); +// Pending patches grouped per root (flushed once per microtask) +let pendingPatches: Map | null = null; +let microtaskScheduled = false; + +/** Sentinel symbol; get concrete root id via getDeepSignalRootId(proxy). */ +export const DEEP_SIGNAL_ROOT_ID = Symbol("alienDeepSignalRootId"); + +function buildPath( + startProxy: object, + leafKey: string | number +): (string | number)[] { + const path: (string | number)[] = [leafKey]; + let cur: object | undefined = startProxy; + while (cur) { + const meta = proxyMeta.get(cur); + if (!meta) break; // Defensive: metadata should always exist. + if (meta.key === undefined) break; // Reached root (no key recorded). + path.unshift(meta.key); + cur = meta.parent; + } + return path; +} + +function queuePatch(patch: DeepPatch) { + if (!pendingPatches) pendingPatches = new Map(); + const root = patch.root; + let list = pendingPatches.get(root); + if (!list) { + list = []; + pendingPatches.set(root, list); + } + list.push(patch); + if (!microtaskScheduled) { + microtaskScheduled = true; + queueMicrotask(() => { + microtaskScheduled = false; + const groups = pendingPatches; + pendingPatches = null; + if (!groups) return; + for (const [rootId, patches] of groups) { + if (!patches.length) continue; + const subs = mutationSubscribers.get(rootId); + if (subs) subs.forEach((cb) => cb(patches)); + } + }); + } +} + +/** Subscribe to microtask-batched deep patches for a root (returns unsubscribe). */ +export function subscribeDeepMutations( + root: object | symbol, + sub: DeepPatchSubscriber +): () => void { + const rootId = typeof root === "symbol" ? root : getDeepSignalRootId(root); + if (!rootId) + throw new Error( + "subscribeDeepMutations() expects a deepSignal root proxy or root id symbol" + ); + let set = mutationSubscribers.get(rootId); + if (!set) { + set = new Set(); + mutationSubscribers.set(rootId, set); + } + set.add(sub); + return () => { + const bucket = mutationSubscribers.get(rootId); + if (!bucket) return; + bucket.delete(sub); + if (bucket.size === 0) mutationSubscribers.delete(rootId); + }; +} + +/** Return the stable root symbol for any deepSignal proxy (undefined if not one). */ +export function getDeepSignalRootId(obj: any): symbol | undefined { + return proxyMeta.get(obj)?.root; +} + +// Proxy -> Map of property name -> signal function +/** Proxy -> Map (lazy). */ +const proxyToSignals = new WeakMap(); +// Raw object/array/Set -> stable proxy +const objToProxy = new WeakMap(); +// Raw array -> `$` meta proxy with index signals +const arrayToArrayOfSignals = new WeakMap(); +// Objects already proxied or marked shallow +const ignore = new WeakSet(); +// Object -> signal counter for enumeration invalidation +const objToIterable = new WeakMap(); +const rg = /^\$/; +const descriptor = Object.getOwnPropertyDescriptor; +let peeking = false; + +// Deep array interface refining callback parameter types. +type DeepArray = Array & { + map: ( + callbackfn: ( + value: DeepSignal, + index: number, + array: DeepSignalArray + ) => U, + thisArg?: any + ) => U[]; + forEach: ( + callbackfn: ( + value: DeepSignal, + index: number, + array: DeepSignalArray + ) => void, + thisArg?: any + ) => void; + concat(...items: ConcatArray[]): DeepSignalArray; + concat(...items: (T | ConcatArray)[]): DeepSignalArray; + reverse(): DeepSignalArray; + shift(): DeepSignal | undefined; + slice(start?: number, end?: number): DeepSignalArray; + splice(start: number, deleteCount?: number): DeepSignalArray; + splice( + start: number, + deleteCount: number, + ...items: T[] + ): DeepSignalArray; + filter( + predicate: ( + value: DeepSignal, + index: number, + array: DeepSignalArray + ) => value is DeepSignal, + thisArg?: any + ): DeepSignalArray; + filter( + predicate: ( + value: DeepSignal, + index: number, + array: DeepSignalArray + ) => unknown, + thisArg?: any + ): DeepSignalArray; + reduce( + callbackfn: ( + previousValue: DeepSignal, + currentValue: DeepSignal, + currentIndex: number, + array: DeepSignalArray + ) => T + ): DeepSignal; + reduce( + callbackfn: ( + previousValue: DeepSignal, + currentValue: DeepSignal, + currentIndex: number, + array: DeepSignalArray + ) => DeepSignal, + initialValue: T + ): DeepSignal; + reduce( + callbackfn: ( + previousValue: U, + currentValue: DeepSignal, + currentIndex: number, + array: DeepSignalArray + ) => U, + initialValue: U + ): U; + reduceRight( + callbackfn: ( + previousValue: DeepSignal, + currentValue: DeepSignal, + currentIndex: number, + array: DeepSignalArray + ) => T + ): DeepSignal; + reduceRight( + callbackfn: ( + previousValue: DeepSignal, + currentValue: DeepSignal, + currentIndex: number, + array: DeepSignalArray + ) => DeepSignal, + initialValue: T + ): DeepSignal; + reduceRight( + callbackfn: ( + previousValue: U, + currentValue: DeepSignal, + currentIndex: number, + array: DeepSignalArray + ) => U, + initialValue: U + ): U; +}; +// Synthetic ids for Set entry objects (stable key for patches) +let __blankNodeCounter = 0; +const setObjectIds = new WeakMap(); +const assignBlankNodeId = (obj: any) => { + if (setObjectIds.has(obj)) return setObjectIds.get(obj)!; + const id = `_b${++__blankNodeCounter}`; + setObjectIds.set(obj, id); + return id; +}; +/** Assign (or override) synthetic id before Set.add(). */ +export function setSetEntrySyntheticId(obj: object, id: string | number) { + setObjectIds.set(obj, String(id)); +} +const getSetEntryKey = (val: any): string | number => { + if (val && typeof val === "object") { + if (setObjectIds.has(val)) return setObjectIds.get(val)!; + if ( + typeof (val as any).id === "string" || + typeof (val as any).id === "number" + ) + return (val as any).id; + if ( + typeof (val as any)["@id"] === "string" || + typeof (val as any)["@id"] === "number" + ) + return (val as any)["@id"]; + return assignBlankNodeId(val); + } + return val as any; +}; +/** Add entry with synthetic id; returns proxied object if applicable. */ +export function addWithId( + set: Set, + entry: T, + id: string | number +): DeepSignal; +export function addWithId(set: Set, entry: T, id: string | number): T; +export function addWithId(set: Set, entry: any, id: string | number) { + if (entry && typeof entry === "object") setSetEntrySyntheticId(entry, id); + (set as any).add(entry); + if (entry && typeof entry === "object" && objToProxy.has(entry)) + return objToProxy.get(entry); + return entry; +} + +/** Is value a deepSignal-managed proxy? */ +export const isDeepSignal = (source: any) => { + return proxyToSignals.has(source); +}; + +/** Was value explicitly marked shallow? */ +export const isShallow = (source: any) => { + return ignore.has(source); +}; + +/** Create (or reuse) a deep reactive proxy for an object / array / Set. */ +export const deepSignal = (obj: T): DeepSignal => { + if (!shouldProxy(obj)) throw new Error("This object can't be observed."); + if (!objToProxy.has(obj)) { + // Create a unique root id symbol to identify this deep signal tree in patches. + const rootId = Symbol("deepSignalRoot"); + const proxy = createProxy(obj, objectHandlers, rootId) as DeepSignal; + const meta = proxyMeta.get(proxy)!; + meta.parent = undefined; // root has no parent + meta.key = undefined; // root not addressed by a key + meta.root = rootId; // ensure root id stored (explicit) + // Pre-register an empty signals map so isDeepSignal() is true before any property access. + if (!proxyToSignals.has(proxy)) proxyToSignals.set(proxy, new Map()); + objToProxy.set(obj, proxy); + } + return objToProxy.get(obj); +}; + +/** Read property without tracking (untracked read). */ +export const peek = < + T extends DeepSignalObject, + K extends keyof RevertDeepSignalObject +>( + obj: T, + key: K +): RevertDeepSignal[K]> => { + peeking = true; + const value = obj[key]; + try { + peeking = false; + } catch (e) {} + return value as RevertDeepSignal[K]>; +}; + +const shallowFlag = Symbol(ReactiveFlags.IS_SHALLOW); +/** Mark object to skip deep proxying (only reference changes tracked). */ +export function shallow(obj: T): Shallow { + ignore.add(obj); + return obj as Shallow; +} + +const createProxy = ( + target: object, + handlers: ProxyHandler, + rootId?: symbol +) => { + const proxy = new Proxy(target, handlers); + ignore.add(proxy); + // Initialize proxy metadata if not present. Root proxies provide a stable root id. + if (!proxyMeta.has(proxy)) { + proxyMeta.set(proxy, { root: rootId || Symbol("deepSignalDetachedRoot") }); + } + return proxy; +}; + +// Set-specific access & structural patch emission. +function getFromSet( + raw: Set, + key: string | symbol, + receiver: object +): any { + const meta = proxyMeta.get(receiver); + // Helper to proxy a single entry (object) & assign synthetic id if needed. + const ensureEntryProxy = (entry: any) => { + if ( + entry && + typeof entry === "object" && + shouldProxy(entry) && + !objToProxy.has(entry) + ) { + const synthetic = getSetEntryKey(entry); + const childProxy = createProxy(entry, objectHandlers, meta!.root); + const childMeta = proxyMeta.get(childProxy)!; + childMeta.parent = receiver; + childMeta.key = synthetic; + objToProxy.set(entry, childProxy); + return childProxy; + } + if (objToProxy.has(entry)) return objToProxy.get(entry); + return entry; + }; + // Pre-pass to ensure any existing non-proxied object entries are proxied (enables deep patches after iteration) + if (meta) raw.forEach(ensureEntryProxy); + if (key === "add" || key === "delete" || key === "clear") { + const fn: Function = (raw as any)[key]; + return function (this: any, ...args: any[]) { + const sizeBefore = raw.size; + const result = fn.apply(raw, args); + if (raw.size !== sizeBefore) { + const metaNow = proxyMeta.get(receiver); + if ( + metaNow && + metaNow.parent !== undefined && + metaNow.key !== undefined + ) { + const containerPath = buildPath(metaNow.parent, metaNow.key); + if (key === "add") { + const entry = args[0]; + let synthetic = getSetEntryKey(entry); + if (entry && typeof entry === "object") { + for (const existing of raw.values()) { + if (existing === entry) continue; + if (getSetEntryKey(existing) === synthetic) { + synthetic = assignBlankNodeId(entry); + break; + } + } + } + let entryVal = entry; + if ( + entryVal && + typeof entryVal === "object" && + shouldProxy(entryVal) && + !objToProxy.has(entryVal) + ) { + const childProxy = createProxy( + entryVal, + objectHandlers, + metaNow.root + ); + const childMeta = proxyMeta.get(childProxy)!; + childMeta.parent = receiver; + childMeta.key = synthetic; + objToProxy.set(entryVal, childProxy); + entryVal = childProxy; + } + // Set entry add: emit object vs literal variant. + if (entryVal && typeof entryVal === "object") { + queuePatch({ + root: metaNow.root, + path: [...containerPath, synthetic], + op: "add", + type: "object", + }); + } else { + queuePatch({ + root: metaNow.root, + path: [...containerPath, synthetic], + op: "add", + value: entryVal, + }); + } + } else if (key === "delete") { + const entry = args[0]; + const synthetic = getSetEntryKey(entry); + queuePatch({ + root: metaNow.root, + path: [...containerPath, synthetic], + op: "remove", + }); + } else if (key === "clear") { + // Structural clear: remove prior entry-level patches for this Set this tick. + if (pendingPatches) { + const group = pendingPatches.get(metaNow.root); + if (group && group.length) { + for (let i = group.length - 1; i >= 0; i--) { + const p = group[i]; + if ( + p.path.length === containerPath.length + 1 && + containerPath.every((seg, idx) => p.path[idx] === seg) + ) { + group.splice(i, 1); + } + } + } + } + queuePatch({ + root: metaNow.root, + path: containerPath, + op: "add", + type: "set", + value: [], + }); + } + } + } + return result; + }; + } + const makeIterator = (pair: boolean) => { + return function thisIter(this: any) { + const iterable = raw.values(); + return { + [Symbol.iterator]() { + return { + next() { + const n = iterable.next(); + if (n.done) return n; + const entry = ensureEntryProxy(n.value); + return { value: pair ? [entry, entry] : entry, done: false }; + }, + }; + }, + } as Iterable; + }; + }; + if (key === "values" || key === "keys") return makeIterator(false); + if (key === "entries") return makeIterator(true); + if (key === "forEach") { + return function thisForEach(this: any, cb: any, thisArg?: any) { + raw.forEach((entry: any) => { + cb.call(thisArg, ensureEntryProxy(entry), ensureEntryProxy(entry), raw); + }); + }; + } + // Properly handle native iteration (for..of, Array.from, spread) by binding to the raw Set. + if (key === Symbol.iterator) { + // Return a function whose `this` is the raw Set (avoids brand check failure on the proxy). + return function (this: any) { + // Use raw.values() so we can still ensure child entries are proxied lazily. + const iterable = raw.values(); + return { + [Symbol.iterator]() { + return this; + }, + next() { + const n = iterable.next(); + if (n.done) return n; + const entry = ensureEntryProxy(n.value); + return { value: entry, done: false }; + }, + } as Iterator; + }; + } + if (key === Symbol.iterator.toString()) { + // string form access of iterator symbol; pass through (rare path) + } + const val = (raw as any)[key]; + if (typeof val === "function") return val.bind(raw); + return val; +} + +const throwOnMutation = () => { + throw new Error( + "Don't mutate the signals directly (use the underlying property/value instead)." + ); +}; + +// Does target define a getter for key? +function hasGetter(target: any, key: any) { + return typeof descriptor(target, key)?.get === "function"; +} + +// Lazily allocate / fetch signal map for a proxy receiver. +function getSignals(receiver: object) { + if (!proxyToSignals.has(receiver)) proxyToSignals.set(receiver, new Map()); + return proxyToSignals.get(receiver)!; +} + +// Wrap & link child object/array/Set if needed. +function ensureChildProxy(value: any, parent: object, key: string | number) { + if (!shouldProxy(value)) return value; + if (!objToProxy.has(value)) { + const parentMeta = proxyMeta.get(parent)!; + const childProxy = createProxy(value, objectHandlers, parentMeta.root); + const childMeta = proxyMeta.get(childProxy)!; + childMeta.parent = parent; + childMeta.key = key as string; + objToProxy.set(value, childProxy); + } + return objToProxy.get(value); +} + +// Normalize raw property key (handles $-prefix & array meta) -> { key, returnSignal } +function normalizeKey( + target: any, + fullKey: string, + isArrayMeta: boolean, + receiver: object +) { + let returnSignal = isArrayMeta || fullKey[0] === "$"; + if (!isArrayMeta && Array.isArray(target) && returnSignal) { + if (fullKey === "$") { + // Provide $ meta proxy for array index signals + if (!arrayToArrayOfSignals.has(target)) { + arrayToArrayOfSignals.set( + target, + createProxy(target, arrayHandlers, proxyMeta.get(receiver)?.root) + ); + } + return { shortCircuit: arrayToArrayOfSignals.get(target) }; + } + returnSignal = fullKey === "$length"; + } + const key = returnSignal ? fullKey.replace(rg, "") : fullKey; + return { key, returnSignal } as any; +} + +// Create computed signal for getter property if needed. +function ensureComputed( + signals: Map, + target: any, + key: any, + receiver: any +) { + if (!signals.has(key) && hasGetter(target, key)) { + signals.set( + key, + computed(() => Reflect.get(target, key, receiver)) + ); + } +} + +// Unified get trap factory (object / array meta variant) +const get = + (isArrayMeta: boolean) => + (target: object, fullKey: string, receiver: object): unknown => { + if (peeking) return Reflect.get(target, fullKey, receiver); + // Set handling delegated completely. + if (target instanceof Set) { + return getFromSet(target as Set, fullKey as any, receiver); + } + const norm = normalizeKey(target, fullKey, isArrayMeta, receiver); + if ((norm as any).shortCircuit) return (norm as any).shortCircuit; // returned meta proxy + const { key, returnSignal } = norm as { + key: string; + returnSignal: boolean; + }; + // Symbol fast-path + if (typeof key === "symbol" && wellKnownSymbols.has(key)) + return Reflect.get(target, key, receiver); + const signals = getSignals(receiver); + ensureComputed(signals, target, key, receiver); + if (!signals.has(key)) { + let value = Reflect.get(target, key, receiver); + if (returnSignal && typeof value === "function") return; // user asked for signal wrapper of function => ignore + value = ensureChildProxy(value, receiver, key); + signals.set(key, signal(value)); + } + const sig = signals.get(key); + return returnSignal ? sig : sig(); + }; + +// Standard object / array handlers +const objectHandlers = { + get: get(false), + set(target: object, fullKey: string, val: any, receiver: object): boolean { + // Respect original getter/setter semantics + if (typeof descriptor(target, fullKey)?.set === "function") + return Reflect.set(target, fullKey, val, receiver); + if (!proxyToSignals.has(receiver)) proxyToSignals.set(receiver, new Map()); + const signals = proxyToSignals.get(receiver); + if (fullKey[0] === "$") { + if (!isSignal(val)) throwOnMutation(); + const key = fullKey.replace(rg, ""); + signals.set(key, val); + return Reflect.set(target, key, val.peek(), receiver); + } else { + let internal = val; + if (shouldProxy(val)) { + if (!objToProxy.has(val)) { + // Link newly wrapped child to its parent for path reconstruction. + // In some edge cases parent metadata might not yet be initialized (e.g., + // if a proxied structure was reconstructed in a way that bypassed the + // original deepSignal root path). Fall back to creating/assigning it. + let parentMeta = proxyMeta.get(receiver); + if (!parentMeta) { + // Assign a root id (new symbol) so downstream patches remain groupable. + const created: ProxyMeta = { + root: Symbol("deepSignalRootAuto"), + } as ProxyMeta; + proxyMeta.set(receiver, created); + parentMeta = created; + } + const childProxy = createProxy(val, objectHandlers, parentMeta!.root); + const childMeta = proxyMeta.get(childProxy)!; + childMeta.parent = receiver; + childMeta.key = fullKey; + objToProxy.set(val, childProxy); + } + internal = objToProxy.get(val); + } + const isNew = !(fullKey in target); + const result = Reflect.set(target, fullKey, val, receiver); + + if (!signals.has(fullKey)) { + // First write after structure change -> create signal. + signals.set(fullKey, signal(internal)); + } else { + // Subsequent writes -> update underlying signal. + signals.get(fullKey).set(internal); + } + if (isNew && objToIterable.has(target)) objToIterable.get(target).value++; + if (Array.isArray(target) && signals.has("length")) + signals.get("length").set(target.length); + // Emit patch (after mutation) so subscribers get final value snapshot. + const meta = proxyMeta.get(receiver); + if (meta) { + // Object/Array/Set assignment at property path. + if (val && typeof val === "object") { + queuePatch({ + root: meta.root, + path: buildPath(receiver, fullKey), + op: "add", + type: "object", + }); + } else { + queuePatch({ + root: meta.root, + path: buildPath(receiver, fullKey), + op: "add", + value: val, + }); + } + } + return result; + } + }, + deleteProperty(target: object, key: string): boolean { + if (key[0] === "$") throwOnMutation(); + const signals = proxyToSignals.get(objToProxy.get(target)); + const result = Reflect.deleteProperty(target, key); + if (signals && signals.has(key)) signals.get(key).value = undefined; + objToIterable.has(target) && objToIterable.get(target).value++; + // Emit deletion patch + const receiverProxy = objToProxy.get(target); + const meta = receiverProxy && proxyMeta.get(receiverProxy); + if (meta) { + queuePatch({ + root: meta.root, + path: buildPath(receiverProxy, key), + op: "remove", + }); + } + return result; + }, + ownKeys(target: object): (string | symbol)[] { + if (!objToIterable.has(target)) objToIterable.set(target, signal(0)); + (objToIterable as any)._ = objToIterable.get(target).get(); + return Reflect.ownKeys(target); + }, +}; + +// Array `$` meta proxy handlers (index signals only) +const arrayHandlers = { + get: get(true), + set: throwOnMutation, + deleteProperty: throwOnMutation, +}; + +const wellKnownSymbols = new Set( + Object.getOwnPropertyNames(Symbol) + .map((key) => Symbol[key as WellKnownSymbols]) + .filter((value) => typeof value === "symbol") +); +// Supported constructors (Map intentionally excluded for now) +const supported = new Set([Object, Array, Set]); +const shouldProxy = (val: any): boolean => { + if (typeof val !== "object" || val === null) return false; + return supported.has(val.constructor) && !ignore.has(val); +}; + +/** TYPES **/ // Structural deep reactive view of an input type. +export type DeepSignal = T extends Function + ? T + : T extends { [shallowFlag]: true } + ? T + : T extends Array + ? DeepSignalArray + : T extends object + ? DeepSignalObject + : T; + +/** Recursive mapped type converting an object graph into its deepSignal proxy shape. */ +export type DeepSignalObject = { + [P in keyof T & string as `$${P}`]?: T[P] extends Function + ? never + : ReturnType>; +} & { + [P in keyof T]: DeepSignal; +}; + +/** Extract element type from an array. */ +type ArrayType = T extends Array ? I : T; +/** DeepSignal-enhanced array type (numeric indices & `$` meta accessors). */ +type DeepSignalArray = DeepArray> & { + [key: number]: DeepSignal>; + $?: { [key: number]: ReturnType>> }; + $length?: ReturnType>; +}; + +/** Marker utility type for objects passed through without deep proxying. */ +export type Shallow = T & { [shallowFlag]: true }; + +/** Framework adapter hook returning a DeepSignal proxy. */ +export declare const useDeepSignal: (obj: T) => DeepSignal; +// @ts-ignore +// Strip `$`-prefixed synthetic signal accessors from key union. +type FilterSignals = K extends `$${string}` ? never : K; +/** Reverse of DeepSignalObject: remove signal accessors to obtain original object shape. */ +type RevertDeepSignalObject = Pick>; +/** Reverse of DeepSignalArray: omit meta accessors. */ +type RevertDeepSignalArray = Omit; + +/** Inverse mapped type removing deepSignal wrapper affordances. */ +export type RevertDeepSignal = T extends Array + ? RevertDeepSignalArray + : T extends object + ? RevertDeepSignalObject + : T; + +/** Subset of ECMAScript well-known symbols we explicitly pass through without proxy wrapping. */ +type WellKnownSymbols = + | "asyncIterator" + | "hasInstance" + | "isConcatSpreadable" + | "iterator" + | "match" + | "matchAll" + | "replace" + | "search" + | "species" + | "split" + | "toPrimitive" + | "toStringTag" + | "unscopables"; diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/index.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/index.ts new file mode 100644 index 0000000..9aaea6f --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/index.ts @@ -0,0 +1,17 @@ +export * from "./core"; +export * from "./deepSignal"; +export * from "./watch"; +export * from "./watchEffect"; +export { + isArray, + isDate, + isFunction, + isMap, + isObject, + isPlainObject, + isPromise, + isRegExp, + isSet, + isString, + isSymbol, +} from "./utils"; diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/core.test.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/core.test.ts new file mode 100644 index 0000000..7896df0 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/core.test.ts @@ -0,0 +1,81 @@ +import { describe, it, expect } from "vitest"; +import { signal, computed, isSignal, Effect, toValue } from "../core"; +import { deepSignal } from "../deepSignal"; + +describe("core.ts coverage", () => { + it("signal tagging helpers (.value/.peek/.get/.set)", () => { + const s: any = signal(1); + expect(isSignal(s)).toBe(true); + expect(s.value).toBe(1); + expect(s.peek()).toBe(1); + expect(s.get()).toBe(1); + s.set(2); + expect(s.value).toBe(2); + s.value = 3; + expect(s.peek()).toBe(3); + }); + + it("computed tagging helpers (.value/.peek/.get)", () => { + const s: any = signal(2); + const c: any = computed(() => s.value * 2); + expect(isSignal(c)).toBe(true); + expect(c.value).toBe(4); + expect(c.peek()).toBe(4); + expect(c.get()).toBe(4); + s.value = 3; + expect(c.value).toBe(6); + }); + + it("toValue resolves function, signal and plain value", () => { + const s: any = signal(5); + const fn = () => 10; + expect(toValue(fn)).toBe(10); + expect(toValue(s)).toBe(5); + expect(toValue(42)).toBe(42); + }); + + it("Effect wrapper run/stop behavior", () => { + let runs = 0; + const eff = new Effect(() => { + runs++; + }); + // Constructing Effect registers alienEffect and schedules first run immediately when dependency accessed (none here), run() executes getter + eff.run(); + // Construction may trigger an initial scheduler pass; ensure at least 1 + expect(runs).toBeGreaterThanOrEqual(1); + // Add scheduler side effect and dependency in second effect + const dep = signal(0); + const eff2 = new Effect(() => { + dep(); + runs++; + }); + const base = runs; + dep.set(1); // triggers wrapped effect, increments runs again + expect(runs).toBeGreaterThan(base); + eff2.stop(); + const prev = runs; + dep.set(2); // no further increment after stop + expect(runs).toBe(prev); + // stopping already stopped effect has no effect + eff2.stop(); + expect(runs).toBe(prev); + }); +}); + +describe("deepSignal.ts extra branches", () => { + it("access well-known symbol property returns raw value and not a signal", () => { + const tag = Symbol.toStringTag; + const ds = deepSignal({ [tag]: "Custom", x: 1 }) as any; + const val = ds[tag]; + expect(val).toBe("Custom"); + }); + + it("access Set Symbol.iterator.toString() key path (skip branch)", () => { + const ds = deepSignal({ set: new Set([1]) }) as any; + const iterKey = Symbol.iterator.toString(); // 'Symbol(Symbol.iterator)' + // Accessing this string property triggers skip branch (no special handling needed) + const maybe = ds.set[iterKey]; + // underlying Set likely has undefined for that string key + expect(maybe).toBeUndefined(); + }); +}); diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/index.test.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/index.test.ts new file mode 100644 index 0000000..d2080d3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/index.test.ts @@ -0,0 +1,1119 @@ +import { deepSignal, peek, RevertDeepSignal, shallow } from "../index"; +import { describe, it, expect, beforeEach } from "vitest"; +import { signal, effect, isSignal } from ".."; +type Store = { + a?: number; + nested: { b?: number }; + array: (number | Store["nested"])[]; +}; + +describe("deepsignal/core", () => { + let nested = { b: 2 }; + let array = [3, nested]; + let state: Store = { a: 1, nested, array }; + let store = deepSignal(state); + + const window = globalThis as any; + + beforeEach(() => { + nested = { b: 2 }; + array = [3, nested]; + state = { a: 1, nested, array }; + store = deepSignal(state); + }); + + describe("get - plain", () => { + it("should return plain objects/arrays", () => { + expect(store.nested).to.deep.equal({ b: 2 }); + expect(store.array).to.deep.equal([3, { b: 2 }]); + expect(store.array[1]).to.deep.equal({ b: 2 }); + }); + + it("should return plain primitives", () => { + expect(store.a).to.equal(1); + expect(store.nested.b).to.equal(2); + expect(store.array[0]).to.equal(3); + expect(typeof store.array[1] === "object" && store.array[1].b).to.equal( + 2 + ); + expect(store.array.length).to.equal(2); + }); + + it("should support reading from getters", () => { + const store = deepSignal({ + counter: 1, + get double() { + return store.counter * 2; + }, + }); + expect(store.double).to.equal(2); + store.counter = 2; + expect(store.double).to.equal(4); + }); + + it("should support getters returning other parts of the state", () => { + const store = deepSignal({ + switch: "a", + a: { data: "a" }, + b: { data: "b" }, + get aOrB() { + return store.switch === "a" ? store.a : store.b; + }, + }); + expect(store.aOrB.data).to.equal("a"); + store.switch = "b"; + expect(store.aOrB.data).to.equal("b"); + }); + + it("should support getters using ownKeys traps", () => { + const state = deepSignal({ + x: { + a: 1, + b: 2, + }, + get y() { + return Object.values(state.x); + }, + }); + + expect(state.y).to.deep.equal([1, 2]); + }); + + it("should work with normal functions", () => { + const store = deepSignal({ + value: 1, + isBigger: (newValue: number): boolean => store.value < newValue, + sum(newValue: number): number { + return store.value + newValue; + }, + replace: (newValue: number): void => { + store.value = newValue; + }, + }); + expect(store.isBigger(2)).to.equal(true); + expect(store.sum(2)).to.equal(3); + expect(store.value).to.equal(1); + store.replace(2); + expect(store.value).to.equal(2); + }); + }); + + describe("get - signals ($)", () => { + it("should return signal instance when using store.$prop", () => { + expect(isSignal(store.$a)).to.equal(true); + expect(store.$a!.value).to.equal(1); + expect(isSignal(store.$nested)).to.equal(true); + expect(store.$nested!.value.b).to.equal(2); + expect(isSignal(store.nested.$b)).to.equal(true); + expect(store.nested.$b!.value).to.equal(2); + }); + + it("should return signal instance when accessing array.$[index] in arrays", () => { + expect(isSignal(store.$array)).to.equal(true); + expect(store.$array!.value[0]).to.equal(3); + expect(isSignal(store.array.$![0])).to.equal(true); + expect(store.array.$![0].value).to.equal(3); + expect(isSignal(store.array.$![1])).to.equal(true); + expect( + typeof store.array.$![1].value === "object" && store.array.$![1].value.b + ).to.equal(2); + expect( + isSignal(typeof store.array[1] === "object" && store.array[1].$b) + ).to.equal(true); + expect( + typeof store.array[1] === "object" && store.array[1].$b!.value + ).to.equal(2); + }); + + it("should return length signal in arrays using array.$length", () => { + expect(isSignal(store.array.$length)).to.equal(true); + expect(store.array.$length!.value).to.equal(2); + }); + + it("should not return signals in arrays using array.$index", () => { + expect((store.array as any).$0).to.be.undefined; + }); + + it("should not return signals of functions using store.$function", () => { + const store = deepSignal({ func: () => {} }); + expect(store.$func).to.be.undefined; + }); + + it("should support reading signals from getters", () => { + const store = deepSignal({ + counter: 1, + get double() { + return store.counter * 2; + }, + }); + expect(store.$double!.value).to.equal(2); + store.counter = 2; + expect(store.$double!.value).to.equal(4); + }); + + it("should support reading signals from getters returning other parts of the state", () => { + const store = deepSignal({ + switch: "a", + a: { data: "a" }, + b: { data: "b" }, + get aOrB() { + return store.switch === "a" ? store.a : store.b; + }, + }); + expect(store.aOrB.$data!.value).to.equal("a"); + store.switch = "b"; + expect(store.aOrB.$data!.value).to.equal("b"); + }); + + it("should return signals from array iterators", () => { + const store = deepSignal([{ a: 1 }, { a: 2 }]); + const signals = store.map((item: any) => item.$a!.value); + expect(signals).to.deep.equal([1, 2]); + }); + + it("should return signals from array iterators", () => { + const store = deepSignal([{ a: 1 }, { a: 2 }]); + const signals = store.map((item: any) => item.$a!.value); + expect(signals).to.deep.equal([1, 2]); + }); + }); + + describe("set", () => { + it("should update like plain objects/arrays", () => { + expect(store.a).to.equal(1); + expect(store.nested.b).to.equal(2); + store.a = 2; + store.nested.b = 3; + expect(store.a).to.equal(2); + expect(store.nested.b).to.equal(3); + }); + + // TODO: Remove the .value access semantics. + it("should support setting values with setters", () => { + const store = deepSignal({ + counter: 1, + get double() { + return store.counter * 2; + }, + set double(val) { + store.counter = val / 2; + }, + }); + expect(store.counter).to.equal(1); + store.double = 4; + expect(store.counter).to.equal(2); + }); + + it("should update array length", () => { + expect(store.array.length).to.equal(2); + store.array.push(4); + expect(store.array.length).to.equal(3); + store.array.splice(1, 2); + expect(store.array.length).to.equal(1); + }); + + it("should update array $length", () => { + expect(store.array.$length!.value).to.equal(2); + store.array.push(4); + expect(store.array.$length!.value).to.equal(3); + store.array.splice(1, 2); + expect(store.array.$length!.value).to.equal(1); + }); + + it("should update when mutations happen", () => { + expect(store.a).to.equal(1); + store.a = 11; + expect(store.a).to.equal(11); + }); + + it("should support setting getters on the fly", () => { + const store = deepSignal<{ counter: number; double?: number }>({ + counter: 1, + }); + Object.defineProperty(store, "double", { + get: function () { + return store.counter * 2; + }, + }); + expect(store.double).to.equal(2); + store.counter = 2; + expect(store.double).to.equal(4); + }); + + it("should throw when mutating the $ properties", () => { + expect(() => ((store.nested as any).$b = 2)).to.throw(); + expect(() => ((store.array as any).$length = 2)).to.throw(); + }); + + it("should throw when trying to mutate the signals array", () => { + expect(() => ((store.array.$ as any)[0] = 2)).to.throw(); + }); + + it("should allow signal assignments", () => { + const store = deepSignal<{ a?: number }>({}); + const a = signal(1); + + store.$a = a; + + expect(store.a).to.equal(1); + expect(store.$a).to.equal(a); + + store.a = 2; + + expect(a.value).to.equal(2); + expect(store.a).to.equal(2); + expect(store.$a).to.equal(a); + }); + + it("should not create wrong artifacts when assigning signals", () => { + const store = deepSignal<{ a?: number }>({}); + const a = signal(1); + + store.$a = a; + + expect(peek(store as any, "$a")).to.equal(undefined); + expect(peek(store, "a")).to.equal(1); + }); + + it("should copy object like plain JavaScript", () => { + const store = deepSignal<{ + a?: { id: number; nested: { id: number } }; + b: { id: number; nested: { id: number } }; + }>({ + b: { id: 1, nested: { id: 1 } }, + }); + + store.a = store.b; + + expect(store.a.id).to.equal(1); + expect(store.b.id).to.equal(1); + expect(store.a.nested.id).to.equal(1); + expect(store.b.nested.id).to.equal(1); + + store.a.id = 2; + store.a.nested.id = 2; + expect(store.a.id).to.equal(2); + expect(store.b.id).to.equal(2); + expect(store.a.nested.id).to.equal(2); + expect(store.b.nested.id).to.equal(2); + + store.b.id = 3; + store.b.nested.id = 3; + expect(store.b.id).to.equal(3); + expect(store.a.id).to.equal(3); + expect(store.a.nested.id).to.equal(3); + expect(store.b.nested.id).to.equal(3); + + store.a.id = 4; + store.a.nested.id = 4; + expect(store.a.id).to.equal(4); + expect(store.b.id).to.equal(4); + expect(store.a.nested.id).to.equal(4); + expect(store.b.nested.id).to.equal(4); + }); + + it("should be able to reset values with Object.assign", () => { + const initialNested = { ...nested }; + const initialState = { ...state, nested: initialNested }; + store.a = 2; + store.nested.b = 3; + Object.assign(store, initialState); + expect(store.a).to.equal(1); + expect(store.nested.b).to.equal(2); + }); + }); + + describe("delete", () => { + it("should delete properties before they are accessed", () => { + delete store.a; + expect(store.a).to.equal(undefined); + }); + + it("should delete properties after they are accessed", () => { + expect(store.a).to.equal(1); + delete store.a; + expect(store.a).to.equal(undefined); + }); + + it("should delete nested properties before they are accessed", () => { + delete store.nested.b; + expect(store.nested.b).to.equal(undefined); + }); + + it("should delete nested properties after they are accessed", () => { + expect(store.nested.b).to.equal(2); + delete store.nested.b; + expect(store.nested.b).to.equal(undefined); + }); + + it("should delete properties in arrays before they are accessed", () => { + delete store.array[0]; + expect(store.array[0]).to.equal(undefined); + }); + + it("should delete properties in arrays after they are accessed", () => { + expect(store.array[0]).to.equal(3); + delete store.array[0]; + expect(store.array[0]).to.equal(undefined); + }); + + it("should throw when trying to delete a signal", () => { + expect(() => delete store.$a).to.throw(); + }); + + it("should throw when trying to delete the array signals", () => { + expect(() => delete store.array.$![1]).to.throw(); + }); + }); + + describe("ownKeys", () => { + it("should return own properties in objects", () => { + const state: Record = { a: 1, b: 2 }; + const store = deepSignal(state); + let sum = 0; + + for (const property in store) { + sum += store[property]; + } + + expect(sum).to.equal(3); + }); + + it("should return own properties in arrays", () => { + const state: number[] = [1, 2]; + const store = deepSignal(state); + let sum = 0; + + for (const property of store) { + sum += property; + } + + expect(sum).to.equal(3); + }); + + it("should spread objects correctly", () => { + const store2 = { ...store }; + expect(store2.a).to.equal(1); + expect(store2.nested.b).to.equal(2); + expect(store2.array[0]).to.equal(3); + expect(typeof store2.array[1] === "object" && store2.array[1].b).to.equal( + 2 + ); + }); + + it("should spread arrays correctly", () => { + const array2 = [...store.array]; + expect(array2[0]).to.equal(3); + expect(typeof array2[1] === "object" && array2[1].b).to.equal(2); + }); + }); + + describe("computations", () => { + it("should subscribe to values mutated with setters", () => { + const store = deepSignal({ + counter: 1, + get double() { + return store.counter * 2; + }, + set double(val) { + store.counter = val / 2; + }, + }); + let counter = 0; + let double = 0; + + effect(() => { + counter = store.counter; + double = store.double; + }); + + expect(counter).to.equal(1); + expect(double).to.equal(2); + store.double = 4; + expect(counter).to.equal(2); + expect(double).to.equal(4); + }); + + it("should subscribe to changes when an item is removed from the array", () => { + const store = deepSignal([0, 0, 0]); + let sum = 0; + + effect(() => { + sum = 0; + sum = store.reduce((sum) => sum + 1, 0); + }); + + expect(sum).to.equal(3); + store.splice(2, 1); + expect(sum).to.equal(2); + }); + + it("should subscribe to changes to for..in loops", () => { + const state: Record = { a: 0, b: 0 }; + const store = deepSignal(state); + let sum = 0; + + effect(() => { + sum = 0; + for (const _ in store) { + sum += 1; + } + }); + + expect(sum).to.equal(2); + + store.c = 0; + expect(sum).to.equal(3); + + delete store.c; + expect(sum).to.equal(2); + + store.c = 0; + expect(sum).to.equal(3); + }); + + it("should subscribe to changes for Object.getOwnPropertyNames()", () => { + const state: Record = { a: 1, b: 2 }; + const store = deepSignal(state); + let sum = 0; + + effect(() => { + sum = 0; + const keys = Object.getOwnPropertyNames(store); + for (const _ of keys) { + sum += 1; + } + }); + + expect(sum).to.equal(2); + + store.c = 0; + expect(sum).to.equal(3); + + delete store.a; + expect(sum).to.equal(2); + }); + + it("should subscribe to changes to Object.keys/values/entries()", () => { + const state: Record = { a: 1, b: 2 }; + const store = deepSignal(state); + let keys = 0; + let values = 0; + let entries = 0; + + effect(() => { + keys = 0; + Object.keys(store).forEach(() => (keys += 1)); + }); + + effect(() => { + values = 0; + Object.values(store as RevertDeepSignal).forEach( + () => (values += 1) + ); + }); + + effect(() => { + entries = 0; + Object.entries(store as RevertDeepSignal).forEach( + () => (entries += 1) + ); + }); + + expect(keys).to.equal(2); + expect(values).to.equal(2); + expect(entries).to.equal(2); + + store.c = 0; + expect(keys).to.equal(3); + expect(values).to.equal(3); + expect(entries).to.equal(3); + + delete store.a; + expect(keys).to.equal(2); + expect(values).to.equal(2); + expect(entries).to.equal(2); + }); + + it("should subscribe to changes to for..of loops", () => { + const store = deepSignal([0, 0]); + let sum = 0; + + effect(() => { + sum = 0; + for (const _ of store) { + sum += 1; + } + }); + + expect(sum).to.equal(2); + + store.push(0); + expect(sum).to.equal(3); + + store.splice(0, 1); + expect(sum).to.equal(2); + }); + + it("should subscribe to implicit changes in length", () => { + const store = deepSignal(["foo", "bar"]); + let x = ""; + + effect(() => { + x = store.join(" "); + }); + + expect(x).to.equal("foo bar"); + + store.push("baz"); + expect(x).to.equal("foo bar baz"); + + store.splice(0, 1); + expect(x).to.equal("bar baz"); + }); + + it("should subscribe to changes when deleting properties", () => { + let x, y; + + effect(() => { + x = store.a; + }); + + effect(() => { + y = store.nested.b; + }); + + expect(x).to.equal(1); + delete store.a; + expect(x).to.equal(undefined); + + expect(y).to.equal(2); + delete store.nested.b; + expect(y).to.equal(undefined); + }); + + it("should subscribe to changes when mutating objects", () => { + let x, y; + + const store = deepSignal<{ + a?: { id: number; nested: { id: number } }; + b: { id: number; nested: { id: number } }[]; + }>({ + b: [ + { id: 1, nested: { id: 1 } }, + { id: 2, nested: { id: 2 } }, + ], + }); + + effect(() => { + x = store.a?.id; + }); + + effect(() => { + y = store.a?.nested.id; + }); + + expect(x).to.equal(undefined); + expect(y).to.equal(undefined); + + store.a = store.b[0]; + + expect(x).to.equal(1); + expect(y).to.equal(1); + + store.a = store.b[1]; + expect(x).to.equal(2); + expect(y).to.equal(2); + + store.a = undefined; + expect(x).to.equal(undefined); + expect(y).to.equal(undefined); + + store.a = store.b[1]; + expect(x).to.equal(2); + expect(y).to.equal(2); + }); + + it("should trigger effects after mutations happen", () => { + let x; + effect(() => { + x = store.a; + }); + expect(x).to.equal(1); + store.a = 11; + expect(x).to.equal(11); + }); + + // it("should trigger subscriptions after mutations happen", () => { + // let x; + // store.$a!.subscribe(() => { + // x = store.a; + // }); + // expect(x).to.equal(1); + // store.a = 11; + // expect(x).to.equal(11); + // }); + + it("should subscribe corretcly from getters", () => { + let x; + const store = deepSignal({ + counter: 1, + get double() { + return store.counter * 2; + }, + }); + effect(() => (x = store.double)); + expect(x).to.equal(2); + store.counter = 2; + expect(x).to.equal(4); + }); + + it("should subscribe corretcly from getters returning other parts of the store", () => { + let data; + const store = deepSignal({ + switch: "a", + a: { data: "a" }, + b: { data: "b" }, + get aOrB() { + return store.switch === "a" ? store.a : store.b; + }, + }); + effect(() => (data = store.aOrB.data)); + expect(data).to.equal("a"); + store.switch = "b"; + expect(data).to.equal("b"); + }); + + // it("should subscribe to changes", () => { + // const spy1 = sinon.spy(() => store.a); + // const spy2 = sinon.spy(() => store.nested); + // const spy3 = sinon.spy(() => store.nested.b); + // const spy4 = sinon.spy(() => store.array[0]); + // const spy5 = sinon.spy( + // () => typeof store.array[1] === "object" && store.array[1].b + // ); + + // effect(spy1); + // effect(spy2); + // effect(spy3); + // effect(spy4); + // effect(spy5); + + // expect(spy1).callCount(1); + // expect(spy2).callCount(1); + // expect(spy3).callCount(1); + // expect(spy4).callCount(1); + // expect(spy5).callCount(1); + + // store.a = 11; + + // expect(spy1).callCount(2); + // expect(spy2).callCount(1); + // expect(spy3).callCount(1); + // expect(spy4).callCount(1); + // expect(spy5).callCount(1); + + // store.nested.b = 22; + + // expect(spy1).callCount(2); + // expect(spy2).callCount(1); + // expect(spy3).callCount(2); + // expect(spy4).callCount(1); + // expect(spy5).callCount(2); // nested also exists array[1] + + // store.nested = { b: 222 }; + + // expect(spy1).callCount(2); + // expect(spy2).callCount(2); + // expect(spy3).callCount(3); + // expect(spy4).callCount(1); + // expect(spy5).callCount(2); // now store.nested has a different reference + + // store.array[0] = 33; + + // expect(spy1).callCount(2); + // expect(spy2).callCount(2); + // expect(spy3).callCount(3); + // expect(spy4).callCount(2); + // expect(spy5).callCount(2); + + // if (typeof store.array[1] === "object") store.array[1].b = 2222; + + // expect(spy1).callCount(2); + // expect(spy2).callCount(2); + // expect(spy3).callCount(3); + // expect(spy4).callCount(2); + // expect(spy5).callCount(3); + + // store.array[1] = { b: 22222 }; + + // expect(spy1).callCount(2); + // expect(spy2).callCount(2); + // expect(spy3).callCount(3); + // expect(spy4).callCount(2); + // expect(spy5).callCount(4); + + // store.array.push(4); + + // expect(spy1).callCount(2); + // expect(spy2).callCount(2); + // expect(spy3).callCount(3); + // expect(spy4).callCount(2); + // expect(spy5).callCount(4); + + // store.array[3] = 5; + + // expect(spy1).callCount(2); + // expect(spy2).callCount(2); + // expect(spy3).callCount(3); + // expect(spy4).callCount(2); + // expect(spy5).callCount(4); + + // store.array = [333, { b: 222222 }]; + + // expect(spy1).callCount(2); + // expect(spy2).callCount(2); + // expect(spy3).callCount(3); + // expect(spy4).callCount(3); + // expect(spy5).callCount(5); + // }); + + // it("should subscribe to array length", () => { + // const array = [1]; + // const store = deepSignal({ array }); + // const spy1 = sinon.spy(() => store.array.length); + // const spy2 = sinon.spy(() => store.array.map((i: number) => i)); + + // effect(spy1); + // effect(spy2); + // expect(spy1).callCount(1); + // expect(spy2).callCount(1); + + // store.array.push(2); + // expect(store.array.length).to.equal(2); + // expect(spy1).callCount(2); + // expect(spy2).callCount(2); + + // store.array[2] = 3; + // expect(store.array.length).to.equal(3); + // expect(spy1).callCount(3); + // expect(spy2).callCount(3); + + // store.array = store.array.filter((i: number) => i <= 2); + // expect(store.array.length).to.equal(2); + // expect(spy1).callCount(4); + // expect(spy2).callCount(4); + // }); + + it("should be able to reset values with Object.assign and still react to changes", () => { + const initialNested = { ...nested }; + const initialState = { ...state, nested: initialNested }; + let a, b; + + effect(() => { + a = store.a; + }); + effect(() => { + b = store.nested.b; + }); + + store.a = 2; + store.nested.b = 3; + + expect(a).to.equal(2); + expect(b).to.equal(3); + + Object.assign(store, initialState); + + expect(a).to.equal(1); + expect(b).to.equal(2); + }); + }); + + describe("peek", () => { + it("should return correct values when using peek()", () => { + expect(peek(store, "a")).to.equal(1); + expect(peek(store.nested, "b")).to.equal(2); + expect(peek(store.array, 0)).to.equal(3); + const nested = peek(store, "array")[1]; + expect(typeof nested === "object" && nested.b).to.equal(2); + expect(peek(store.array, "length")).to.equal(2); + }); + + // it("should not subscribe to changes when peeking", () => { + // const spy1 = sinon.spy(() => peek(store, "a")); + // const spy2 = sinon.spy(() => peek(store, "nested")); + // const spy3 = sinon.spy(() => peek(store, "nested").b); + // const spy4 = sinon.spy(() => peek(store, "array")[0]); + // const spy5 = sinon.spy(() => { + // const nested = peek(store, "array")[1]; + // typeof nested === "object" && nested.b; + // }); + // const spy6 = sinon.spy(() => peek(store, "array").length); + + // effect(spy1); + // effect(spy2); + // effect(spy3); + // effect(spy4); + // effect(spy5); + // effect(spy6); + + // expect(spy1).callCount(1); + // expect(spy2).callCount(1); + // expect(spy3).callCount(1); + // expect(spy4).callCount(1); + // expect(spy5).callCount(1); + // expect(spy6).callCount(1); + + // store.a = 11; + // store.nested.b = 22; + // store.nested = { b: 222 }; + // store.array[0] = 33; + // if (typeof store.array[1] === "object") store.array[1].b = 2222; + // store.array.push(4); + + // expect(spy1).callCount(1); + // expect(spy2).callCount(1); + // expect(spy3).callCount(1); + // expect(spy4).callCount(1); + // expect(spy5).callCount(1); + // expect(spy6).callCount(1); + // }); + + // it("should subscribe to some changes but not other when peeking inside an object", () => { + // const spy1 = sinon.spy(() => peek(store.nested, "b")); + // effect(spy1); + // expect(spy1).callCount(1); + // store.nested.b = 22; + // expect(spy1).callCount(1); + // store.nested = { b: 222 }; + // expect(spy1).callCount(2); + // store.nested.b = 2222; + // expect(spy1).callCount(2); + // }); + + it("should support returning peek from getters", () => { + const store = deepSignal({ + counter: 1, + get double() { + return store.counter * 2; + }, + }); + expect(peek(store, "double")).to.equal(2); + store.counter = 2; + expect(peek(store, "double")).to.equal(4); + }); + }); + + describe("refs", () => { + it("should preserve object references", () => { + expect(store.nested).to.equal(store.array[1]); + expect(store.nested.$b).to.equal( + typeof store.array[1] === "object" && store.array[1].$b + ); + + store.nested.b = 22; + + expect(store.nested).to.equal(store.array[1]); + expect(store.nested.$b).to.equal( + typeof store.array[1] === "object" && store.array[1].$b + ); + expect(store.nested.b).to.equal(22); + expect(typeof store.array[1] === "object" && store.array[1].b).to.equal( + 22 + ); + + store.nested = { b: 222 }; + + expect(store.nested).to.not.equal(store.array[1]); + expect(store.nested.$b).to.not.equal( + typeof store.array[1] === "object" && store.array[1].$b + ); + expect(store.nested.b).to.equal(222); + expect(typeof store.array[1] === "object" && store.array[1].b).to.equal( + 22 + ); + }); + + it("should return the same proxy if initialized more than once", () => { + const state = {}; + const store1 = deepSignal(state); + const store2 = deepSignal(state); + expect(store1).to.equal(store2); + }); + + it("should throw when trying to create a deepsignal of a proxy", () => { + const store1 = deepSignal({}); + expect(() => deepSignal(store1)).to.throw(); + }); + }); + + describe("unsupported data structures", () => { + it("should throw when trying to deepsignal a class instance", () => { + class MyClass {} + const obj = new MyClass(); + expect(() => deepSignal(obj)).to.throw(); + }); + + it("should not wrap a class instance", () => { + class MyClass {} + const obj = new MyClass(); + const store = deepSignal({ obj }); + expect(store.obj).to.equal(obj); + }); + + it("should not wrap built-ins in proxies", () => { + window.MyClass = class MyClass {}; + const obj = new window.MyClass(); + const store = deepSignal({ obj }); + expect(store.obj).to.equal(obj); + }); + + // it("should not wrap elements in proxies", () => { + // const el = window.document.createElement("div"); + // const store = deepSignal({ el }); + // expect(store.el).to.equal(el); + // }); + + it("should wrap global objects", () => { + window.obj = { b: 2 }; + const store = deepSignal(window.obj); + expect(store).to.not.equal(window.obj); + expect(store).to.deep.equal({ b: 2 }); + expect(isSignal(store.$b)).to.equal(true); + expect(store.$b.value).to.equal(2); + }); + + it("should not wrap dates", () => { + const date = new Date(); + const store = deepSignal({ date }); + expect(store.date).to.equal(date); + }); + + it("should not wrap regular expressions", () => { + const regex = new RegExp(""); + const store = deepSignal({ regex }); + expect(store.regex).to.equal(regex); + }); + + it("should not wrap Map", () => { + const map = new Map(); + const store = deepSignal({ map }); + expect(store.map).to.equal(map); + }); + + it("should wrap Set and emit patches on structural changes", () => { + const set = new Set([1]); + const store = deepSignal({ set }); + // The Set itself should be proxied (different reference) + expect(store.set).to.not.equal(set); + // Size observable via manual mutation + patch emission (indirectly validated in watchPatches Set test) + store.set.add(2); + store.set.delete(1); + expect(store.set.has(2)).to.equal(true); + }); + }); + + describe("symbols", () => { + it("should observe symbols", () => { + const key = Symbol("key"); + let x; + const store = deepSignal<{ [key: symbol]: any }>({}); + effect(() => (x = store[key])); + + expect(store[key]).to.equal(undefined); + expect(x).to.equal(undefined); + + store[key] = true; + + expect(store[key]).to.equal(true); + expect(x).to.equal(true); + }); + + it("should not observe well-known symbols", () => { + const key = Symbol.isConcatSpreadable; + let x; + const state = deepSignal<{ [key: symbol]: any }>({}); + effect(() => (x = state[key])); + + expect(state[key]).to.equal(undefined); + expect(x).to.equal(undefined); + + state[key] = true; + expect(state[key]).to.equal(true); + expect(x).to.equal(undefined); + }); + }); + + describe("shallow", () => { + it("should not proxy shallow objects", () => { + const shallowObj1 = { a: 1 }; + let shallowObj2 = { b: 2 }; + const deepObj = { c: 3 }; + shallowObj2 = shallow(shallowObj2); + const store = deepSignal({ + shallowObj1: shallow(shallowObj1), + shallowObj2, + deepObj, + }); + expect(store.shallowObj1.a).to.equal(1); + expect(store.shallowObj2.b).to.equal(2); + expect(store.deepObj.c).to.equal(3); + expect(store.shallowObj1).to.equal(shallowObj1); + expect(store.shallowObj2).to.equal(shallowObj2); + expect(store.deepObj).to.not.equal(deepObj); + }); + + it("should not proxy shallow objects if shallow is called on the reference before accessing the property", () => { + const shallowObj = { a: 1 }; + const deepObj = { c: 3 }; + const store = deepSignal({ shallowObj, deepObj }); + shallow(shallowObj); + expect(store.shallowObj.a).to.equal(1); + expect(store.deepObj.c).to.equal(3); + expect(store.shallowObj).to.equal(shallowObj); + expect(store.deepObj).to.not.equal(deepObj); + }); + + it("should observe changes in the shallow object if the reference changes", () => { + const obj = { a: 1 }; + const shallowObj = shallow(obj); + const store = deepSignal({ shallowObj }); + let x; + effect(() => { + x = store.shallowObj.a; + }); + expect(x).to.equal(1); + store.shallowObj = shallow({ a: 2 }); + expect(x).to.equal(2); + }); + + it("should stop observing changes in the shallow object if the reference changes and it's not shallow anymore", () => { + const obj = { a: 1 }; + const shallowObj = shallow(obj); + const store = deepSignal<{ obj: typeof obj }>({ obj: shallowObj }); + let x; + effect(() => { + x = store.obj.a; + }); + expect(x).to.equal(1); + store.obj = { a: 2 }; + expect(x).to.equal(2); + store.obj.a = 3; + expect(x).to.equal(3); + }); + + it("should not observe changes in the props of the shallow object", () => { + const obj = { a: 1 }; + const shallowObj = shallow(obj); + const store = deepSignal({ shallowObj }); + let x; + effect(() => { + x = store.shallowObj.a; + }); + expect(x).to.equal(1); + store.shallowObj.a = 2; + expect(x).to.equal(1); + }); + }); +}); diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/patchOptimized.test.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/patchOptimized.test.ts new file mode 100644 index 0000000..6922473 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/patchOptimized.test.ts @@ -0,0 +1,47 @@ +import { describe, it, expect, beforeEach } from "vitest"; +import { deepSignal } from "../deepSignal"; +import { watch } from "../watch"; + +// Goal: demonstrate that patchOptimized deep watch performs fewer traversals +// than standard deep watch for the same batch of nested mutations. +// We use the exported __traverseCount instrumentation to measure how many +// times traverse() executes under each strategy. + +describe("watch patch-only simplified performance placeholder", () => { + let store: any; + const build = (breadth = 3, depth = 3) => { + const make = (d: number): any => { + if (d === 0) return { v: 0 }; + const obj: any = {}; + for (let i = 0; i < breadth; i++) obj["k" + i] = make(d - 1); + return obj; + }; + return make(depth); + }; + + beforeEach(() => { + store = deepSignal(build()); + }); + + function mutateAll(breadth = 3, depth = 3) { + const visit = (node: any, d: number) => { + if (d === 0) { + node.v++; + return; + } + for (let i = 0; i < breadth; i++) visit(node["k" + i], d - 1); + }; + visit(store, depth); + } + + it("receives a single batch of patches after deep mutations", async () => { + let batches = 0; + const { stopListening: stop } = watch(store, ({ patches }) => { + if (patches.length) batches++; + }); + mutateAll(); + await Promise.resolve(); + expect(batches).toBe(1); + stop(); + }); +}); diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/tier3.test.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/tier3.test.ts new file mode 100644 index 0000000..ba54feb --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/tier3.test.ts @@ -0,0 +1,148 @@ +import { describe, it, expect } from "vitest"; +import { deepSignal, getDeepSignalRootId, peek } from "../deepSignal"; +import { + watch, + __traverseCount, + __resetTraverseCount, + traverse, +} from "../watch"; +import { effect } from "../core"; + +describe("watch advanced", () => { + it("basic patch watcher fires on deep mutations", async () => { + const st = deepSignal({ a: { b: { c: 1 } } }); + let batches: number = 0; + watch(st, ({ patches }) => { + if (patches.length) batches++; + }); + st.a.b.c = 2; + st.a.b = { c: 3 } as any; + await Promise.resolve(); + expect(batches).toBeGreaterThan(0); + }); + + // multi-source value mode removed; patch-only now - skip equivalent + + // getter source value mode removed in patch-only watcher + + it("watch once option still stops after first batch", async () => { + const st = deepSignal({ a: 1 }); + let count = 0; + watch( + st, + () => { + count++; + }, + { once: true, immediate: true } + ); + st.a = 2; + st.a = 3; + await Promise.resolve(); + expect(count).toBe(1); + }); + + // observe value mode removed; observe is alias of watch +}); + +describe("patches & root ids", () => { + it("root ids are unique", () => { + const a = deepSignal({}); + const b = deepSignal({}); + expect(getDeepSignalRootId(a)).not.toBe(getDeepSignalRootId(b)); + }); + + // legacy watchPatches API removed; patch mode only valid for deepSignal roots + it("watch throws on non-deepSignal input", () => { + expect(() => watch({} as any, () => {})).toThrow(); + }); + + it("Map unsupported does not emit patches", async () => { + const m = new Map(); + const st = deepSignal({ m }); + const patches: any[] = []; + const { stopListening: stop } = watch(st, ({ patches: batch }) => + patches.push(batch) + ); + m.set("a", 1); + await Promise.resolve(); + await Promise.resolve(); + expect(patches.length).toBe(0); + stop(); + }); +}); + +describe("tier3: Set iteration variants", () => { + it("entries() iteration proxies nested mutation", async () => { + const st = deepSignal({ s: new Set() }); + st.s.add({ id: "eEnt", inner: { v: 1 } }); + const paths: string[] = []; + const { stopListening: stop } = watch(st, ({ patches }) => + paths.push(...patches.map((pp: any) => pp.path.join("."))) + ); + for (const [val] of st.s.entries()) { + (val as any).inner.v; + } // ensure proxy + for (const [val] of st.s.entries()) { + (val as any).inner.v = 2; + } + await Promise.resolve(); + await Promise.resolve(); + expect(paths.some((p) => p.endsWith("eEnt.inner.v"))).toBe(true); + stop(); + }); + + it("forEach iteration proxies nested mutation", async () => { + const st = deepSignal({ s: new Set() }); + st.s.add({ id: "fe1", data: { n: 1 } }); + const { stopListening: stop } = watch(st, () => {}); + st.s.forEach((e) => (e as any).data.n); // access + st.s.forEach((e) => { + (e as any).data.n = 2; + }); + await Promise.resolve(); + await Promise.resolve(); + stop(); + }); + + it("keys() iteration returns proxies", async () => { + const st = deepSignal({ s: new Set() }); + st.s.add({ id: "k1", foo: { x: 1 } }); + const { stopListening: stop } = watch(st, () => {}); + for (const e of st.s.keys()) { + (e as any).foo.x = 2; + } + await Promise.resolve(); + await Promise.resolve(); + stop(); + }); +}); + +describe("tier3: peek behavior", () => { + it("peek does not create reactive dependency on property", async () => { + const st = deepSignal({ a: 1 }); + let runs = 0; + effect(() => { + runs++; + peek(st, "a"); + }); + expect(runs).toBe(1); + st.a = 2; + // Flush microtasks + await Promise.resolve(); + await Promise.resolve(); + expect(runs).toBe(1); // no rerun + }); +}); + +describe("tier3: traverse helper direct calls (symbols & sets)", () => { + it("traverse counts and respects depth param", () => { + __resetTraverseCount(); + const obj: any = { a: { b: { c: 1 } } }; + traverse(obj, 1); + const shallowCount = __traverseCount; + __resetTraverseCount(); + traverse(obj, 3); + const deepCount = __traverseCount; + expect(deepCount).toBeGreaterThan(shallowCount); + }); +}); diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/watch.test.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/watch.test.ts new file mode 100644 index 0000000..4ba399f --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/watch.test.ts @@ -0,0 +1,91 @@ +import { describe, expect, it } from "vitest"; +import { deepSignal } from "../deepSignal"; +import { watch } from "../watch"; +import { watchEffect } from "../watchEffect"; + +describe("watch", () => { + it("watch immediate", () => { + const store = deepSignal({ + userinfo: { + name: "tom", + }, + }); + let val!: string; + watch( + store, + ({ newValue }) => { + val = newValue.userinfo.name; + }, + { immediate: true } + ); + expect(val).toEqual("tom"); + }); + it("watch deep", () => { + const store = deepSignal({ + userinfo: { + name: "tom", + }, + }); + let val!: string; + watch( + store, + ({ newValue }) => { + val = newValue.userinfo.name; + }, + { immediate: true } + ); + let value2!: string; + watch( + store, + ({ newValue }) => { + value2 = newValue.userinfo.name; + }, + { immediate: true } + ); + expect(val).toEqual("tom"); + store.userinfo.name = "jon"; + // patch delivery async (microtask) + return Promise.resolve().then(() => { + expect(val).toEqual("jon"); + // With refactored watch using native effect, shallow watcher now also updates root reference + expect(value2).toEqual("jon"); + }); + }); + + it("watch once", () => { + const store = deepSignal({ + userinfo: { + name: "tom", + }, + }); + let val!: string; + watch( + store, + ({ newValue }) => { + val = newValue.userinfo.name; + }, + { immediate: true, once: true } + ); + + expect(val).toEqual("tom"); + store.userinfo.name = "jon"; + // once watcher shouldn't update after first run + expect(val).toEqual("tom"); + }); + + it("watch effect", () => { + const store = deepSignal({ + userinfo: { + name: "tom", + }, + }); + let x = undefined; + watchEffect(() => { + x = store.userinfo.name; + }); + + expect(x).toEqual("tom"); + store.userinfo.name = "jon"; + expect(x).toEqual("jon"); + }); +}); diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/watchPatches.test.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/watchPatches.test.ts new file mode 100644 index 0000000..8d2d067 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/test/watchPatches.test.ts @@ -0,0 +1,357 @@ +import { describe, it, expect } from "vitest"; +import { + deepSignal, + setSetEntrySyntheticId, + addWithId, + DeepPatch, +} from "../deepSignal"; +import { watch, observe } from "../watch"; + +describe("watch (patch mode)", () => { + it("emits set patches with correct paths and batching", async () => { + const state = deepSignal({ a: { b: 1 }, arr: [1, { x: 2 }] }); + const received: DeepPatch[][] = []; + const { stopListening: stop } = watch(state, ({ patches }) => { + received.push(patches); + }); + state.a.b = 2; + (state.arr[1] as any).x = 3; + state.arr.push(5); + await Promise.resolve(); + expect(received.length).toBe(1); + const batch = received[0]; + const paths = batch.map((p) => p.path.join(".")).sort(); + expect(paths).toContain("a.b"); + expect(paths).toContain("arr.1.x"); + expect(paths).toContain("arr.2"); + const addOps = batch.filter((p) => p.op === "add").length; + expect(addOps).toBe(batch.length); + stop(); + }); + + it("emits delete patches without value", async () => { + const state = deepSignal<{ a: { b?: number }; c?: number }>({ + a: { b: 1 }, + c: 2, + }); + const out: DeepPatch[][] = []; + const { stopListening: stop } = watch(state, ({ patches }) => + out.push(patches) + ); + delete state.a.b; + delete state.c; + await Promise.resolve(); + expect(out.length).toBe(1); + const [batch] = out; + const deletePatches = batch.filter((p) => p.op === "remove"); + const delPaths = deletePatches.map((p) => p.path.join(".")).sort(); + expect(delPaths).toEqual(["a.b", "c"]); + deletePatches.forEach((p: any) => expect(p.value).toBeUndefined()); + stop(); + }); + + it("observe patch mode mirrors watch patch mode", async () => { + const state = deepSignal({ a: 1 }); + const wp: DeepPatch[][] = []; + const ob: DeepPatch[][] = []; + const { stopListening: stop1 } = watch(state, ({ patches }) => + wp.push(patches) + ); + const { stopListening: stop2 } = observe(state, ({ patches }) => + ob.push(patches) + ); + state.a = 2; + await Promise.resolve(); + expect(wp.length).toBe(1); + expect(ob.length).toBe(1); + expect(wp[0][0].path.join(".")).toBe("a"); + stop1(); + stop2(); + }); + + it("filters out patches from other roots", async () => { + const a = deepSignal({ x: 1 }); + const b = deepSignal({ y: 2 }); + const out: DeepPatch[][] = []; + const { stopListening: stop } = watch(a, ({ patches }) => + out.push(patches) + ); + b.y = 3; + a.x = 2; + await Promise.resolve(); + expect(out.length).toBe(1); + expect(out[0][0].path.join(".")).toBe("x"); + stop(); + }); + + it("emits patches for Set structural mutations (add/delete)", async () => { + const state = deepSignal<{ s: Set }>({ s: new Set([1, 2]) }); + const batches: DeepPatch[][] = []; + const { stopListening: stop } = watch(state, ({ patches }) => + batches.push(patches) + ); + state.s.add(3); + state.s.delete(1); + await Promise.resolve(); + expect(batches.length >= 1).toBe(true); + const allPaths = batches.flatMap((b) => b.map((p) => p.path.join("."))); + expect(allPaths.some((p) => p.startsWith("s."))).toBe(true); + stop(); + }); + + it("emits patches for nested objects added after initialization", async () => { + const state = deepSignal<{ root: any }>({ root: {} }); + const patches: DeepPatch[][] = []; + const { stopListening: stop } = watch(state, ({ patches: batch }) => + patches.push(batch) + ); + state.root.child = { level: { value: 1 } }; + state.root.child.level.value = 2; + await Promise.resolve(); + const flat = patches.flat().map((p) => p.path.join(".")); + expect(flat).toContain("root.child"); + expect(flat).toContain("root.child.level.value"); + stop(); + }); + + it("emits structural patches for sets of sets", async () => { + const innerA = new Set([{ id: "node1", x: 1 }]); + const s = new Set([innerA]); + const state = deepSignal<{ graph: Set }>({ graph: s }); + const batches: DeepPatch[][] = []; + const { stopListening: stop } = watch(state, ({ patches }) => + batches.push(patches) + ); + const innerB = new Set([{ id: "node2", x: 5 }]); + state.graph.add(innerB); + ([...innerA][0] as any).x = 2; + await Promise.resolve(); + const pathStrings = batches.flat().map((p) => p.path.join(".")); + expect(pathStrings.some((p) => p.startsWith("graph."))).toBe(true); + stop(); + }); + + it("tracks deep nested object mutation inside a Set entry after iteration", async () => { + const rawEntry = { id: "n1", data: { val: 1 } }; + const st = deepSignal({ bag: new Set([rawEntry]) }); + const collected: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches }) => + collected.push(patches) + ); + let proxied: any; + for (const e of st.bag.values()) { + proxied = e; + e.data.val; + } + proxied.data.val = 2; + await Promise.resolve(); + const flat = collected.flat().map((p: DeepPatch) => p.path.join(".")); + expect(flat.some((p: string) => p.endsWith("n1.data.val"))).toBe(true); + stop(); + }); + + it("allows custom synthetic id for Set entry", async () => { + const node = { name: "x" }; + const state = deepSignal({ s: new Set() }); + const collected2: DeepPatch[][] = []; + const { stopListening: stop } = watch(state, ({ patches }) => + collected2.push(patches) + ); + addWithId(state.s as any, node, "custom123"); + await Promise.resolve(); + const flat = collected2.flat().map((p: DeepPatch) => p.path.join(".")); + expect(flat.some((p: string) => p === "s.custom123")).toBe(true); + stop(); + }); + + describe("Set", () => { + it("emits single structural patch on Set.clear()", async () => { + const st = deepSignal({ s: new Set() }); + addWithId(st.s as any, { id: "a", x: 1 }, "a"); + addWithId(st.s as any, { id: "b", x: 2 }, "b"); + const batches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches }) => + batches.push(patches) + ); + st.s.clear(); + await Promise.resolve(); + const all = batches.flat().map((p) => p.path.join(".")); + expect(all).toEqual(["s"]); + stop(); + }); + it("emits delete patch for object entry", async () => { + const st = deepSignal({ s: new Set() }); + const obj = { id: "n1", x: 1 }; + const patches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches: batch }) => + patches.push(batch) + ); + st.s.add(obj); + st.s.delete(obj); + await Promise.resolve(); + const all = patches + .flat() + .filter((p) => p.op === "remove") + .map((p) => p.path.join(".")); + expect(all).toContain("s.n1"); + stop(); + }); + it("does not emit patch for duplicate add", async () => { + const st = deepSignal({ s: new Set([1]) }); + const patches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches: batch }) => + patches.push(batch) + ); + st.s.add(1); + await Promise.resolve(); + expect(patches.length).toBe(0); + stop(); + }); + it("does not emit patch deleting non-existent entry", async () => { + const st = deepSignal({ s: new Set([1]) }); + const patches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches: batch }) => + patches.push(batch) + ); + st.s.delete(2); + await Promise.resolve(); + expect(patches.length).toBe(0); + stop(); + }); + it("addWithId primitive returns primitive and emits patch with primitive key", async () => { + const st = deepSignal({ s: new Set() }); + const patches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches: batch }) => + patches.push(batch) + ); + const ret = addWithId(st.s as any, 5, "ignored"); + expect(ret).toBe(5); + await Promise.resolve(); + const paths = patches.flat().map((p) => p.path.join(".")); + expect(paths).toContain("s.5"); + stop(); + }); + it("setSetEntrySyntheticId applies custom id without helper", async () => { + const st = deepSignal({ s: new Set() }); + const obj = { name: "x" }; + setSetEntrySyntheticId(obj, "customX"); + const patches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches: batch }) => + patches.push(batch) + ); + st.s.add(obj); + await Promise.resolve(); + const paths = patches.flat().map((p) => p.path.join(".")); + expect(paths).toContain("s.customX"); + stop(); + }); + it("values/entries/forEach proxy nested mutation", async () => { + const st = deepSignal({ s: new Set() }); + const entry = addWithId(st.s as any, { id: "e1", inner: { v: 1 } }, "e1"); + const batches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches }) => + batches.push(patches) + ); + for (const e of st.s.values()) { + e.inner.v; + } + entry.inner.v = 2; + await Promise.resolve(); + const vPaths = batches.flat().map((p) => p.path.join(".")); + expect(vPaths.some((p) => p.endsWith("e1.inner.v"))).toBe(true); + stop(); + }); + it("raw reference mutation produces no deep patch while proxied does", async () => { + const raw = { id: "id1", data: { x: 1 } }; + const st = deepSignal({ s: new Set([raw]) }); + const batches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches }) => + batches.push(patches) + ); + raw.data.x = 2; + await Promise.resolve(); + const afterRaw = batches.flat().map((p) => p.path.join(".")); + expect(afterRaw.some((p) => p.endsWith("id1.data.x"))).toBe(false); + let proxied: any; + for (const e of st.s.values()) proxied = e; + proxied.data.x = 3; + await Promise.resolve(); + const afterProxied = batches.flat().map((p) => p.path.join(".")); + expect(afterProxied.some((p) => p.endsWith("id1.data.x"))).toBe(true); + stop(); + }); + it("synthetic id collision assigns unique blank node id", async () => { + const st = deepSignal({ s: new Set() }); + const a1 = { id: "dup", v: 1 }; + const a2 = { id: "dup", v: 2 }; + const patches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches: batch }) => + patches.push(batch) + ); + st.s.add(a1); + st.s.add(a2); + await Promise.resolve(); + const keys = patches + .flat() + .filter((p) => p.op === "add") + .map((p) => p.path.slice(-1)[0]); + expect(new Set(keys).size).toBe(2); + stop(); + }); + + it("allows Array.from() and spread on Set without brand errors and tracks nested mutation", async () => { + const st = deepSignal({ + s: new Set([{ id: "eIter", inner: { v: 1 } }]), + }); + // Regression: previously 'values method called on incompatible Proxy' was thrown here. + const arr = Array.from(st.s); + expect(arr.length).toBe(1); + expect(arr[0].inner.v).toBe(1); + const spread = [...st.s]; + expect(spread[0].inner.v).toBe(1); + const batches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches }) => + batches.push(patches) + ); + spread[0].inner.v = 2; // mutate nested field of iterated (proxied) entry + await Promise.resolve(); + const flat = batches.flat().map((p) => p.path.join(".")); + expect(flat.some((p) => p.endsWith("eIter.inner.v"))).toBe(true); + stop(); + }); + }); + + describe("Arrays & mixed batch", () => { + it("emits patches for splice/unshift/shift in single batch", async () => { + const st = deepSignal({ arr: [1, 2, 3] }); + const batches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches }) => + batches.push(patches) + ); + st.arr.splice(1, 1, 99, 100); + st.arr.unshift(0); + st.arr.shift(); + await Promise.resolve(); + const paths = batches.flat().map((p) => p.path.join(".")); + expect(paths.some((p) => p.startsWith("arr."))).toBe(true); + stop(); + }); + it("mixed object/array/Set mutations batch together", async () => { + const st = deepSignal({ o: { a: 1 }, arr: [1], s: new Set() }); + const batches: DeepPatch[][] = []; + const { stopListening: stop } = watch(st, ({ patches }) => + batches.push(patches) + ); + st.o.a = 2; + st.arr.push(2); + addWithId(st.s as any, { id: "z", v: 1 }, "z"); + await Promise.resolve(); + expect(batches.length).toBe(1); + const paths = batches[0].map((p) => p.path.join(".")); + expect(paths).toContain("o.a"); + expect(paths).toContain("arr.1"); + expect(paths.some((p) => p.startsWith("s."))).toBe(true); + stop(); + }); + }); +}); diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/utils.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/utils.ts new file mode 100644 index 0000000..6e927f8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/utils.ts @@ -0,0 +1,41 @@ +export const objectToString: typeof Object.prototype.toString = + Object.prototype.toString +export const toTypeString = (value: unknown): string => + objectToString.call(value) +const hasOwnProperty = Object.prototype.hasOwnProperty +export const hasOwn = ( + val: object, + key: string | symbol, +): key is keyof typeof val => hasOwnProperty.call(val, key) + +export const isArray: typeof Array.isArray = Array.isArray +export const isMap = (val: unknown): val is Map => + toTypeString(val) === '[object Map]' +export const isSet = (val: unknown): val is Set => + toTypeString(val) === '[object Set]' + +export const isDate = (val: unknown): val is Date => + toTypeString(val) === '[object Date]' +export const isRegExp = (val: unknown): val is RegExp => + toTypeString(val) === '[object RegExp]' +export const isFunction = (val: unknown): val is Function => + typeof val === 'function' +export const isString = (val: unknown): val is string => typeof val === 'string' +export const isSymbol = (val: unknown): val is symbol => typeof val === 'symbol' +export const isObject = (val: unknown): val is Record => + val !== null && typeof val === 'object' + +export const isPromise = (val: unknown): val is Promise => { + return ( + (isObject(val) || isFunction(val)) && + isFunction((val as any).then) && + isFunction((val as any).catch) + ) +} +export const isPlainObject = (val: unknown): val is object => + toTypeString(val) === '[object Object]' + +export const hasChanged = (value: any, oldValue: any): boolean => + !Object.is(value, oldValue) + +export function NOOP() {} diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/watch.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/watch.ts new file mode 100644 index 0000000..f3784c1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/watch.ts @@ -0,0 +1,188 @@ +import { isObject, isPlainObject, isSet, isMap, isArray } from "./utils"; +import { isSignal } from "./core"; +import { + isDeepSignal, + subscribeDeepMutations, + getDeepSignalRootId, + DeepPatch, +} from "./deepSignal"; +import { ReactiveFlags } from "./contents"; + +/** Function provided to register a disposer (runs before next callback or on stop). */ +export type RegisterCleanup = (cleanupFn: () => void) => void; +/** Signature for watchEffect style sources receiving the cleanup registrar. */ +export type WatchEffect = (registerCleanup: RegisterCleanup) => void; + +/** Options for {@link watch}. */ +export interface WatchOptions { + /** Trigger the callback immediately with the current value (default: false). */ + immediate?: boolean; + /** Auto-stop the watcher after the first callback run that delivers patches (or immediate call if no patches). */ + once?: boolean; + /** Allow legacy/unknown options (ignored) to avoid hard breaks while migrating. */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [legacy: string]: any; +} + +export interface WatchPatchEvent { + /** Patch batch that triggered this callback (may be empty for immediate). */ + patches: DeepPatch[]; + /** Previous snapshot (deep-cloned) of the root value before these patches. Undefined on first call. */ + oldValue: Root | undefined; + /** Current root value (live proxy). */ + newValue: Root; +} + +export type WatchPatchCallback = ( + event: WatchPatchEvent +) => any; + +// Internal helper kept for external compatibility. +export const remove = (arr: T[], el: T): void => { + const i = arr.indexOf(el); + if (i > -1) arr.splice(i, 1); +}; + +/** Observe patch batches on a deep signal root. */ +export function watch( + source: Root, + callback: WatchPatchCallback, + options: WatchOptions = {} +) { + if (!isDeepSignal(source)) { + throw new Error( + "watch() now only supports deepSignal roots (patch mode only)" + ); + } + const { immediate, once } = options; + + const rootId = getDeepSignalRootId(source as any)!; + + let active = true; + let cleanup: (() => void) | undefined; + const registerCleanup: RegisterCleanup = (fn) => { + cleanup = fn; + }; + const runCleanup = () => { + if (cleanup) { + try { + cleanup(); + } catch { + /* ignore */ + } finally { + cleanup = undefined; + } + } + }; + + // Deep clone snapshot helper (JSON clone sufficient for typical reactive plain data) + const clone = (v: any) => { + try { + return JSON.parse(JSON.stringify(v)); + } catch { + return undefined as any; + } + }; + let lastSnapshot: Root | undefined = clone(source); + + const stopListening = () => { + if (!active) return; + active = false; + runCleanup(); + unsubscribe && unsubscribe(); + }; + + const deliver = (patches: DeepPatch[]) => { + if (!active) return; + runCleanup(); + const prev = lastSnapshot; + const next = source as any as Root; // live proxy + try { + callback({ + patches, + oldValue: prev, + newValue: next, + }); + } finally { + if (active) lastSnapshot = clone(next); + if (once) stopListening(); + } + }; + + const unsubscribe = subscribeDeepMutations(rootId, (patches) => { + if (!patches.length) return; // ignore empty batches + deliver(patches); + }); + + if (immediate) { + // Immediate call with empty patch list (snapshot only) + deliver([]); + } + + return { + /** Stop listening to future patch batches; idempotent. */ + stopListening, + /** Register a cleanup callback run before the next invocation / stop. */ + registerCleanup, + }; +} + +// observe alias +export function observe( + source: any, + cb: WatchPatchCallback, + options?: WatchOptions +) { + return watch(source, cb, options); +} + +// Instrumentation counter for performance tests (number of traverse invocations) +/** Instrumentation counter tracking total `traverse()` invocations (used in tests). */ +export let __traverseCount = 0; // retained for external tooling/tests although watch no longer uses traversal +/** Reset the traversal instrumentation counter back to 0. */ +export function __resetTraverseCount() { + __traverseCount = 0; +} + +/** + * Recursively touch (read) nested properties/entries/values of a reactive structure for dependency collection. + * Depth-limited; protects against cycles via `seen` set; respects ReactiveFlags.SKIP opt-out. + */ +export function traverse( + value: unknown, + depth: number = Infinity, + seen?: Set +): unknown { + __traverseCount++; + if (depth <= 0 || !isObject(value) || (value as any)[ReactiveFlags.SKIP]) { + return value; + } + + seen = seen || new Set(); + if (seen.has(value)) { + return value; + } + seen.add(value); + depth--; + if (isSignal(value)) { + traverse((value as any)(), depth, seen); + } else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + traverse(value[i], depth, seen); + } + } else if (isSet(value) || isMap(value)) { + value.forEach((v: any) => { + traverse(v, depth, seen); + }); + } else if (isPlainObject(value)) { + for (const key in value) { + traverse(value[key], depth, seen); + } + for (const key of Object.getOwnPropertySymbols(value)) { + if (Object.prototype.propertyIsEnumerable.call(value, key)) { + traverse(value[key as any], depth, seen); + } + } + } + return value; +} diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/src/watchEffect.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/src/watchEffect.ts new file mode 100644 index 0000000..3261fc2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/src/watchEffect.ts @@ -0,0 +1,32 @@ +import { effect as coreEffect } from "./core"; +/** Run a reactive function and re-run on its dependencies; supports cleanup. */ +export function watchEffect( + fn: (registerCleanup?: (cleanup: () => void) => void) => void +) { + let cleanup: (() => void) | undefined; + const registerCleanup = (cb: () => void) => { + cleanup = cb; + }; + const stop = coreEffect(() => { + if (cleanup) { + try { + cleanup(); + } catch { + /* ignore */ + } finally { + cleanup = undefined; + } + } + fn(registerCleanup); + }); + return () => { + if (cleanup) { + try { + cleanup(); + } catch { + /* ignore */ + } + } + stop(); + }; +} diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/tsconfig.json b/sdk/ng-sdk-js/ng-alien-deepsignals/tsconfig.json new file mode 100644 index 0000000..4c3cc80 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": [ + "ES2020" + ], + "skipLibCheck": true, + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": false, + "noEmit": true, + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + }, + "include": [ + "src" + ] +} diff --git a/sdk/ng-sdk-js/ng-alien-deepsignals/tsup.config.ts b/sdk/ng-sdk-js/ng-alien-deepsignals/tsup.config.ts new file mode 100644 index 0000000..ffb3961 --- /dev/null +++ b/sdk/ng-sdk-js/ng-alien-deepsignals/tsup.config.ts @@ -0,0 +1,14 @@ +import type { Options } from 'tsup' + +export const tsup: Options = { + entry: [ + 'src/index.ts', + ], + format: ['esm', 'cjs'], + dts: true, + splitting: true, + clean: true, + shims: false, + minify: false, + external: ['alien-signals'], +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/.eslintrc new file mode 100644 index 0000000..00f1888 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/.eslintrc @@ -0,0 +1,38 @@ +{ + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint", + "prettier", + "react" + ], + "extends": [ + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended", + "prettier", + "plugin:prettier/recommended" + ], + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true + } + }, + "settings": { + "react": { + "version": "detect" + } + }, + "rules": { + "no-unused-vars": "off", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "caughtErrorsIgnorePattern": "^_" + } + ] + } +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/.gitignore b/sdk/ng-sdk-js/ng-ldo-compact/.gitignore new file mode 100644 index 0000000..a981069 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/.gitignore @@ -0,0 +1,22 @@ +node_modules/ +lerna-debug.log +npm-debug.log +packages/*/dist +.idea + +.DS_Store +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +coverage/ + +docs/ + +.nx diff --git a/sdk/ng-sdk-js/ng-ldo-compact/.vscode/settings.json b/sdk/ng-sdk-js/ng-ldo-compact/.vscode/settings.json new file mode 100644 index 0000000..b212b7a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "typescript.preferences.importModuleSpecifierEnding": "js", + "javascript.preferences.importModuleSpecifierEnding": "js" +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/Readme.md b/sdk/ng-sdk-js/ng-ldo-compact/Readme.md new file mode 100644 index 0000000..c0135cf --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/Readme.md @@ -0,0 +1,30 @@ +# LDO Monorepo + +This is a monorepo that contains all libraries associated with Linked Data Objects (LDO). + +## Documentation +Full documentation can be found at [ldo.js.org](https://ldo.js.org). + +## Libraries +The LDO monorepo contains the following + - [@ldo/cli](./packages/cli/) + - [@ldo/dataset](./packages/dataset/) + - [@ldo/jsonld-dataset-proxy](./packages/jsonld-dataset-proxy/) + - [@ldo/ldo](./packages/ldo/) + - [@ldo/rdf-utils](./packages/rdf-utils/) + - [@ldo/schema-converter-shex](./packages/schema-converter-shex/) + - [@ldo/solid](./packages/solid/) + - [@ldo/solid-react](./packages/solid-react/) + - [@ldo/solid-type-index](./packages/solid-type-index/) + - [@ldo/subscribable-dataset](./packages/subscribable-dataset/) + - [@ldo/traverser-shexj](./packages/traverser-shexj/) + - [@ldo/type-traverser](./packages/type-traverser/) + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/jest.config.js b/sdk/ng-sdk-js/ng-ldo-compact/jest.config.js new file mode 100644 index 0000000..ca83cde --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/jest.config.js @@ -0,0 +1,30 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const path = require("path"); +const monorepoRoot = path.resolve(__dirname); + +module.exports = { + preset: "ts-jest/presets/js-with-ts", + testEnvironment: "node", + moduleNameMapper: { + "^(\\.{1,2}/.*)\\.js$": "$1", + "^@ldo/([^/]+)$": `${monorepoRoot}/packages/$1/src/index.ts`, + "^@ldo/([^/]+)/(.*)$": `${monorepoRoot}/packages/$1/$2`, + }, + coveragePathIgnorePatterns: [ + "/node_modules/", + "/dist/", + "/coverage/", + "/test/", + ], + transform: { + "^.+\\.ts$": [ + "ts-jest", + { + tsconfig: "/tsconfig.cjs.json", + }, + ], + }, + testPathIgnorePatterns: ["/node_modules/", "/dist/"], + transformIgnorePatterns: ["/node_modules/", "/dist/"], + modulePathIgnorePatterns: ["/dist/"], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/jest.esm.config.js b/sdk/ng-sdk-js/ng-ldo-compact/jest.esm.config.js new file mode 100644 index 0000000..496eeb8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/jest.esm.config.js @@ -0,0 +1,31 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +// jest.esm.config.js +const path = require("path"); +const monorepoRoot = path.resolve(__dirname); + +module.exports = { + preset: "ts-jest/presets/default-esm", + testEnvironment: "node", + extensionsToTreatAsEsm: [".ts"], + transform: { + "^.+\\.ts$": [ + "ts-jest", + { + useESM: true, + tsconfig: "/tsconfig.esm.json", + }, + ], + }, + moduleNameMapper: { + "^(\\.{1,2}/.*)\\.js$": "$1", + }, + transformIgnorePatterns: ["/node_modules/", "/dist/"], + modulePathIgnorePatterns: ["/dist/"], + testPathIgnorePatterns: ["/node_modules/", "/dist/"], + coveragePathIgnorePatterns: [ + "/node_modules/", + "/dist/", + "/coverage/", + "/test/", + ], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/lerna.json b/sdk/ng-sdk-js/ng-ldo-compact/lerna.json new file mode 100644 index 0000000..5575b7f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/lerna.json @@ -0,0 +1,4 @@ +{ + "$schema": "node_modules/lerna/schemas/lerna-schema.json", + "version": "1.0.0-alpha.33" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/package-lock.json b/sdk/ng-sdk-js/ng-ldo-compact/package-lock.json new file mode 100644 index 0000000..f4a56d7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/package-lock.json @@ -0,0 +1,48778 @@ +{ + "name": "root", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "root", + "workspaces": [ + "packages/*" + ], + "dependencies": { + "prettier-eslint": "^16.4.2" + }, + "devDependencies": { + "@babel/preset-env": "^7.26.9", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", + "@types/jest": "^27.5.2", + "@types/node": "^20.5.7", + "@typescript-eslint/eslint-plugin": "^6.5.0", + "@typescript-eslint/parser": "^6.5.0", + "@vitejs/plugin-react": "^4.4.1", + "@vitest/coverage-istanbul": "^3.2.3", + "eslint": "^8.48.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-react": "^7.33.2", + "jest": "^29.7.0", + "jsdom": "^26.1.0", + "lerna": "^7.2.0", + "prettier": "3.0.3", + "ts-jest": "^29.3.0", + "typescript": "^5.2.2", + "vitest": "^3.1.3" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.2.tgz", + "integrity": "sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.7.tgz", + "integrity": "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", + "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", + "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz", + "integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", + "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", + "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", + "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", + "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.1.tgz", + "integrity": "sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", + "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", + "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz", + "integrity": "sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.2.tgz", + "integrity": "sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", + "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz", + "integrity": "sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", + "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.27.1", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.27.1", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-classes": "^7.27.1", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.27.1", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@bergos/jsonparse": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@bergos/jsonparse/-/jsonparse-1.4.2.tgz", + "integrity": "sha512-qUt0QNJjvg4s1zk+AuLM6s/zcsQ8MvGn7+1f0vPuxvpCYa08YtTryuDInngbEyW5fNGGYe2znKt61RMGd5HnXg==", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@comunica/actor-abstract-mediatyped": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-2.10.0.tgz", + "integrity": "sha512-0o6WBujsMnIVcwvRJv6Nj+kKPLZzqBS3On48rm01Rh9T1/My0E/buJMXwgcARKCfMonc2mJ9zxpPCh5ilGEU2A==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0", + "@comunica/types": "^2.10.0" + } + }, + "node_modules/@comunica/actor-abstract-parse": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-2.10.0.tgz", + "integrity": "sha512-0puCWF+y24EDOOAUUVVbC+tOf4UV+LzEbqi8T5v25jcVGCXyTqfra+bDywfrcv3adrVp18jLCJ46ycaH5xhy9Q==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0", + "readable-stream": "^4.4.2" + } + }, + "node_modules/@comunica/actor-abstract-path": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-path/-/actor-abstract-path-4.3.0.tgz", + "integrity": "sha512-YESgq6YfNH93dLCBsEaqxhu8XFPEelp3tQay2y77d/cQr95e4+l89R9TXWjxb94L9q20CYFQsXmYM79A7FNcJA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "rdf-string": "^1.6.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-abstract-path/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-abstract-path/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-abstract-path/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-abstract-path/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-average": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-bindings-aggregator-factory-average/-/actor-bindings-aggregator-factory-average-4.2.0.tgz", + "integrity": "sha512-VXVPsfVB801cXFfAMwnURTsOFrPYUB1qxxQNen1rlV0DVAFJw4kbgmdJLbnmBOR8Job7jx0JqQh5hKvl6uJP9w==", + "license": "MIT", + "dependencies": { + "@comunica/bus-bindings-aggregator-factory": "^4.2.0", + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-average/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-average/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-average/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-average/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-count": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-bindings-aggregator-factory-count/-/actor-bindings-aggregator-factory-count-4.2.0.tgz", + "integrity": "sha512-wCo+ezCKYCDrzNwg07i9Z9xfBHHLKQLS10ImTEDMpjRNshR4GWgWB9saHQi2COEsBMTERBpEHADB4BZTx8FC6w==", + "license": "MIT", + "dependencies": { + "@comunica/bus-bindings-aggregator-factory": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@rdfjs/types": "*", + "sparqlalgebrajs": "^4.2.0" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-count/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-count/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-count/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-group-concat": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-bindings-aggregator-factory-group-concat/-/actor-bindings-aggregator-factory-group-concat-4.2.0.tgz", + "integrity": "sha512-Npn5Jco1vZLc5tmYe2eRgENEYFXdjuHrIjYagmA74wdw/cWUei74XE2zN1y2G4hW2DmvLVS9WXQ5ww9t0qxdzA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-bindings-aggregator-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-group-concat/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-group-concat/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-group-concat/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-group-concat/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-max": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-bindings-aggregator-factory-max/-/actor-bindings-aggregator-factory-max-4.2.0.tgz", + "integrity": "sha512-T5ApKSMavbKyALe4PadgBQSj4AE2fa0yk6+tUiKRFr0I5WqMyoj57x3SWasVtWXssk/LySyT+PNQzr5c4tlc9w==", + "license": "MIT", + "dependencies": { + "@comunica/bus-bindings-aggregator-factory": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-max/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-max/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-max/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-min": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-bindings-aggregator-factory-min/-/actor-bindings-aggregator-factory-min-4.2.0.tgz", + "integrity": "sha512-kUv1v0pqJrrrmOhx+SfLXMafreJAn48Phb5xcTT7UqyYTQO+WYGa3pXp2+P+9QfitreR4At58FNsv1lz5f9pAw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-bindings-aggregator-factory": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-min/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-min/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-min/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-sample": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-bindings-aggregator-factory-sample/-/actor-bindings-aggregator-factory-sample-4.2.0.tgz", + "integrity": "sha512-uV+3rrTfOAHricPHcuGPRVkufOfsBzQFM7Fa19/bmaZbWiouVS22bwAeQhQbUJXmQ4uU79kCD+eYXOKw689t/Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-bindings-aggregator-factory": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-sample/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-sample/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-sample/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-sum": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-bindings-aggregator-factory-sum/-/actor-bindings-aggregator-factory-sum-4.2.0.tgz", + "integrity": "sha512-Zh4Fr3IUiPFhr6cv/B49JBshOJHwEHZQ0qKsYN0ZTHc4YVA58/aveufhQX75Ijr/NU8wl9s7XRsy4/PZPk0SDA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-bindings-aggregator-factory": "^4.2.0", + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-sum/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-sum/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-sum/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-sum/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-wildcard-count": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-bindings-aggregator-factory-wildcard-count/-/actor-bindings-aggregator-factory-wildcard-count-4.2.0.tgz", + "integrity": "sha512-tBYD4aFjeqPMzYGnCdxngYh6Xwi7rbRE/60jTXy8O3TMiHjt2ogCDxF4qMlO6VJGWVb8Sg2ZTFciuNDwPR28HA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-bindings-aggregator-factory": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@rdfjs/types": "*", + "rdf-string": "^1.6.3" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-wildcard-count/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-wildcard-count/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-bindings-aggregator-factory-wildcard-count/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-context-preprocess-convert-shortcuts": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-context-preprocess-convert-shortcuts/-/actor-context-preprocess-convert-shortcuts-4.2.0.tgz", + "integrity": "sha512-M1ruybVTRaaRkLBKlCDyLYOvxeDvFTW28R2USnTxoqMSYEA8kt4Wl7WHq3CeswCQjJy09MzNFsMieUplJXcJsA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-context-preprocess": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-convert-shortcuts/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-convert-shortcuts/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-convert-shortcuts/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-context-preprocess-query-source-identify": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-context-preprocess-query-source-identify/-/actor-context-preprocess-query-source-identify-4.2.0.tgz", + "integrity": "sha512-5Y1FgCjDxuZVdaHFeBr71pIcDO++kIuHEiXqSi2JN4JjAv/if7Ds2Y7xkyU5c3Ql9Qh5G7rkFZ37jvpW+hiu/g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-context-preprocess": "^4.2.0", + "@comunica/bus-http-invalidate": "^4.2.0", + "@comunica/bus-query-source-identify": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "lru-cache": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-query-source-identify/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-query-source-identify/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-query-source-identify/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-query-source-identify/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-context-preprocess-query-source-skolemize": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-context-preprocess-query-source-skolemize/-/actor-context-preprocess-query-source-skolemize-4.2.0.tgz", + "integrity": "sha512-5QL1DI0vBeCRDJItM1LfM+vk1G2kUi1CpSb4uAwaa8o8hkwdExtWXguPp+w8GCk/h5ot4P23vgWgwZTZ3nwW2A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-context-preprocess": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-data-factory": "^4.0.1", + "@comunica/utils-metadata": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "rdf-terms": "^1.11.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-query-source-skolemize/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-query-source-skolemize/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-query-source-skolemize/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-query-source-skolemize/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-context-preprocess-set-defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-context-preprocess-set-defaults/-/actor-context-preprocess-set-defaults-4.2.0.tgz", + "integrity": "sha512-opUbREA93zVZc9OgPvWYQ3UGZy/WvS4d7bQ8FAcQxfv6zPR6UPC5gCC9/iPMa8f1zFSndj71vd+8AY8JqoB3lA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-context-preprocess": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-set-defaults/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-set-defaults/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-set-defaults/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-set-defaults/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-context-preprocess-source-to-destination": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-context-preprocess-source-to-destination/-/actor-context-preprocess-source-to-destination-4.2.0.tgz", + "integrity": "sha512-s3CkLRLQnHWRzZF44vsuRjxslcEK3hH4CnvkSv3SIrHFVuzIrbUFYDUBvuaFmQJFDLmFJEwk7G49MCWh1RmofQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-context-preprocess": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-source-to-destination/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-source-to-destination/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-source-to-destination/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-context-preprocess-source-to-destination/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-dereference-fallback": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-fallback/-/actor-dereference-fallback-2.10.0.tgz", + "integrity": "sha512-RSc/ScPdC7l13aZjz/6r4niWA8WDETbzuESQKKSWXi/HAlFOyOxdrDADdayVY2oyeZHIQibeNRtSi2ItzU7OPQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^2.10.0", + "@comunica/core": "^2.10.0" + } + }, + "node_modules/@comunica/actor-dereference-file": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-file/-/actor-dereference-file-2.10.0.tgz", + "integrity": "sha512-WXfAyHm0M3+YbYEtLtasT6YHsrzTAevmH27ex8r51qKNj2LK74llpw4mSeea3xyjQR30jVnKBIJSxuSbN64Now==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^2.10.0", + "@comunica/core": "^2.10.0" + } + }, + "node_modules/@comunica/actor-dereference-http": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-http/-/actor-dereference-http-2.10.2.tgz", + "integrity": "sha512-gdDo83W1TAgD2jx0kVbzZKzzt++L4Y4fbyTOH3duy6vx1EMGGZlNCp6I1uguepKEjNX4N0zhAcZzdJcv8A3XMA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^2.10.0", + "@comunica/bus-http": "^2.10.2", + "@comunica/core": "^2.10.0", + "cross-fetch": "^4.0.0", + "relative-to-absolute-iri": "^1.0.7", + "stream-to-string": "^1.2.0" + } + }, + "node_modules/@comunica/actor-dereference-http/node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/@comunica/actor-dereference-rdf-parse": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-rdf-parse/-/actor-dereference-rdf-parse-2.10.0.tgz", + "integrity": "sha512-ANWL6Bv+2WHUjVRS7hfkOfVBNJs8xYZ9KHlgBOQ94CKtQZB9uSMjdb1hLp/cQjiDmFIWLn0+GM5Xi0KFwBkVAw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^2.10.0", + "@comunica/bus-dereference-rdf": "^2.10.0", + "@comunica/bus-rdf-parse": "^2.10.0" + } + }, + "node_modules/@comunica/actor-expression-evaluator-factory-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-expression-evaluator-factory-default/-/actor-expression-evaluator-factory-default-4.2.0.tgz", + "integrity": "sha512-LrAySdpna3PdyW67emqIezNGIANsB5XDV38V8IeLiCiK5L1eIIZtk9izHSHhj/aEEWJSsLn7LTzBQcE8a8tjaw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-expression-evaluator-factory": "^4.2.0", + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "sparqlalgebrajs": "^4.3.7" + } + }, + "node_modules/@comunica/actor-expression-evaluator-factory-default/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-expression-evaluator-factory-default/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-expression-evaluator-factory-default/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-expression-evaluator-factory-default/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-expression-bnode": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-bnode/-/actor-function-factory-expression-bnode-4.2.0.tgz", + "integrity": "sha512-s67te7Rts2g+JBmWOcM6/leOg/UB4ilH6Pn0aVeDC3cILn0WuZkqOfMiVlkbvZ/D9sG7eKH/nyPqsoSylUq0HA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-data-factory": "^4.0.1", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-expression-bnode/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-bnode/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-bnode/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-bnode/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-expression-bound": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-bound/-/actor-function-factory-expression-bound-4.2.0.tgz", + "integrity": "sha512-SU5V0ndU921PjPyX5kUqt5/91ILD+vXz5f+DvkIC5iZqNuVZ0jbXGMAKxQ1Dcy78SN5ll4z0LOIwBx3SyD2ItQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-expression-bound/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-bound/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-bound/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-bound/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-expression-coalesce": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-coalesce/-/actor-function-factory-expression-coalesce-4.2.0.tgz", + "integrity": "sha512-c9t33f/EBfCK4361orkjEhWMEK/eUBkml6xts3eoV2B/aw6fmz2Kht4uve3GX+veTTs7vEW8IjeCmDANxvOvTA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-expression-concat": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-concat/-/actor-function-factory-expression-concat-4.2.0.tgz", + "integrity": "sha512-S+YtHwxnkwedZUE8MDcZYDYiuFCXmmaaWXZIfkbmkm2u5v0fv1NP1UMuEyoLHPHg+COZ4YUmn/dC+vx03fQI+A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-expression-concat/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-concat/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-concat/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-concat/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-expression-extensions": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-extensions/-/actor-function-factory-expression-extensions-4.2.0.tgz", + "integrity": "sha512-88n8WY2wqKKoCRknf/FFUkxBmpCDnG8e35czIIajwzSN4ks5Hiaf4A7m4dm/2ppoxevilz53SollC+Q4gA8iRA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "rdf-data-factory": "^1.1.2" + } + }, + "node_modules/@comunica/actor-function-factory-expression-extensions/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-extensions/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-extensions/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-extensions/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-expression-if": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-if/-/actor-function-factory-expression-if-4.2.0.tgz", + "integrity": "sha512-NjQXhjqJmq263NWy9CmcfiR9yU7mWBRmdFpoG0FjITEK/M0Naaw4uqoAc7XqT9/JLVamBGvPRcnLQbnRheL60g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-expression-if/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-if/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-expression-in": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-in/-/actor-function-factory-expression-in-4.2.0.tgz", + "integrity": "sha512-fcvuCduoXIR+tnfFLDoXhAmlVN2883F7cekVxae1uohDbhC0T+R34N/oipw7TlnYucNlFcG3anpOj1KyEgM6ng==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-expression-in/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-in/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-expression-logical-and": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-logical-and/-/actor-function-factory-expression-logical-and-4.2.0.tgz", + "integrity": "sha512-M18sNb0kDItuf6z8oOLESWenLXLeEuw8NU+H1LB9sFe5S/MWGbj+mKsKTM+4+TsfsUUBXPtdYz68P6QmZo/HTw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-expression-logical-and/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-logical-and/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-expression-logical-or": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-logical-or/-/actor-function-factory-expression-logical-or-4.2.0.tgz", + "integrity": "sha512-HrJJva+8MrC/2Ekj07whjDcDme3li9qo94eNWPt4T5QipgJjoetjcgKmbv8MZT8HnimaHE/Z/joJ0znGE1bLHw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-expression-logical-or/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-logical-or/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-expression-not-in": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-not-in/-/actor-function-factory-expression-not-in-4.2.0.tgz", + "integrity": "sha512-bQXdzZPo1GBIXr1mNY5Y2YDnf2WrVtO+wg0GvyoEJyMs0pLp+TLU5Sl9iDtbqZUsvl1Lqq1NVQS0c/O3IzambA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-expression-not-in/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-not-in/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-expression-same-term": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-expression-same-term/-/actor-function-factory-expression-same-term-4.2.0.tgz", + "integrity": "sha512-8anp3qVn/T1Z6p5XIM0kCR5OPhULkw4ebg8/MKWFmGABJ5CYIfRdzLAxqaFv0whOA6WI3fcriluRscG0YX5zIw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-expression-same-term/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-same-term/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-same-term/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-expression-same-term/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-abs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-abs/-/actor-function-factory-term-abs-4.2.0.tgz", + "integrity": "sha512-7VyPSyZ5MWkVlTwuGgp0pQhfVEFeneub7HCP2vLnjvSA4LVZiol98y/oC9p1Y1w8aSoIA4NbTGg4KVXaMPtmUg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-addition": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-addition/-/actor-function-factory-term-addition-4.2.0.tgz", + "integrity": "sha512-KpqP4AYg7NDRVRbSUvf7n2MOz7dcFwUtEAVaQpDJmcr7Rfy5eAxaFooozaL8MDFOtom/Ekwqafq7tsLe6EzwZQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "bignumber.js": "^9.1.2" + } + }, + "node_modules/@comunica/actor-function-factory-term-ceil": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-ceil/-/actor-function-factory-term-ceil-4.2.0.tgz", + "integrity": "sha512-+xiX6Qz9xP/WX+lBq5TSBHzx89gTeZq/uWdTN0V5q7DskPmpjScdobhtsCSENIB0NPPM+yiXo2TDXl+WdfQDww==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-contains": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-contains/-/actor-function-factory-term-contains-4.2.0.tgz", + "integrity": "sha512-t/OE6LJ7qFGd+Ptpe61VeLfa0rZcbj4RuwWQ5NV/FKIOyO+EOVvs3jSnsO2fxx+ecQlmXIoxqYKw28MIHmjMdA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-datatype": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-datatype/-/actor-function-factory-term-datatype-4.2.0.tgz", + "integrity": "sha512-Ilvh8RQcpUFoVHtiZBJfGkbcjw2c+SelG4phelKDaQJgdqQmJ1OguoQHXLatsUJMBwcrd6boSfqUt41Yiv18Ug==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-day": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-day/-/actor-function-factory-term-day-4.2.0.tgz", + "integrity": "sha512-V3Wd3l+/gHrmiu481MHzhpJ3Lztc3oY2/cr1wsZC0+dzvgf8ZGsZPH+DQy5IYHoX9puzUeIa7pU1bf6mXMVVcQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-division": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-division/-/actor-function-factory-term-division-4.2.0.tgz", + "integrity": "sha512-5RWmZmkxxuSz4M0h3GR9XoFSGizIMsXjrry/L0YFYh7HVy8MVyrY7I4SzajtpLwbxBWh+G4g43Uula1hKpGqSA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "bignumber.js": "^9.1.2" + } + }, + "node_modules/@comunica/actor-function-factory-term-encode-for-uri": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-encode-for-uri/-/actor-function-factory-term-encode-for-uri-4.2.0.tgz", + "integrity": "sha512-nZscihmc0w1N5kHr4TVy65gBZ/p9B6E3SZkOq7ynbZiJtcISYihYgGo7zH28eygT4XuIjnfWQrh24AcGrRYBLQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-equality": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-equality/-/actor-function-factory-term-equality-4.2.0.tgz", + "integrity": "sha512-+bMnfco/d6GnO2uQk1GVOM3CkSz+1kCWoI+bq7m6e99VilfshTSVQdH49el0ni7cmtQuoHjroXzLv0Ctis0Veg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-equality/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-equality/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-equality/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-equality/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-floor": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-floor/-/actor-function-factory-term-floor-4.2.0.tgz", + "integrity": "sha512-DcB/U9TWYYP5NXxANUexvbBgFFhvgOSg6s6lbph9RjizcRW2kLDBWGs/KLximidRm1DHrKey6z2m4k8oHH9P4g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-greater-than": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-greater-than/-/actor-function-factory-term-greater-than-4.2.0.tgz", + "integrity": "sha512-Hs/S6UyR9lUWl8+WhpEe3RwFnA2undypWyVcO7j5BJ0hsYN0KNdGDATMKmloiRXGpOyqfTF2n9+pQcjxzhDDcg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-greater-than-equal": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-greater-than-equal/-/actor-function-factory-term-greater-than-equal-4.2.0.tgz", + "integrity": "sha512-aNCSKytsQf6AaD6Rnbs1/DPJLvlvPnpUBim5R7dqOhqggmD5pclmAViKd7Oonq5elRck0/A8/+QRiH7KoYsj5g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-hours": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-hours/-/actor-function-factory-term-hours-4.2.0.tgz", + "integrity": "sha512-TYzhArFJV1vPItVIM1M2pOpkmyhjZLk5UzZX4VYtXpBCH/+YDIgrqxLOxOp1JnG1RlfBywk9hcV6jEo/rNHctw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-inequality": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-inequality/-/actor-function-factory-term-inequality-4.2.0.tgz", + "integrity": "sha512-Yl8nu6KiFQVPVszsm60BnWy0uLY0Tvmsl0hbCFP2q8Qrm7dLJSIakYCJy1VbQPGTQrXXEgVyrnjid2ZlzQFZJQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-iri": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-iri/-/actor-function-factory-term-iri-4.2.0.tgz", + "integrity": "sha512-HLtn1gOUXpfJcfsfrDw+UeEKNxyMSCosyug1bAbXDO6qtG0BcM6xYHkg65m8dNEa0qm7jljHnrF0EH8Gu0QlOg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "relative-to-absolute-iri": "^1.0.7" + } + }, + "node_modules/@comunica/actor-function-factory-term-iri/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-iri/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-iri/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-iri/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-is-blank": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-is-blank/-/actor-function-factory-term-is-blank-4.2.0.tgz", + "integrity": "sha512-GVaCnhIHlIBBYKR7kewBUHf7fYmErX5FyTmikp9F1YhfXlL511jmLYbcENu9zSos8QWbqcFGiQ8wzBB+cJdhEg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-is-iri": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-is-iri/-/actor-function-factory-term-is-iri-4.2.0.tgz", + "integrity": "sha512-xob3nm4z9EmvA7JR0jvf8OVTmx/P1ErOgQGH7y81awzeSjT6eQ4Y3o2e1nSbecfoaiVqObBRpEiD+E9L2H9vUw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-is-literal": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-is-literal/-/actor-function-factory-term-is-literal-4.2.0.tgz", + "integrity": "sha512-tZxbZm+3rtGanvb6HekWiMRvkKzDndUvRAPOqXt1ht3SD0fhfHRU8yyGbUaIulvSpPkDxJAYWjiMHdxE0jlhyw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-is-numeric": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-is-numeric/-/actor-function-factory-term-is-numeric-4.2.0.tgz", + "integrity": "sha512-7UumdEXwqstImhsF10K6EBxUyNf/MQ/DJQL2246lu3ZsBDL+pwUjFOEXpEjZtbvi50210NxESZXyuB2LvuBdTw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-is-triple": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-is-triple/-/actor-function-factory-term-is-triple-4.2.0.tgz", + "integrity": "sha512-fG8wf+ZyOux18/eDncfrNDuYO4b0dAZ8SloG0Yo1X82JrZspMCkknJbFmwxp7S9GJFl/wFFxwa5d//ycEs1VvQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-lang": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-lang/-/actor-function-factory-term-lang-4.2.0.tgz", + "integrity": "sha512-+MzyAmSHCeMEqhP6w7NWlZo7FOcHbEkVPFzBAzX1fS9hJOAKSiioKPIo5ubC8jK0vVOsWLSG0xhrRfDWwOtX2g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-langmatches": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-langmatches/-/actor-function-factory-term-langmatches-4.2.0.tgz", + "integrity": "sha512-TtABO+iJWf1lnyEayumxAFiczmI888lhpk6k20VjEHOgCkjBDEz/6tbQiIiIWtcnC0N63TNoz0O43GmXDwv4zQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-lcase": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-lcase/-/actor-function-factory-term-lcase-4.2.0.tgz", + "integrity": "sha512-wzL8z/m7/gBGY/vMXPj0gfy3g6DtiIgHLY67V0FDPe80qyYqzSE2hmbcEziANTnev9WtoG1B+JVv7u+pDEGCdw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-lesser-than": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-lesser-than/-/actor-function-factory-term-lesser-than-4.2.0.tgz", + "integrity": "sha512-cIGAJgSTZX1DsAWO/Y+SsyeDEfA9rDN/eXk/PELyaicTJCfRS4Dqji+s8QHBkQLDs9Fhbh7/zLS4g0gCw9IHtQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-lesser-than-equal": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-lesser-than-equal/-/actor-function-factory-term-lesser-than-equal-4.2.0.tgz", + "integrity": "sha512-I5zylRT2AIghY71BkTQk2PY7eYRfaPSnB+oPz6Xm5bOS7/HbCYraaayXfUVBxSg+VgBo/3ECNKgycKsxcjy2lg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-lesser-than/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-lesser-than/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-lesser-than/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-lesser-than/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-md5": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-md5/-/actor-function-factory-term-md5-4.2.0.tgz", + "integrity": "sha512-s8DODZorW82KE+7nXrmROtk1UB5TjD9gtaz5wfNTUGUy8XgNLx11L31w6PWjzP2Sj8nRzQWgYjzyfupriGSXBQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@types/spark-md5": "^3.0.1", + "spark-md5": "^3.0.1" + } + }, + "node_modules/@comunica/actor-function-factory-term-minutes": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-minutes/-/actor-function-factory-term-minutes-4.2.0.tgz", + "integrity": "sha512-q3wZPiblx/V2yvX6joz7kxiwi7fac09cFeX1UuQnGLZPWkUBs1TScznWpp0SS3FpRJ/OYPoRRppAvphqg5rKeQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-month": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-month/-/actor-function-factory-term-month-4.2.0.tgz", + "integrity": "sha512-yknO7g8x/M3ICf5wH3+PsFom94GlQacGfmoctJNVVwtTwJ61UWwZ7ytNvQjKII2W1afUUGQThnnE7/kF8aIVWg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-multiplication": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-multiplication/-/actor-function-factory-term-multiplication-4.2.0.tgz", + "integrity": "sha512-LyB+ZiLelY8GCMwXsb6Y/+iWbJiJpqnuGYQ18kCTLhj9Hi2pELvjhQGmov2BGQHBkEWskzEFhZjxzqExsr5M4g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "bignumber.js": "^9.1.2" + } + }, + "node_modules/@comunica/actor-function-factory-term-not": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-not/-/actor-function-factory-term-not-4.2.0.tgz", + "integrity": "sha512-yJg6h2ZrzWXDNiNHIx7TM71MZufywRcVS6HVqi6KvFTQdWQNbgSXic3Eq81KTCk2stB5P6EkeTXQ8r4caf2tMA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-now": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-now/-/actor-function-factory-term-now-4.2.0.tgz", + "integrity": "sha512-cpcQuxNfpuRF1yYNtbGeyE4wjCtSkQ5H1PZK/DeP3NhxQquaNaOhPx9xd6yHr3VPD9S/0wrksPhH04YKn/rYFg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-now/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-now/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-now/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-now/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-object": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-object/-/actor-function-factory-term-object-4.2.0.tgz", + "integrity": "sha512-iohcDBOicSbyHeJxWYBXdQ4Qu7mT8cZgNfxS5q74MIGJsY6JJtEgar4A6USP4XhmoTNMOryouDgpGHkgOG3LWA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-predicate": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-predicate/-/actor-function-factory-term-predicate-4.2.0.tgz", + "integrity": "sha512-slvANEpFtjuM7d3okf+ooewth4PqmGTLMgOEhmhAkbOZ3z5IiVB0VRwk0puSUje34A7hTW7w72aISfeIcrbYgg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-rand": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-rand/-/actor-function-factory-term-rand-4.2.0.tgz", + "integrity": "sha512-b+KJ+1UOHHDQJQXJFKOeCaqc6xDM1XB1RACsnIFYUeRX/5t2TQhQNSgU5dD7+GmGdL8F8gKVZkqyEXfhlsiJSg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-regex": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-regex/-/actor-function-factory-term-regex-4.2.0.tgz", + "integrity": "sha512-yI3sw9SSHnx6JMnKuGrZJ3XY6mljgUpYNJ9g5yVBk2wXdgR+VxvVy02cV8b7KlucdKgGiHnrD/RQRFPVp2d3Aw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-replace": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-replace/-/actor-function-factory-term-replace-4.2.0.tgz", + "integrity": "sha512-p9PSjEh/NudqHZF8oIibwqcMOHDUiY6joAihOM2z0F0gdGp3o1GhfRYG51+KCF5ggcWd2lByuHteMUc5mE52rQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-function-factory-term-regex": "^4.2.0", + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-round": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-round/-/actor-function-factory-term-round-4.2.0.tgz", + "integrity": "sha512-H86Go+WYnix3tMO511I2E5vY8VuoFkAm1G8ztBRU1vmEE8CKO2YINQ6xfA0fNpKpf8UVqI1nu3nRQ+02jUdxWg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-seconds": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-seconds/-/actor-function-factory-term-seconds-4.2.0.tgz", + "integrity": "sha512-xHIlexdhabYlCZXHd18hWpLTSOIQqmRSGNQGn8ZQ78sstn+xFMULX0fo1XAsy578VJxrRlnn08Hl81sdoRfGHA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-sha1": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-sha1/-/actor-function-factory-term-sha1-4.2.0.tgz", + "integrity": "sha512-Xc1S8NPlMO+c/kKZvbdt1uTOC/kOfAbfnkAg8Aj4jJrdRO0DZVeMiwOM+V2/vLyazDdvFXpVSGSixR4CbfUadw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "hash.js": "^1.1.7" + } + }, + "node_modules/@comunica/actor-function-factory-term-sha256": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-sha256/-/actor-function-factory-term-sha256-4.2.0.tgz", + "integrity": "sha512-z3yVvZh7G8/yzx6gV8RhrCJjLwmnAjkGe+gkqzTN/Ld2G1oMh1/Mla1GFTBUHjiAZRubFT+OxyGU3Erj9QeRjA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "hash.js": "^1.1.7" + } + }, + "node_modules/@comunica/actor-function-factory-term-sha384": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-sha384/-/actor-function-factory-term-sha384-4.2.0.tgz", + "integrity": "sha512-eWQOyulKRYIgEuWfZhPNMieH7kVsTmrIAk7s4oylJXtu9Y8CpC09zkj0TT4KRL2ns9Nqosf7EuE/E3C2VjeovA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "hash.js": "^1.1.7" + } + }, + "node_modules/@comunica/actor-function-factory-term-sha512": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-sha512/-/actor-function-factory-term-sha512-4.2.0.tgz", + "integrity": "sha512-Ifn1ABCPzFUGAbVjin6gihISrdL1xHSPz877jxFfh49WsnRkAzD22j+yAxS/nncnMzWErDmZJL+fZsbJkbDMGg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "hash.js": "^1.1.7" + } + }, + "node_modules/@comunica/actor-function-factory-term-str": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-str/-/actor-function-factory-term-str-4.2.0.tgz", + "integrity": "sha512-5cCYssXLuV7V6wCRXxJSTpvWm/EWKK47PV+r8XCH7XsrMY50G5lQYEj9u8dHuXMg6An5vUvJFCJJ4S2vd9T4dQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-after": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-str-after/-/actor-function-factory-term-str-after-4.2.0.tgz", + "integrity": "sha512-uiliB9CAp2kXqft7RKRCtO3HAY/0m4LTw+qKMwue4ncPfv2X13KOT9xVFI0OGQb/Zxo/KwaGu9hA/kSx+2L9og==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-before": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-str-before/-/actor-function-factory-term-str-before-4.2.0.tgz", + "integrity": "sha512-6GDhOUjOuBONP1VHC3xvgpOfiyMZE93ZEWmQQToQkt+HNsRybZkcUJvpjGnib0jqsjSBoegrDdjMuIh/SZUw3A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-dt": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-str-dt/-/actor-function-factory-term-str-dt-4.2.0.tgz", + "integrity": "sha512-5R9XNitKgqkhIMQk8MOx8c0xoDD0BCKA9tcqcqWmb/lMD6O026tjPVc90yX663AywyL1mJFZKN5U2MgalwaChg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-dt/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-dt/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-dt/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-dt/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-str-ends": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-str-ends/-/actor-function-factory-term-str-ends-4.2.0.tgz", + "integrity": "sha512-TVVpk0legazg8gNu9rQESmisCFI9VYiEmB7mERnxDXz5kveJ8TLVzkure4BxYVfIqn7dD+MI+/Gnzu9OIAG6Qg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-lang": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-str-lang/-/actor-function-factory-term-str-lang-4.2.0.tgz", + "integrity": "sha512-CX97EePbPS3BET+BAQ+heSoG3IA+KvW9d4KAn39wegCDwPCKkXTJH4hXLZo+fj1x+8Z5+kS9NbnKltQJj5z+lA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-len": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-str-len/-/actor-function-factory-term-str-len-4.2.0.tgz", + "integrity": "sha512-qC33nL8oeL8Zj4Auw+JIeLJkanqqYp6S/bD0V+NTcrEDg/+qha8zMqpYpdUkJu3LKJxQmPr+ytj/Fn/CuKBFnQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-starts": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-str-starts/-/actor-function-factory-term-str-starts-4.2.0.tgz", + "integrity": "sha512-eRGaWPJk4ZKrZzvPfmPjqQM8aI5XXZu943ETHXXySJfZHxaiklDZPvA8OU6M2PFYXMp0KAeHnoMoyXwMAXqR4Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-str-uuid": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-str-uuid/-/actor-function-factory-term-str-uuid-4.2.0.tgz", + "integrity": "sha512-kk3xyvmmZx/HP9Hdve0MrfuJedg97el/7DLtsfWhF3NzLzdbzZ+aH3bGDIOR8uSDniyBhqkTbeoCTgxfEwsdOg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@types/uuid": "^10.0.0", + "uuid": "^11.0.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-sub-str": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-sub-str/-/actor-function-factory-term-sub-str-4.2.0.tgz", + "integrity": "sha512-no0YtISt8oXJo7DaMJ4GR9VW2t82u8Gn0Jw+yKHspL2Up8nK0WRRDPxeRhX6pAKflb/Qa/HFI27pSWbCavPs2g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-subject": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-subject/-/actor-function-factory-term-subject-4.2.0.tgz", + "integrity": "sha512-bkUyFKy2bunW7geVLroKtI9CudffF723hiZB8MCCopCcHLp75Q8MjxOzrxas+LJgP9KN0EllVUgPMhGUJm80fA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-subtraction": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-subtraction/-/actor-function-factory-term-subtraction-4.2.0.tgz", + "integrity": "sha512-ixb2uG5bORM8gU7j7mcEWwIiNHjHpgkQzjq4LgtlNBh5Fndsz+200jmJyocRnGonz1Sc1BR39IvrbDB/doJCsw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "bignumber.js": "^9.1.2" + } + }, + "node_modules/@comunica/actor-function-factory-term-subtraction/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-subtraction/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-subtraction/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-subtraction/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-timezone": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-timezone/-/actor-function-factory-term-timezone-4.2.0.tgz", + "integrity": "sha512-FG/4XE8i0MPKfuiVfB/08ty4X3LDx+9NSjySP1DKDW5YDNe7HGoUC2OZ0kPuyi9QZENLwV0+2tKrgUK4Hnbu8w==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-timezone/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-timezone/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-triple": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-triple/-/actor-function-factory-term-triple-4.2.0.tgz", + "integrity": "sha512-x5IT84sMKK2SGy2hAqMZN04EPP/lzeshEkFR+zYju308A5sCSk23GEnoR3YCtDwtC7HLxgQQIUCiWttgwGPPUQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-tz": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-tz/-/actor-function-factory-term-tz-4.2.0.tgz", + "integrity": "sha512-CkfWt8pfQ5Qq/LLfor+dn0IfCFpcNfNF/FWDjJaUYsIyqRJvHeqFRTtZNPSCt3xnUskn1WCm99Se7Wi6gckeww==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-ucase": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-ucase/-/actor-function-factory-term-ucase-4.2.0.tgz", + "integrity": "sha512-pBm0gs/PxHrT9joFLsv6C6I/AktEOvAJvvD2XBa4zVE39eNaatouAxzT3xyGVx8mNn3BbjKNA3rBHsnffIRHuA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-unary-minus": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-unary-minus/-/actor-function-factory-term-unary-minus-4.2.0.tgz", + "integrity": "sha512-SAQRAKFXLf3qcCy0bGx6pTncB18PmQtNWU6UPxejsSXhI+yKD/z/4jvSxLFPVrhnveVv0yClC+zw/okc0aM8lg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-unary-plus": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-unary-plus/-/actor-function-factory-term-unary-plus-4.2.0.tgz", + "integrity": "sha512-srkypDUAtIuux/ePalBzoSYnnCGz8Se83bzaurDsUWix336/4E7kkCXnW3EulVDCY1h9oytcSzBFlxLdJm+IwA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-uuid": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-uuid/-/actor-function-factory-term-uuid-4.2.0.tgz", + "integrity": "sha512-YWIHuRqVR3uCfaEVPiPWpTJ5cgeU5Gorj/YVsDbwW6Q3soSF7Haet4FbkLzRFmcR8py2Hv4MwLEx/693Csm7Pw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@types/uuid": "^10.0.0", + "uuid": "^11.0.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-boolean": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-boolean/-/actor-function-factory-term-xsd-to-boolean-4.2.0.tgz", + "integrity": "sha512-Gs/vX1eol7kE1hWst/alPovrA0Nash6nUwq0Z/no83mxIHE9upG9jTgGCymJh6VlaYdzcugh1XuDOjqo3+HL6A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-boolean/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-boolean/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-date": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-date/-/actor-function-factory-term-xsd-to-date-4.2.0.tgz", + "integrity": "sha512-ujnLgY+c6jwDHaJsfhQNAXGh28i8eYTsrDsRnvu+oO3fCw04WPhmJh+mQpRjtxIUvDRNXVlvMgvEbCqjyjl6fA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-datetime": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-datetime/-/actor-function-factory-term-xsd-to-datetime-4.2.0.tgz", + "integrity": "sha512-bfvjIP2HanUBJvNIioLVDU21AXWhxWv0BqdWkxCPQ/cTlX9GQ7NJBIrIuKQ/HoJG3RkbSRXwh0FziB9FTjaAvw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-datetime/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-datetime/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-day-time-duration": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-day-time-duration/-/actor-function-factory-term-xsd-to-day-time-duration-4.2.0.tgz", + "integrity": "sha512-n66L7DkLDTUbVWT1ad9FM+llHuhT35Ypc9/3lgJcAZRT9EOfGkBH2t/4K8250NwSTKa+Z0lUC4kD6hdhKN4Nzw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-day-time-duration/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-day-time-duration/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-decimal": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-decimal/-/actor-function-factory-term-xsd-to-decimal-4.2.0.tgz", + "integrity": "sha512-i2rKCbn27NFJJbQ44N0WEWQX8I5IfyG4gELu1ZkFhefEst8gXs79Mm6BiVIJv0gWHSeCcsO1hBKuOiUvXDZl9g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-double": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-double/-/actor-function-factory-term-xsd-to-double-4.2.0.tgz", + "integrity": "sha512-rqLUOQgW36e4Brr7ZWW59m16ERCr28UOiNX6gxatoT8TICO6gKZvxgsxB+cZPEpCrLYmlpxdbwoH4Qkd7Tu5WA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-duration": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-duration/-/actor-function-factory-term-xsd-to-duration-4.2.0.tgz", + "integrity": "sha512-aarePSIbPwA5Ei93dAM0kowKxnvaSd5FdaZIqI6gAZMmo/nXOM8yrxWq0yhkgBtrfgXU4Aiph8w9aKIG8tZwcg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-duration/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-duration/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-float": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-float/-/actor-function-factory-term-xsd-to-float-4.2.0.tgz", + "integrity": "sha512-d+Kz4BZ3aVRCtRW5ubF+CAwNiub6UsEHeIIi0ck0YVUvHKn2lf8QP5WaeLhzrFlv/Bebal9mYQRrVsp0k3Cy1g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-integer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-integer/-/actor-function-factory-term-xsd-to-integer-4.2.0.tgz", + "integrity": "sha512-+iKBKVZNrsTVpD9KnoSlGA2h+GswWfTCaAFbhr0dgqNMHWSv7wBkZSUFGFzZ7Bpf4+bvRkfawDPT7xyUR3/kIw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-string": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-string/-/actor-function-factory-term-xsd-to-string-4.2.0.tgz", + "integrity": "sha512-HKIvv3fZUtRR3z9Xqlu1pxxcVhopLNgwNH7cgKG8zdvFrQ2VJYToz1FvU9kCM2lq1TYLMOykj9rd1JTtKSbn5A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-time": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-time/-/actor-function-factory-term-xsd-to-time-4.2.0.tgz", + "integrity": "sha512-AOW8thLYfdqu9cQh17Bivg5ewriB9fyxaumtX5hON3ZedzcqAOTZMPf/x3DC4WkRfd3WkoYnT9S9AZG+Bn9XAg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-time/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-time/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-year-month-duration": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-xsd-to-year-month-duration/-/actor-function-factory-term-xsd-to-year-month-duration-4.2.0.tgz", + "integrity": "sha512-l20dDlL0VbUpDoSQdU47CYKLP5MdFWqh3ULkD0VR4eDqwSSclL31JR0scplbrWcda5jRGhGhBp01YQ13tyVfXw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-year-month-duration/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-function-factory-term-xsd-to-year-month-duration/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-function-factory-term-year": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-function-factory-term-year/-/actor-function-factory-term-year-4.2.0.tgz", + "integrity": "sha512-Wfk3uKc+SnQEi3yjBFYeogQxBsojFAC4Ogwg2gjq5DI29nXiYWV3356tCHpscgUUfjo3nh2F8PecUBDCGmTOXw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0" + } + }, + "node_modules/@comunica/actor-hash-bindings-murmur": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-hash-bindings-murmur/-/actor-hash-bindings-murmur-4.2.0.tgz", + "integrity": "sha512-gEip+3zcO6NKgf0N9ti+Lx+a9CYsWQ4gNZX22GvFSRtMroqlF915Q0nkqUjOc1XHZN7OwAbYUF8Ioxwz9gEJxw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-hash-bindings": "^4.2.0", + "@comunica/core": "^4.2.0", + "@types/imurmurhash": "^0.1.4", + "imurmurhash": "^0.1.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-hash-bindings-murmur/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-hash-bindings-murmur/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-hash-bindings-murmur/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-hash-quads-murmur": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-hash-quads-murmur/-/actor-hash-quads-murmur-4.2.0.tgz", + "integrity": "sha512-kv+hAro+VPtWp+HhT0IBRL1qAQtC7xZ78wzKiarjrOOMpfoXtvBZ4LvW4N+A8toUGALoSkAqDP1U3he+Lo7ouA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-hash-quads": "^4.2.0", + "@comunica/core": "^4.2.0", + "@types/imurmurhash": "^0.1.4", + "imurmurhash": "^0.1.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-hash-quads-murmur/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-hash-quads-murmur/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-hash-quads-murmur/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-http-fetch": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-fetch/-/actor-http-fetch-2.10.2.tgz", + "integrity": "sha512-siHGx0TMVNb2gXvOroq0B3JE6uuS+4s+MsDkntqdBNVigwVYqLpNSKEaL5is8pputFfohJfDQY06lAHbfDNEcw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^2.10.2", + "@comunica/context-entries": "^2.10.0", + "@comunica/mediatortype-time": "^2.10.0", + "abort-controller": "^3.0.0", + "cross-fetch": "^4.0.0" + } + }, + "node_modules/@comunica/actor-http-fetch/node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/@comunica/actor-http-limit-rate": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-limit-rate/-/actor-http-limit-rate-4.2.0.tgz", + "integrity": "sha512-f24M8kDXK5BVWpqQ7zEmaMa6eww8Mixmnu8aAsNA6fUCItNSZPSNwpNdbpjzNDOhrsjHKUGPN6EZr6dQUr7HHg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-http-invalidate": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0" + } + }, + "node_modules/@comunica/actor-http-limit-rate/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-limit-rate/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-limit-rate/node_modules/@comunica/mediatortype-time": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-4.2.0.tgz", + "integrity": "sha512-t/IVwZPeb4hijIjdQKl/BS14HR7PXDgiv2Djq1f42596mluPjDemUG3suxx8VxBCGhG6Jckupg/WvvLYdW585w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-limit-rate/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-limit-rate/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-http-proxy": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-proxy/-/actor-http-proxy-2.10.2.tgz", + "integrity": "sha512-3yUF8BCh4nwq8J6NRILEsyNrQNStkE9ggJ7hYwRfA1XcMgz1pANNaWJ2P2TEKH1jNinr23bL3JeuUZCm9Kz9dA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^2.10.2", + "@comunica/context-entries": "^2.10.0", + "@comunica/mediatortype-time": "^2.10.0", + "@comunica/types": "^2.10.0" + } + }, + "node_modules/@comunica/actor-http-retry": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-retry/-/actor-http-retry-4.2.0.tgz", + "integrity": "sha512-sgGlGhOmDEn9GMPLubn+BtCRWc/6fxDCWk4fMFhL5iCdQ9vJHGek6qh5ZapjRYdzUUlEMC7pzMYx07dBrU9pmQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-http-invalidate": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0" + } + }, + "node_modules/@comunica/actor-http-retry/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-retry/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-retry/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-retry/node_modules/@comunica/mediatortype-time": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-4.2.0.tgz", + "integrity": "sha512-t/IVwZPeb4hijIjdQKl/BS14HR7PXDgiv2Djq1f42596mluPjDemUG3suxx8VxBCGhG6Jckupg/WvvLYdW585w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-retry/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-retry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-http-wayback": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-wayback/-/actor-http-wayback-4.2.0.tgz", + "integrity": "sha512-NBVaeW9dSUXiHIjrV/Kxd0j7KOwopMA4cF1+JpTH1oK4lYZo6UVk3RP0tKpPwo1SIfH6jo+6fpbC9uvkDfcIxA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-wayback/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-wayback/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-wayback/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-wayback/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-http-wayback/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-init-query": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-init-query/-/actor-init-query-4.3.0.tgz", + "integrity": "sha512-Owzar4cwV3FLZGaeyIEItZNHOjgtRtiFcDjnvVWiFmsHTccgAxzBmfJ5Tecw28bCcH6XfT6FE30pLScTOkYM7g==", + "license": "MIT", + "dependencies": { + "@comunica/actor-http-proxy": "^4.2.0", + "@comunica/bus-http-invalidate": "^4.2.0", + "@comunica/bus-init": "^4.2.0", + "@comunica/bus-query-process": "^4.2.0", + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/logger-pretty": "^4.2.0", + "@comunica/runner": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "negotiate": "^1.0.1", + "rdf-quad": "^1.5.0", + "readable-stream": "^4.5.2", + "yargs": "^17.7.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + }, + "optionalDependencies": { + "process": "^0.11.10" + } + }, + "node_modules/@comunica/actor-init-query/node_modules/@comunica/actor-http-proxy": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-proxy/-/actor-http-proxy-4.2.0.tgz", + "integrity": "sha512-aKJEv7mkMJiMJRTxsqPyUfjczoKDT9u/0wIWzSdW215hdW5ITAla08fD+/yIqKAD/Nz9bdZo3CSLwIMrtENmEQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-init-query/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-init-query/node_modules/@comunica/bus-init": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-4.2.0.tgz", + "integrity": "sha512-AxX9fOI0xKjed4nbxz5ADLb5ILbBJPkvDuehvKOtK5i2fto+cUDg3V4QUVJEdSrCoreSwdSzmygG93NBOkqHrg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-init-query/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-init-query/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-init-query/node_modules/@comunica/mediatortype-time": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-4.2.0.tgz", + "integrity": "sha512-t/IVwZPeb4hijIjdQKl/BS14HR7PXDgiv2Djq1f42596mluPjDemUG3suxx8VxBCGhG6Jckupg/WvvLYdW585w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-init-query/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-init-query/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-assign-sources-exhaustive": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-assign-sources-exhaustive/-/actor-optimize-query-operation-assign-sources-exhaustive-4.2.0.tgz", + "integrity": "sha512-vaUqWbkQkYX2h66SSqr8wtJ++qdvP7OSLS1JN4J+6C/Q/YxrkvWWEbvOMrwziZ0xhsVBwDWLhb0VH+qN1shmMA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-assign-sources-exhaustive/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-assign-sources-exhaustive/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-assign-sources-exhaustive/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-assign-sources-exhaustive/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-bgp-to-join": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-bgp-to-join/-/actor-optimize-query-operation-bgp-to-join-4.2.0.tgz", + "integrity": "sha512-Up+9nLzFmEynCr6jlglhd36plEA5nL/oLOVyIgiYrn66Vav/Hcago8rYI39yhOKEEJgOhEOfcfeBT1zUzwQ8hQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-bgp-to-join/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-bgp-to-join/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-bgp-to-join/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-bgp-to-join/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-construct-distinct": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-construct-distinct/-/actor-optimize-query-operation-construct-distinct-4.2.0.tgz", + "integrity": "sha512-60yaqok3WcLEtW0Z0JKZe1yqQWUl48IXNlusBWT3FizdKNYmk49dxVSRcqLThzVNog0zyxFh8N33CYef4ivdwg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-construct-distinct/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-construct-distinct/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-construct-distinct/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-construct-distinct/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-describe-to-constructs-subject": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-describe-to-constructs-subject/-/actor-optimize-query-operation-describe-to-constructs-subject-4.2.0.tgz", + "integrity": "sha512-PGrxXovxydcVc1ZgK9i98IOLRH2+wXNlWDYAy9HeqtkPZwoAB66D413fCNBa+PkeB8wMudBmKuJpGpWi1kYidA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-describe-to-constructs-subject/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-describe-to-constructs-subject/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-describe-to-constructs-subject/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-describe-to-constructs-subject/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-filter-pushdown": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-filter-pushdown/-/actor-optimize-query-operation-filter-pushdown-4.2.0.tgz", + "integrity": "sha512-FQqWSl24B0yrw7fqufLNXXGLND3Ags0bsn5qDfhI970TlZjg6ZMNM8LwxxCc97qjyHcD+s1BA7IVQghu4dbALg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "rdf-terms": "^1.11.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-filter-pushdown/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-filter-pushdown/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-filter-pushdown/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-filter-pushdown/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-group-sources": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-group-sources/-/actor-optimize-query-operation-group-sources-4.2.0.tgz", + "integrity": "sha512-a8rBZrlCOhuS8p4LEzgZaGEnmHWkGORAQWUxVurgoQv1tdmSfYVx9tnkk0MSPFt9psBAcSizs7IcZbZTkABZpw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-group-sources/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-group-sources/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-group-sources/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-group-sources/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-join-bgp": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-join-bgp/-/actor-optimize-query-operation-join-bgp-4.2.0.tgz", + "integrity": "sha512-NU6dmRJh48vPMcNF2gtp2iGQexHD3VmOITti3M+SfHdmLrsDKH15aMoKboISPvM0X5ZJxSuaZvOB/detmqrucw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-join-bgp/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-join-bgp/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-join-bgp/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-join-bgp/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-join-connected": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-join-connected/-/actor-optimize-query-operation-join-connected-4.2.0.tgz", + "integrity": "sha512-/CmLxByNqOlI4bFmaLMicNDtwX4p3zVgzPm5zOVgs2XygRqWqZTBWKUwxWAocMb8fDQsVYhgZGZ/NVVAEvolAQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-join-connected/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-join-connected/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-join-connected/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-join-connected/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-prune-empty-source-operations": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-prune-empty-source-operations/-/actor-optimize-query-operation-prune-empty-source-operations-4.2.0.tgz", + "integrity": "sha512-UvFIZCqQRAFtkMPvlKhZMwGAPSKoxh4+AFqzJVjwGg56HQCWMfvW4WKCqUJaDcmNzCrYRSZThzhNwQNvqS6+AA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-prune-empty-source-operations/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-prune-empty-source-operations/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-prune-empty-source-operations/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-prune-empty-source-operations/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-add": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-rewrite-add/-/actor-optimize-query-operation-rewrite-add-4.2.0.tgz", + "integrity": "sha512-EdRtrH4A6owpQnabonKSQ2B4OiteUJM45iX5vJ/8lQQxr4Z1JJqZ8ub1m7oKXZG8SaH/qKSVNsVudaEfMeATuQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-add/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-add/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-add/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-add/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-copy": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-rewrite-copy/-/actor-optimize-query-operation-rewrite-copy-4.2.0.tgz", + "integrity": "sha512-O8gpFC5GiW2L/iVtK/XGh//KT/A7xx9FKbMsN6ICyNSzG1fNrHa2+fxg4PTuhA6DVRr1WZzUHlqmO3CEF0Nt3A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-copy/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-copy/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-copy/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-copy/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-move": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-rewrite-move/-/actor-optimize-query-operation-rewrite-move-4.2.0.tgz", + "integrity": "sha512-L6DgmdDTXTewnEX1yDuxlW/4wTA80AhXMI7JfEBqQSKnjGyZLNswPHkUf8lt1muDN/7Y/qICuCBKvJW8HBxQjg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-move/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-move/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-move/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-optimize-query-operation-rewrite-move/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-ask": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-ask/-/actor-query-operation-ask-4.2.0.tgz", + "integrity": "sha512-hBf+LRjK8+LZ+ZREbM30XcN/M6wibBF5C7pNyh/piIuQknYaB2rbsr4N5ALXYPmOWfj2jDKT7r+wtZcR0QWTIw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-ask/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-ask/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-ask/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-bgp-join": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-bgp-join/-/actor-query-operation-bgp-join-4.2.0.tgz", + "integrity": "sha512-rMnpsQ8YMRkUDkLfxiNvaxZRu4AImN4gE+onke2ZA1N0Fc7JAXj6Jk3eXz4HakyTqoKVXYJE/Gz82Wi2bmX+0Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-bgp-join/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-bgp-join/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-bgp-join/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-bgp-join/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-construct": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-construct/-/actor-query-operation-construct-4.2.0.tgz", + "integrity": "sha512-7T6BGfeToMsbzsUr0ZZpYlpkv8KpPS9KFFQp7bQZ/VhsSxBtPCwEIGF5tLhe75LMn28g0vzSJXdisBgQ3RM7ww==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "rdf-terms": "^1.11.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-construct/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-construct/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-construct/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-construct/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-distinct-identity": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-distinct-identity/-/actor-query-operation-distinct-identity-4.3.0.tgz", + "integrity": "sha512-bI5c/ohY0NqBHF3ShibqAt4triFEGPX5lSzhNcB0yoHS8G+jj61QQxmiw1CxTKur+akOlAhg1XipyouZuEIYUA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "rdf-string": "^2.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-distinct-identity/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-distinct-identity/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-distinct-identity/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-distinct-identity/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@comunica/actor-query-operation-distinct-identity/node_modules/rdf-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-2.0.1.tgz", + "integrity": "sha512-SMW4ponnKNrsP9kYpOLyICeM4UJmEXIeS3zri7kPK9gzLFsHD88oiza8LnokNYxd76zW4JoYWD+v4x0g8rJBjw==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@comunica/actor-query-operation-extend": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-extend/-/actor-query-operation-extend-4.2.0.tgz", + "integrity": "sha512-CveBkiwmrZdewxUqqipROXZfmQTQud0A68Vvy5OOrvC6maM9KC2zHxWIdgNkFNoqsB0jcb3+s8hGIqql/9oW4A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-expression-evaluator-factory": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-extend/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-extend/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-extend/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-filter": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-filter/-/actor-query-operation-filter-4.2.0.tgz", + "integrity": "sha512-k1TBwCjEG55uWjUZ6IZhQnJ+nlm+vGvOLqAI4BkWulgymxYsqAiIrdrgc2aJzrOv4H7q1J6s/i/ICIcPePvUlA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-expression-evaluator-factory": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-filter/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-filter/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-filter/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-from-quad": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-from-quad/-/actor-query-operation-from-quad-4.2.0.tgz", + "integrity": "sha512-E84C1YZE0l1AdKFyjLfiU+PpAmQ294GUE6OqPj9nDvRB4J4U7+iRsSpubyoTiupmmiR25AOjjQcus08cPwWezw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-from-quad/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-from-quad/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-from-quad/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-from-quad/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-group": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-group/-/actor-query-operation-group-4.2.0.tgz", + "integrity": "sha512-CeeRHzTZCcekwiEIc2mmGGRK0ZwxNthEpE1Wf3lPX4xdoftzdwD/1xi4+V2A5ewOzIqGi/3kQ0H0DfJtPxs5jw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-bindings-aggregator-factory": "^4.2.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-group/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-group/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-group/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-group/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-join": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-join/-/actor-query-operation-join-4.2.0.tgz", + "integrity": "sha512-16RKWhBUEr7EKxjv4KAirT22NMaBT7WTzehMAFrQbbHqjzL/idwTTKrWXN0d3rxv/oA/a4hvK8vM1910GP+sBQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "rdf-data-factory": "^1.1.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-join/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-join/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-join/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-leftjoin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-leftjoin/-/actor-query-operation-leftjoin-4.2.0.tgz", + "integrity": "sha512-Nml0hVwOrWn28fIo48DJdIfZrGXx8/MwsZcYr8EmptbC996NgwLvcnZ3nXuFtO/oOOO076QHtZmsu4cRaNEhKA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-expression-evaluator-factory": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-leftjoin/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-leftjoin/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-leftjoin/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-minus": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-minus/-/actor-query-operation-minus-4.2.0.tgz", + "integrity": "sha512-zrQlIBimqJcIDZ0VAIC7ZvEdtVm/JFjxp8AUPrUp8XKdhZAzr5g2D9pu8/CaXR3+hWbbFFhYTa3MiWm+dTcNBQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-minus/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-minus/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-minus/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-nop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-nop/-/actor-query-operation-nop-4.2.0.tgz", + "integrity": "sha512-eSfNCVFsL1CDXjxZUQVQoDlKM/5IPABmc/IzXrYLxwJPtq/TfWeFQ9DW0RG3WzBwY0DZB1DdeShHeTuGbfE4mw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-nop/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-nop/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-nop/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-nop/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-orderby": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-orderby/-/actor-query-operation-orderby-4.2.0.tgz", + "integrity": "sha512-rNTzYbg/5tHDM8qMbD1Atys3mDzkjLzkDQoTNqU/7jUkp/DmwuokrPNx98apI0AKW7a2oN1nf6rm81fgBht23g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-expression-evaluator-factory": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-term-comparator-factory": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-orderby/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-orderby/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-orderby/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-path-alt": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-alt/-/actor-query-operation-path-alt-4.3.0.tgz", + "integrity": "sha512-dV1Sr0yUfrxcUaBazPmoC3y2dYpVZKTRmuLmZUaT/Fq8K07r8XBgRD+kTe4vUJoUhPqyAr+IwbD+Jyng/RCcUw==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-path": "^4.3.0", + "@comunica/actor-query-operation-union": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-metadata-accumulate": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-alt/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-alt/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-alt/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-alt/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-path-inv": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-inv/-/actor-query-operation-path-inv-4.3.0.tgz", + "integrity": "sha512-2J/njrqsz6siuu+uuWOVLyvV1VVWPHAw3+Fp/DZyhyCP4nTUqNk0FFxKT7ftrE7gYUrNm83gqu3pFFtRZcW5uQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-path": "^4.3.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-inv/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-inv/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-inv/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-inv/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-path-link": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-link/-/actor-query-operation-path-link-4.3.0.tgz", + "integrity": "sha512-ZDQO+hIGY2ba0cXqcU7ekqu3g/EBudkmMZuq1Yq99o/ZpAJF8gVuco0a33mFSbjExf1PzkVcNzAglnFnGvi1TQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-path": "^4.3.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-link/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-link/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-link/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-link/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-path-nps": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-nps/-/actor-query-operation-path-nps-4.3.0.tgz", + "integrity": "sha512-6lBc1m8hN3KdBLO8sPKXUFlxK3NWxlnzIyyVd95Gc5EMjMJAH/ez4MBh0wHjkdvTMv27JjdTo001QjV/jGJsgg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-path": "^4.3.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-nps/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-nps/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-nps/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-nps/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-path-one-or-more": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-one-or-more/-/actor-query-operation-path-one-or-more-4.3.0.tgz", + "integrity": "sha512-Y5XIVjb5UndYrDJdg+vZbaDNH7FvUeHncoiJRqVH5TiiBvL/b1XElc+RIvYO00gUPfUmEjsKKgqhD8xQFc9LsQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-path": "^4.3.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-one-or-more/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-one-or-more/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-one-or-more/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-one-or-more/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-path-seq": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-seq/-/actor-query-operation-path-seq-4.3.0.tgz", + "integrity": "sha512-Dh4KNlxTK9QpdFyTGTDqGeNczCFpeXEFa0KrtK6Dv9fdaSLkVA+KuZBnXpfCroii0Qq7j0KaU9H2E5ZMHu1C9Q==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-path": "^4.3.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-seq/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-seq/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-seq/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-seq/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-path-zero-or-more": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-zero-or-more/-/actor-query-operation-path-zero-or-more-4.3.0.tgz", + "integrity": "sha512-owpabDsH6fxU9htVUqXLzn8G2v19P37uOAbrvsD0kRd1HpJdNKkn3lPzrQgPR3u8eMnSvFCzX2CQb0eUmJQ1ZQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-path": "^4.3.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "asynciterator": "^3.9.0", + "rdf-string": "^1.6.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-zero-or-more/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-zero-or-more/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-zero-or-more/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-zero-or-more/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-path-zero-or-one": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-zero-or-one/-/actor-query-operation-path-zero-or-one-4.3.0.tgz", + "integrity": "sha512-wiFxVkTjI3/3EkdV/bqdf5U9qd+X+HOQEElozh+6ztflYaErNR/aUvoPL3W3hrR3R+0pOZYWdS35wj1xOhhrJg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-path": "^4.3.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-zero-or-one/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-zero-or-one/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-zero-or-one/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-path-zero-or-one/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-project": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-project/-/actor-query-operation-project-4.2.0.tgz", + "integrity": "sha512-n2Pw5VR0/fsOiOoOqapO4i+Be77ZFBlwAIvz6kpIYjICH5xYnPKckiI/WxB8OGKx1pfn0psHBNxZMmAGmc0zzQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-data-factory": "^4.0.1", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-project/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-project/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-project/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-project/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-reduced-hash": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-reduced-hash/-/actor-query-operation-reduced-hash-4.2.0.tgz", + "integrity": "sha512-KwDvW3cihGdqOGczs5ati9TtmlzXhV2Wu3krJ7PjeiqFTl3qhP5DLITJAgZfKFkqXH+pJoBRtFPIQsn0A4MAKA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-hash-bindings": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "lru-cache": "^10.0.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-reduced-hash/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-reduced-hash/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-reduced-hash/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-service": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-service/-/actor-query-operation-service-4.2.0.tgz", + "integrity": "sha512-z61je/Ptj0ENZAWsP+1ghdNr2Y3mSHwr31nu6RQ0/QjCjaWXHYT2dXwHO0j0icrOgdfjgFHwRCkrPEpypnsJtw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-query-source-identify": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-service/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-service/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-service/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-service/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-slice": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-slice/-/actor-query-operation-slice-4.2.0.tgz", + "integrity": "sha512-sgVq8cHLFfn6pG5Vkj1EfdVl3ngvgOx8Pr3v9VM4vu1y/ZM7AbkBhP2MW06kjFIUnHcD/A1Si0ZnzGjPpm2+XA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-slice/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-slice/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-slice/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-slice/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-source": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-source/-/actor-query-operation-source-4.2.0.tgz", + "integrity": "sha512-GQGaNYMzOwFbyl/7H7WSCBHKtoneJFrmSjIz7dtXMKG7M2wM3Q3KGqkKqZpNaPFiO6unEEzAa81WFxFNx8PaXw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-source/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-source/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-source/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-source/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-union": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-union/-/actor-query-operation-union-4.2.0.tgz", + "integrity": "sha512-C8i0DgYje6gcG4QfeHQReIQlcq2mXDfhORoKIY7+cwhrS0Ei+q/LfvlzuPMLXavDI5/p/6nedtfzkLgLgJOPTg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-metadata-accumulate": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-union/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-union/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-union/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-update-clear": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-clear/-/actor-query-operation-update-clear-4.2.0.tgz", + "integrity": "sha512-p2GNZ+zwSvPCg5bkimFYk+ZMQ15OXbMniIr48ARCOhA4EoGhBLYUVZ0c90n7gbRudSliFDHQZWB8yjDnLvOevQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-clear/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-clear/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-clear/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-clear/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-update-compositeupdate": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-compositeupdate/-/actor-query-operation-update-compositeupdate-4.2.0.tgz", + "integrity": "sha512-nIw0u2yGw7b/HfRFFsZKG72IRiYZyjzh7MS9B6D+ikfm+h4By0vgja5POX6Hqy6a1UqfYxhUO2/AfZS0Ya8Q0Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-compositeupdate/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-compositeupdate/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-compositeupdate/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-update-create": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-create/-/actor-query-operation-update-create-4.2.0.tgz", + "integrity": "sha512-sqXj6Czpeyh1iQZLmxs0N8wYUnv0b7HCD/DOH3aUU64zE73BdJEcvn8DaySvwtEtXGg09ZAsBGKyEkXnEfqUdA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-create/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-create/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-create/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-update-deleteinsert": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-deleteinsert/-/actor-query-operation-update-deleteinsert-4.2.0.tgz", + "integrity": "sha512-MfDjCRBs2WtPq9Pz0tTtHMrgIvqqSo8ARsrRmArTl5zidwtOJONACqMaUFPfC+NrxmNGCLfKgKj4qGwYFm8Oew==", + "license": "MIT", + "dependencies": { + "@comunica/actor-query-operation-construct": "^4.2.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-deleteinsert/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-deleteinsert/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-deleteinsert/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-deleteinsert/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-update-drop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-drop/-/actor-query-operation-update-drop-4.2.0.tgz", + "integrity": "sha512-UgQss1jjZ+yLGvSWChIYf2nGghDFfFd+7JMTnqeU0HMjD41V6EAQJ6axxOcdP2zQ6cI2oNjGCj9SUfh/rMNlcg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-drop/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-drop/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-drop/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-drop/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-update-load": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-load/-/actor-query-operation-update-load-4.2.0.tgz", + "integrity": "sha512-3cARwBT5caRVYyxP6h62e34ZG4O7vzm9q9MUL4CA8XB95wO6gwGxsi3AW19IctkI/3YBlLgf0h4JNZOZCzCSMg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-query-source-identify": "^4.2.0", + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-load/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-load/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-load/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-update-load/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-operation-values": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-values/-/actor-query-operation-values-4.2.0.tgz", + "integrity": "sha512-7O1Nf+HbrpgW2cFD98Tg3AEA9+wB9kZc032lbL20fane4dvLBRP9tKeDx9hZGSjzBELcvizvy97/uSL1iM92kA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-values/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-values/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-values/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-operation-values/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-parse-graphql": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-parse-graphql/-/actor-query-parse-graphql-4.2.0.tgz", + "integrity": "sha512-FeSRB9QRsaPM8vjbid3bujDfH7qVxbP8uCUftXidfQUP2vME8iDwgzLk8avzPHqHvs9dpDbWfrxJr+9pOtJZlw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "graphql-to-sparql": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-parse-graphql/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-parse-graphql/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-parse-graphql/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-parse-graphql/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-parse-sparql": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-parse-sparql/-/actor-query-parse-sparql-4.2.0.tgz", + "integrity": "sha512-0GhkECBFFMJ5uipXpQro3IY32HyzQMk/9bRp/MLWBJODatZZFG62CSFdOAHdezebQY9BKgdIYDrSEhrdSm8OSQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@types/sparqljs": "^3.1.3", + "sparqlalgebrajs": "^4.3.8", + "sparqljs": "^3.7.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-parse-sparql/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-parse-sparql/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-parse-sparql/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-parse-sparql/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-process-explain-logical": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-process-explain-logical/-/actor-query-process-explain-logical-4.2.0.tgz", + "integrity": "sha512-t5yxb9w47XwGcW3VsqXKIH2Q9FRSiD2Pm1iqJuYzWn1krq1he5qr0T3ovuEF01RUbNlIwczoQ7z+J0XSNZn2uQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-process": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-logical/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-logical/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-logical/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-logical/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-process-explain-parsed": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-process-explain-parsed/-/actor-query-process-explain-parsed-4.2.0.tgz", + "integrity": "sha512-ulMfTK7MzblrTAq4ebKis/U9N6HM/upZeOS7l8ZOeBJZQMBhJC11efhbNw4foOtzVg0b1e2kmEbKUMuMvdQ51w==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-process": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-parsed/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-parsed/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-parsed/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-parsed/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-process-explain-physical": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-process-explain-physical/-/actor-query-process-explain-physical-4.2.0.tgz", + "integrity": "sha512-LN9NHE41zqwgGAtef05hz5sI5rE1QeEntE1PYB3e3qFlzP5gZqK4T0U2/5fbn9DSDmfjnxq1qdCrD+VKSrW6Zw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-process": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "rdf-string": "^1.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-physical/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-physical/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-physical/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-explain-physical/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-process-sequential": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-process-sequential/-/actor-query-process-sequential-4.2.0.tgz", + "integrity": "sha512-Xf7nOqOIN2Xt62OKD048CgsPp/F3bL4Vhmhp8Rvk1YR3jvuZU57q34yo+JKiEj733rToDFT33x9TU8aV3kPyUA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-context-preprocess": "^4.2.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-optimize-query-operation": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-query-parse": "^4.2.0", + "@comunica/bus-query-process": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-sequential/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-sequential/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-sequential/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-process-sequential/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-result-serialize-json": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-json/-/actor-query-result-serialize-json-4.2.0.tgz", + "integrity": "sha512-lNZppKPfQnunl55ZwD3w4GgUTyfvjUbsttHSOv3PZQY1UJzZFRLsjEtwmvA8ei3HdoW3l+BtOW/+Yo9XqnTDgA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "asynciterator": "^3.9.0", + "rdf-string": "^1.6.1", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-json/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-json/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-json/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-result-serialize-rdf": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-rdf/-/actor-query-result-serialize-rdf-4.2.0.tgz", + "integrity": "sha512-49pqd44G6NyTIdobJ91dXIIoWuvPBKmWIgSw8FkCdUZ1Ik0/EHoX1wlwLKsyPMXlPT/EToNDwJFbr6sJr3otDw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/bus-rdf-serialize": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-rdf/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-rdf/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-rdf/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-result-serialize-simple": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-simple/-/actor-query-result-serialize-simple-4.2.0.tgz", + "integrity": "sha512-HZARqPt4ulKQXN7xha/nk0hy8uXqp0ZHzxEXHK8seP+f+RmvuyG1jrd1NqAQEiHH1Hzfma0y01RfWT9EKpBVbg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "rdf-string": "^1.6.3", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-simple/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-simple/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-simple/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-csv": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-csv/-/actor-query-result-serialize-sparql-csv-4.2.0.tgz", + "integrity": "sha512-5MEDXYFCafMxEznvs4zdO1dlDmVYm/E7babzyiLCfYn05rgJigH4F1cuWwa5Gld91HDqjnw2buaSb65Bng31bg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-csv/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-csv/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-csv/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-json": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-json/-/actor-query-result-serialize-sparql-json-4.2.0.tgz", + "integrity": "sha512-/+fVwbv9bld6VmuIrYQtaTu7mAmEKBU+k2Wk/zw1I0Yc9Ay3Jbx8q9KKsxmrToQuGGnAncc64cc1+J9bvjAacA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-http-invalidate": "^4.2.0", + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-json/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-json/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-json/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-json/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-tsv": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-tsv/-/actor-query-result-serialize-sparql-tsv-4.2.0.tgz", + "integrity": "sha512-GuZCywyB/190Vcke4+PHIewa/trAvuxKBOGO40sqWABychFd9jg/516myofyrp0+US9xECH1lpW/Xio7I67xQA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "rdf-string-ttl": "^1.3.2", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-tsv/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-tsv/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-tsv/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-xml": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-xml/-/actor-query-result-serialize-sparql-xml-4.2.0.tgz", + "integrity": "sha512-lfmpqm1kvEfkaIpttScuDLrgCCbA0jofEytWxJ+F2PTL41YGMIpXayKeTciMNrwJsPiFzHh8q0fbrM+XzJUyeA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-xml/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-xml/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-sparql-xml/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-result-serialize-stats": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-stats/-/actor-query-result-serialize-stats-4.2.0.tgz", + "integrity": "sha512-GodmxZUuHmtxrWeHAidJUPygUusC4tRw8f2HOPHdyq7mV7OyU7Xq2RRmnXpK5yjjX+hOdZ9F+R4/qVBxc7rpjA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-http-invalidate": "^4.2.0", + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "asynciterator": "^3.9.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-stats/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-stats/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-stats/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-stats/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-stats/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-result-serialize-table": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-table/-/actor-query-result-serialize-table-4.2.0.tgz", + "integrity": "sha512-1LatUBVmQsTBik7V75REVIwJBPfm8fwqllFO8MttItfWHLco9mwFOUz/WMUOgdQ2qTOl63i5A0okZS7cjKlCsQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "rdf-string": "^1.6.3", + "rdf-terms": "^1.11.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-table/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-table/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-table/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-table/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-result-serialize-tree": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-tree/-/actor-query-result-serialize-tree-4.2.0.tgz", + "integrity": "sha512-joejwtHdvNTVKJ/E7kLTd/qXhFT+qSpNjK2N2F0IB+aIZ9Ru0RZYwDsafuJvcgK3y8E4RE6hp3qa3YaBVz32BA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-result-serialize": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "readable-stream": "^4.5.2", + "sparqljson-to-tree": "^3.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-tree/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-tree/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-tree/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-result-serialize-tree/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-source-identify-hypermedia/-/actor-query-source-identify-hypermedia-4.3.0.tgz", + "integrity": "sha512-37TU19ky9jRbB8wozs/Ru5I1cEb3MfZEnUAYtFoG+q0412PHSDOsKTzMy+eUO01jc+uO04gIYy9fQyNqo97GzQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-query-source-identify-rdfjs": "^4.3.0", + "@comunica/bus-dereference-rdf": "^4.2.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-source-identify": "^4.2.0", + "@comunica/bus-query-source-identify-hypermedia": "^4.2.0", + "@comunica/bus-rdf-metadata": "^4.2.0", + "@comunica/bus-rdf-metadata-accumulate": "^4.2.0", + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/bus-rdf-resolve-hypermedia-links": "^4.2.0", + "@comunica/bus-rdf-resolve-hypermedia-links-queue": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-iterator": "^4.0.1", + "@comunica/utils-metadata": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.0", + "rdf-streaming-store": "^2.1.1", + "readable-stream": "^4.5.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-none": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-source-identify-hypermedia-none/-/actor-query-source-identify-hypermedia-none-4.3.0.tgz", + "integrity": "sha512-PtuxiY0S+YxYEkEI3uZ/e9Jy/LGBLmXgy9SRw4rDarLN/Z25hIf5hcZI5JmVyFiSLcYav89WxPmRFYDNzrH5PQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-query-source-identify-rdfjs": "^4.3.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-source-identify-hypermedia": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "rdf-store-stream": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-none/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-none/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-none/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-none/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-qpf": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-source-identify-hypermedia-qpf/-/actor-query-source-identify-hypermedia-qpf-4.2.0.tgz", + "integrity": "sha512-W/gi+uOuczGBtfzka1mWZoaPzhAb6lt+kkG9rbKuHRNlJaNpxadKaDuouvOp9Jaf6NWScbj/WzINbOZGq4bPIw==", + "license": "MIT", + "dependencies": { + "@comunica/actor-rdf-metadata-extract-hydra-controls": "^4.2.0", + "@comunica/bus-dereference-rdf": "^4.2.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-source-identify": "^4.2.0", + "@comunica/bus-query-source-identify-hypermedia": "^4.2.0", + "@comunica/bus-rdf-metadata": "^4.2.0", + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "rdf-string": "^1.6.1", + "rdf-string-ttl": "^1.3.2", + "rdf-terms": "^1.11.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-qpf/node_modules/@comunica/actor-abstract-mediatyped": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-4.2.0.tgz", + "integrity": "sha512-+7NuPZQAi7iRJ1Cie9qqhbJjBv0/SadA/24+KrDVU4+4QM6n5usCKibA8D84Nqgt257IsrFrb2G7NndTZ6taww==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-qpf/node_modules/@comunica/actor-abstract-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-4.2.0.tgz", + "integrity": "sha512-WUHr9Bhr3Z7eJ2GtSGnhj1xCXCarKkC82WPorlG+RhuPuryp152GtJYtdyBIR4pEetP2hL4n+VuvHjXY80LWbQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-qpf/node_modules/@comunica/bus-dereference": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-4.2.0.tgz", + "integrity": "sha512-KWaGcrW9B0tWbgtG8gDK6nosdl94unyaaX5eCDSjTXqN6ZZA+NEDHbzRWypxcxbzMugAvyNwcAmC28KW+h9KCQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-qpf/node_modules/@comunica/bus-dereference-rdf": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-4.2.0.tgz", + "integrity": "sha512-RQvj/BMP9QD9v3ZR4vIYLLlRWawAhXDzCOZZ6oJnhmxSOW0NfdL3h5rFI03HVPpDfyWtV4ACKK8FNe6gOIeXZw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-qpf/node_modules/@comunica/bus-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-4.2.0.tgz", + "integrity": "sha512-P92ACuOk2zicOfNDiRc8xAA/u3yw6pHKQDZWRs/XXJJQIyEU+9CAKA6URHcb0+ffnVtxHtiiqI2nsra7MRadIg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-qpf/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-qpf/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-qpf/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-qpf/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-source-identify-hypermedia-sparql/-/actor-query-source-identify-hypermedia-sparql-4.2.0.tgz", + "integrity": "sha512-tvm1VCevvT5ijbLftzY44zJAyN51RB/2ESvfLoMVhz/j0k5zLRa8cHdT2cYIllW6USSF7K5yKP/Uq/rFC4YTkQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-source-identify-hypermedia": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "fetch-sparql-endpoint": "^5.1.0", + "lru-cache": "^10.0.0", + "rdf-terms": "^1.11.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/fetch-sparql-endpoint": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-5.1.0.tgz", + "integrity": "sha512-ylROBEdVOVzaGdngq3hSGuA/cDtmRiMmPMU75dsu9xatdKEtU39vRp3HbVxdgzqDDX4HU0FnTBQ/+ciMaEBdbA==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/n3": "^1.0.0", + "@types/readable-stream": "^4.0.0", + "@types/sparqljs": "^3.0.0", + "is-stream": "^2.0.0", + "n3": "^1.0.0", + "rdf-string": "^1.0.0", + "readable-from-web": "^1.0.0", + "sparqljs": "^3.0.0", + "sparqljson-parse": "^2.0.0", + "sparqlxml-parse": "^2.0.0", + "stream-to-string": "^1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/sparqljson-parse": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.2.0.tgz", + "integrity": "sha512-2TfvNvUsaJyWfCrq3ExdDdbF9LBLzIUCricg+D1YCYbbmyTzscgCtRk4KcIyJF178DtfCt4BkKzbKl8IXMHp8w==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.1", + "@rdfjs/types": "*", + "@types/readable-stream": "^2.3.13", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/sparqljson-parse/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/sparqlxml-parse": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.1.1.tgz", + "integrity": "sha512-71sltShF6gDAzuKWEHNeij7r0Mv5VqRrvJing6W4WHJ12GRe6+t1IRTv6MeqxYN3XJmKevs7B3HCBUo7wceeJQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia-sparql/node_modules/sparqlxml-parse/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia/node_modules/@comunica/actor-abstract-mediatyped": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-4.2.0.tgz", + "integrity": "sha512-+7NuPZQAi7iRJ1Cie9qqhbJjBv0/SadA/24+KrDVU4+4QM6n5usCKibA8D84Nqgt257IsrFrb2G7NndTZ6taww==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia/node_modules/@comunica/actor-abstract-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-4.2.0.tgz", + "integrity": "sha512-WUHr9Bhr3Z7eJ2GtSGnhj1xCXCarKkC82WPorlG+RhuPuryp152GtJYtdyBIR4pEetP2hL4n+VuvHjXY80LWbQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia/node_modules/@comunica/bus-dereference": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-4.2.0.tgz", + "integrity": "sha512-KWaGcrW9B0tWbgtG8gDK6nosdl94unyaaX5eCDSjTXqN6ZZA+NEDHbzRWypxcxbzMugAvyNwcAmC28KW+h9KCQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia/node_modules/@comunica/bus-dereference-rdf": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-4.2.0.tgz", + "integrity": "sha512-RQvj/BMP9QD9v3ZR4vIYLLlRWawAhXDzCOZZ6oJnhmxSOW0NfdL3h5rFI03HVPpDfyWtV4ACKK8FNe6gOIeXZw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia/node_modules/@comunica/bus-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-4.2.0.tgz", + "integrity": "sha512-P92ACuOk2zicOfNDiRc8xAA/u3yw6pHKQDZWRs/XXJJQIyEU+9CAKA6URHcb0+ffnVtxHtiiqI2nsra7MRadIg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-hypermedia/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-source-identify-rdfjs": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-source-identify-rdfjs/-/actor-query-source-identify-rdfjs-4.3.0.tgz", + "integrity": "sha512-M7v99gdlPH8F71Ceh2+/Zb1kv25dcTqdlsNPdy6CynbMMlPV4RCrSIogEslqUUIo3Ru+L3kasksNT+ILie5YeA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-source-identify": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "rdf-terms": "^1.11.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-rdfjs/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-rdfjs/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-rdfjs/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-rdfjs/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-query-source-identify-serialized": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-source-identify-serialized/-/actor-query-source-identify-serialized-4.2.0.tgz", + "integrity": "sha512-IY1B610eR4e1E6tMQU5fR5TIVYuv4iWtZnbwMmdectgNavhq7cvdOTuXNZ75UixWATiQUgBvupbB6PpOpm/JlQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-source-identify": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "rdf-store-stream": "^3.0.0", + "readable-stream": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-serialized/node_modules/@comunica/actor-abstract-mediatyped": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-4.2.0.tgz", + "integrity": "sha512-+7NuPZQAi7iRJ1Cie9qqhbJjBv0/SadA/24+KrDVU4+4QM6n5usCKibA8D84Nqgt257IsrFrb2G7NndTZ6taww==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-serialized/node_modules/@comunica/actor-abstract-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-4.2.0.tgz", + "integrity": "sha512-WUHr9Bhr3Z7eJ2GtSGnhj1xCXCarKkC82WPorlG+RhuPuryp152GtJYtdyBIR4pEetP2hL4n+VuvHjXY80LWbQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-serialized/node_modules/@comunica/bus-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-4.2.0.tgz", + "integrity": "sha512-P92ACuOk2zicOfNDiRc8xAA/u3yw6pHKQDZWRs/XXJJQIyEU+9CAKA6URHcb0+ffnVtxHtiiqI2nsra7MRadIg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-serialized/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-serialized/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-query-source-identify-serialized/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-entries-sort-cardinality": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-entries-sort-cardinality/-/actor-rdf-join-entries-sort-cardinality-4.2.0.tgz", + "integrity": "sha512-Y2OXmFLA8aWMrfJBL8wDHw5xpfRCBh4ce9A3hCw6CfIpBmkLYvFd5RZyJ9XiUBJNvsEIQAOw6sYp++XUjPHKxQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join-entries-sort": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-entries-sort-cardinality/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-entries-sort-cardinality/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-entries-sort-cardinality/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-entries-sort-selectivity": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-entries-sort-selectivity/-/actor-rdf-join-entries-sort-selectivity-4.2.0.tgz", + "integrity": "sha512-AeCmvfOWm9x58wk5n+1B49qByVcu3h7LxNz7XOKnR3VfdCYHp7YKVRGGafpkGTPT55+V/X3nEmW57hCQCE5ewg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join-entries-sort": "^4.2.0", + "@comunica/bus-rdf-join-selectivity": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-entries-sort-selectivity/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-entries-sort-selectivity/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-entries-sort-selectivity/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-inner-hash": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-hash/-/actor-rdf-join-inner-hash-4.2.0.tgz", + "integrity": "sha512-2Ukb+0UaZFGHLaffdz9SXr6XG3FF92O8jLWbmuQ7C/L6ZdvQkuv22w8277xVHQArGKAWwoQTx/6i7oHT6FxWsw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-hash-bindings": "^4.2.0", + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-index": "^4.2.0", + "@comunica/utils-iterator": "^4.0.1", + "asynciterator": "^3.9.0", + "asyncjoin": "^1.2.4", + "rdf-string": "^1.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-hash/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-hash/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-hash/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-bind": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-bind/-/actor-rdf-join-inner-multi-bind-4.2.0.tgz", + "integrity": "sha512-ugn3Cs+hv5IgtrAR6j0XxwcN/vPHhN7cQF9+RoAq4/PT8J/oW5aKsaQXcjAi/DFtzhNWTzi58NDuJYPFySfCuQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/bus-rdf-join-entries-sort": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-bind-source": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-bind-source/-/actor-rdf-join-inner-multi-bind-source-4.2.0.tgz", + "integrity": "sha512-JWePTa56cJZVX8LJRchh4/B8b1iqwoT8iAxxKo3MX0rECQDJlP0ApZsuHgQ2hsuUl0pwsdFaYPpo5h8k5MvrdQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/bus-rdf-join-entries-sort": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-iterator": "^4.0.1", + "@comunica/utils-query-operation": "^4.2.0", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-bind-source/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-bind-source/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-bind-source/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-bind-source/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-bind/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-bind/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-bind/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-bind/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-empty": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-empty/-/actor-rdf-join-inner-multi-empty-4.2.0.tgz", + "integrity": "sha512-T6udTTZaaq07lTDKwhkgM1yDPCzDJTtX6FQapti5ohBsArajlDCJGUK1hK4R3YvKPagdTOeYWQMuUscaU+TinA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-empty/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-empty/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-empty/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-empty/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-smallest": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-smallest/-/actor-rdf-join-inner-multi-smallest-4.2.0.tgz", + "integrity": "sha512-/x8/BwIlexd88EfkoGFME3WjQPqPtblnqYz+JKQbAEefCzn3U98uCnqVX7DnyG+4xtXwEewuMsQ9tunc4U73zw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/bus-rdf-join-entries-sort": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/-/actor-rdf-join-inner-multi-smallest-filter-bindings-4.2.0.tgz", + "integrity": "sha512-LvryRsWY05yIqK5YQNp1r0yi6b34BLm/qhj8LckzuN9IuPdbpPYKGGZVMfleLtxnM5mSV0hTjlRGcONohma28g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/bus-rdf-join-entries-sort": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-iterator": "^4.0.1", + "@comunica/utils-query-operation": "^4.2.0", + "asynciterator": "^3.9.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-smallest/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-smallest/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-smallest/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-multi-smallest/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-inner-nestedloop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-nestedloop/-/actor-rdf-join-inner-nestedloop-4.2.0.tgz", + "integrity": "sha512-tFEnYSuuFM92KVp261ufESq4cAeZr+iyeQIzy80DwGJ52SPi3yaHhNrd+KdVx88bdHzeS2ixV7YPKBiOs2WvxQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "asyncjoin": "^1.2.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-nestedloop/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-nestedloop/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-nestedloop/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-inner-none": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-none/-/actor-rdf-join-inner-none-4.2.0.tgz", + "integrity": "sha512-NaKfXtsvQpoZVZjiom+zRN3CoT1TQ+LIyxusozdOwQAe4WsThGdnzC2AQ8cRFZB1SU+BWsoDw75lkSvJU908xg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-none/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-none/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-none/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-none/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-inner-single": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-single/-/actor-rdf-join-inner-single-4.2.0.tgz", + "integrity": "sha512-2v7ZT6w/wbN/Lf/RzujX0LBd9HRm2wmDI4jKSUP9K/3Be/svbgPOR2k6e7q0pfLJ7urVogbaYIGzBA02WooS4A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-single/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-single/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-single/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-inner-symmetrichash": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-symmetrichash/-/actor-rdf-join-inner-symmetrichash-4.2.0.tgz", + "integrity": "sha512-oiiaMztBKEMYAtfO4hHnBRRpwZvGLhK7WY4Ewx0pBs8WRyjtElAGtxNAV450X9N/DG+vKBJBTHG39G4oP6gvXw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-hash-bindings": "^4.2.0", + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "asyncjoin": "^1.2.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-symmetrichash/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-symmetrichash/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-inner-symmetrichash/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-minus-hash": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-minus-hash/-/actor-rdf-join-minus-hash-4.2.0.tgz", + "integrity": "sha512-wJYpuhW1XToLiuZbMpoThBwjx1G+IgrXVRr2n9c6a78XswNhRsTkdsuMS/F8CiBO28Nh+McKM9IC4xZuvA2ErA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-bindings-index": "^4.2.0", + "@comunica/utils-iterator": "^4.0.1", + "@rdfjs/types": "*", + "rdf-string": "^1.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-minus-hash/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-minus-hash/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-minus-hash/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-optional-bind": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-bind/-/actor-rdf-join-optional-bind-4.2.0.tgz", + "integrity": "sha512-yT/MGqez3mDPbDiQK0V28zn/9IKx7At57AeEjufy7pAOCw6VuMewCkT6SyFwxMA03lQtgQIIxHqF2gAOaIjuZw==", + "license": "MIT", + "dependencies": { + "@comunica/actor-rdf-join-inner-multi-bind": "^4.2.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-query-operation": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-optional-bind/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-optional-bind/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-optional-bind/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-optional-bind/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-optional-hash": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-hash/-/actor-rdf-join-optional-hash-4.2.0.tgz", + "integrity": "sha512-HNIhXgSNt2A+yOl3Asdx5l6xSrHdCztzsStgWBQh+rlUcDIcEixwReTXh1kB1egI6UDYnGLL08w5TmKKGVJUqA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-bindings-index": "^4.2.0", + "@comunica/utils-iterator": "^4.0.1", + "asynciterator": "^3.9.0", + "rdf-string": "^1.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-optional-hash/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-optional-hash/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-optional-hash/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-optional-nestedloop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-nestedloop/-/actor-rdf-join-optional-nestedloop-4.2.0.tgz", + "integrity": "sha512-RRzxkms7Nzkpxh/HTPORHwcXdBiZkHYskTAwOz4r3vyvzHu0LroZ6ZyByP77XyNirZ5moxX9n4kq3GSjlKvxTw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "asyncjoin": "^1.2.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-optional-nestedloop/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-optional-nestedloop/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-optional-nestedloop/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-join-selectivity-variable-counting": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-selectivity-variable-counting/-/actor-rdf-join-selectivity-variable-counting-4.2.0.tgz", + "integrity": "sha512-8TIM0PR/Ixfhgjfl9b5UFAd+EEhilPnZtLsHfgMSiZO6StG08KIbCOzR2izMizFcUe1IXLT2WmoxZEfUAfjBNA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join-selectivity": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-accuracy": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-selectivity-variable-counting/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-selectivity-variable-counting/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-join-selectivity-variable-counting/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-cardinality": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-cardinality/-/actor-rdf-metadata-accumulate-cardinality-4.2.0.tgz", + "integrity": "sha512-wtMrxThX6m9tYgElYbd8i6hWh3nCr+1CLtk/ep1G5ZaNPD6eL494yabK75dLJHkz/eLv2jpdWDWGdfakGnVuMA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-accumulate": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-cardinality/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-cardinality/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-cardinality/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-pagesize": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-pagesize/-/actor-rdf-metadata-accumulate-pagesize-4.2.0.tgz", + "integrity": "sha512-lAttY0x9nTmcWgsiMHv0PAGG3ok1YDeNq3hdkjY+j6mqYM6eKCU5bZFyg96wAaTJtppASzOw4WTON0r8RJ8YeQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-accumulate": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-pagesize/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-pagesize/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-pagesize/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-requesttime": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-requesttime/-/actor-rdf-metadata-accumulate-requesttime-4.2.0.tgz", + "integrity": "sha512-Ur5v/+UOx9qNAmLu6XV1fTy3DvgqPVM5BDGY9eZqre+uDTJzCLw8BtJI+5j8oCUMuLuHUmepzIE3owfJjWK01Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-accumulate": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-requesttime/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-requesttime/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-accumulate-requesttime/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-all": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-all/-/actor-rdf-metadata-all-4.2.0.tgz", + "integrity": "sha512-vYsFh18zCsHXyt3uv68YKmBypQxmv6VqzMLodYZEsqc0MvlZXHSAWNMOKfyQFjWTX1ZKz1nnUV9c+yjqbIpVnw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata": "^4.2.0", + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-all/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-all/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-all/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-extract-allow-http-methods": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-allow-http-methods/-/actor-rdf-metadata-extract-allow-http-methods-4.2.0.tgz", + "integrity": "sha512-DwL+APKbjYbTceO9C+3w/Tq+IrM5z3kso8cAawX0IXzfudA704EkqNpACRV5EAD3HYBOIloVc3PyXrgQ1ta2Bw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-allow-http-methods/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-allow-http-methods/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-allow-http-methods/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-controls": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-controls/-/actor-rdf-metadata-extract-hydra-controls-4.2.0.tgz", + "integrity": "sha512-4pXY5ixlv2UKae1jeaTvaYegQjiCPtOMPwwE1mZNrlUyY6jT+ouPi7tx2Aqo40s9lRL9jsK1YPOc2kwTvV8THQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*", + "@types/uritemplate": "^0.3.4", + "uritemplate": "0.3.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-controls/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-controls/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-controls/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-count": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-count/-/actor-rdf-metadata-extract-hydra-count-4.2.0.tgz", + "integrity": "sha512-HpT0AnI3s+62ks43TSUGGapEaBek+o+0SsO5KTinBLaqVkPqhLTKJtos5Y/xvJW2LgwiwAo3QHdlPkHhON4Ymw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-count/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-count/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-count/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-pagesize": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-pagesize/-/actor-rdf-metadata-extract-hydra-pagesize-4.2.0.tgz", + "integrity": "sha512-0qR+0bW+gnWA+lQ8Obr3pObvt9Vx6zWvRur7gmoriyv80AJpTEMpjtN2Dl67fGe8wCSifLefTjwpXJcMs0yeQw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-pagesize/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-pagesize/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-hydra-pagesize/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-extract-patch-sparql-update": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-patch-sparql-update/-/actor-rdf-metadata-extract-patch-sparql-update-4.2.0.tgz", + "integrity": "sha512-mXEYD5ZDL0kH/mHDxWdesniTyX0W/liktQ3SNhmuzmnzuHc0Wm7m/tZetoLYztJm7+kqPJxM9Lli2RJ6Q3FJSQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-patch-sparql-update/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-patch-sparql-update/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-patch-sparql-update/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-extract-put-accepted": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-put-accepted/-/actor-rdf-metadata-extract-put-accepted-4.2.0.tgz", + "integrity": "sha512-cguKLnLIqsJF1SuhJG6Sb5K5VCdcmBMmfVEHOVflb48PyWBauO+bYidluYCZzTrxMh7jsQij2LMdwVvSvPo/0g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-put-accepted/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-put-accepted/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-put-accepted/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-extract-request-time": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-request-time/-/actor-rdf-metadata-extract-request-time-4.2.0.tgz", + "integrity": "sha512-YEkQNEokrYX46cWFwhw7L0u0o7lyi4mWwELkd5lGtt3sIT+HXwMBlOSr6h9SYCsOPfVB6vo+5C61o89THcTtiQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-request-time/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-request-time/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-request-time/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-extract-sparql-service": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-sparql-service/-/actor-rdf-metadata-extract-sparql-service-4.2.0.tgz", + "integrity": "sha512-AgxAL1hMoeCiR8PDv6Nkh0A5RBpJvumWKMlnO/ARuBeO8wIKi6AuHPm+BJ5nA+WwzSQgt0Tc8jBIQcpyzmXP2Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*", + "relative-to-absolute-iri": "^1.0.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-sparql-service/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-sparql-service/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-sparql-service/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-extract-void": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-void/-/actor-rdf-metadata-extract-void-4.2.0.tgz", + "integrity": "sha512-2IPE/XOhTxeK3YoMwViGAM7tm2IahXEBNSMva1eKuNKgJY5y1XPPnfX6gIH3OO6mxY9yl8W773Lrw16vNVOgMg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "sparqlalgebrajs": "^4.3.8" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-void/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-void/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-extract-void/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-metadata-primary-topic": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-primary-topic/-/actor-rdf-metadata-primary-topic-4.2.0.tgz", + "integrity": "sha512-5JrXy+LOjqvmYu/1P7XfCuYLk96ub+uVqoeNiFDs6AWCuvcjc9hmZ2rByWenh8/t/RW+OfvZ2aZ3sgxKLkjeRg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-metadata": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-primary-topic/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-primary-topic/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-metadata-primary-topic/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-parse-html": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-2.10.0.tgz", + "integrity": "sha512-zgImXKpc+BN1i6lQiN1Qhlb1HbKdMIeJMOys6qbzRIijdK8GkGGChwhQp7Cso3lY1Nf4K7M3jPLZeQXeED2w7g==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^2.10.0", + "@comunica/bus-rdf-parse-html": "^2.10.0", + "@comunica/core": "^2.10.0", + "@comunica/types": "^2.10.0", + "@rdfjs/types": "*", + "htmlparser2": "^9.0.0", + "readable-stream": "^4.4.2" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-microdata": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-2.10.0.tgz", + "integrity": "sha512-JLfiDauq4SmpI6TDS4HaHzI6iJe1j8lSk5FRRYK6YVEu8eO28jPmxQJiOiwbQiYqsjsV7kON/WIZSoUELoI4Ig==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^2.10.0", + "@comunica/core": "^2.10.0", + "microdata-rdf-streaming-parser": "^2.0.1" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-rdfa": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-2.10.0.tgz", + "integrity": "sha512-9K3iaws9+FGl50oZi53hqyzhwjNKZ3mIr2zg/TAJZoapKvc14cthH17zKSSJrqI/NgBStRmZhBBkXcwfu1CANw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^2.10.0", + "@comunica/core": "^2.10.0", + "rdfa-streaming-parser": "^2.0.1" + } + }, + "node_modules/@comunica/actor-rdf-parse-html-script": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-2.10.0.tgz", + "integrity": "sha512-7XYqWchDquWnBLjG7rmmY+tdE81UZ8fPCU0Hn+vI39/MikNOpaiyr/ZYFqhogWFa9SkjmH0a7idVUzmjiwKRZQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^2.10.0", + "@comunica/bus-rdf-parse-html": "^2.10.0", + "@comunica/context-entries": "^2.10.0", + "@comunica/core": "^2.10.0", + "@comunica/types": "^2.10.0", + "@rdfjs/types": "*", + "readable-stream": "^4.4.2", + "relative-to-absolute-iri": "^1.0.7" + } + }, + "node_modules/@comunica/actor-rdf-parse-jsonld": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-2.10.2.tgz", + "integrity": "sha512-K4fvD0zMU22KkQCqIFVT5Oy2FREEZ9CAo9u6kOcsMxEvg9aHGIM6hkaXR8I+1JCx1mDuEj3zQ8joR4tQh8fYCw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^2.10.2", + "@comunica/bus-rdf-parse": "^2.10.0", + "@comunica/context-entries": "^2.10.0", + "@comunica/core": "^2.10.0", + "@comunica/types": "^2.10.0", + "jsonld-context-parser": "^2.2.2", + "jsonld-streaming-parser": "^3.0.1", + "stream-to-string": "^1.2.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-n3": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-2.10.0.tgz", + "integrity": "sha512-o1MAbwJxW4Br2WCZdhFoRmAiOP4mfogeQqJ4nqlsOkoMtQ45EvLHsotb3Kqhuk5V+vsTxyK5v/a4zylGtcU7VQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^2.10.0", + "@comunica/types": "^2.10.0", + "n3": "^1.17.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-rdfxml": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-2.10.0.tgz", + "integrity": "sha512-HoJN52shXY3cvYtsS0cpin9KXpW3L7g1leebyCRSqnlnHdJv5D6G0Ep8vyt2xhquKNbOQ7LnP5VhiDiqz73XDg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^2.10.0", + "@comunica/types": "^2.10.0", + "rdfxml-streaming-parser": "^2.2.3" + } + }, + "node_modules/@comunica/actor-rdf-parse-shaclc": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-shaclc/-/actor-rdf-parse-shaclc-2.10.0.tgz", + "integrity": "sha512-i6tmuZuS+RtDiSXpQc3s/PxtCqwIguo4ANmVB20PK4VWgQgBwoPG7LlNcJ0xmuH/3Bv6C2Agn18PLF6dZX+fKw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^2.10.0", + "@comunica/types": "^2.10.0", + "@rdfjs/types": "*", + "asynciterator": "^3.8.1", + "readable-stream": "^4.4.2", + "shaclc-parse": "^1.4.0", + "stream-to-string": "^1.2.0" + } + }, + "node_modules/@comunica/actor-rdf-parse-xml-rdfa": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-2.10.0.tgz", + "integrity": "sha512-68r/6B/fEyA1/OYleVuaPq47J+g4xJcJijpdL1wEj7CqjV+Xa+sDWRpNCyLcD/e1Y/g9UQmLz0ZnSpR00PFddA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^2.10.0", + "@comunica/types": "^2.10.0", + "rdfa-streaming-parser": "^2.0.1" + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-links-next": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-links-next/-/actor-rdf-resolve-hypermedia-links-next-4.2.0.tgz", + "integrity": "sha512-fEpAlZnVKT8j2TJ9WLEotZkqTv6q/qClRP3gDSTG4KkspC01BRimeaeKcLKml2UavYQeuZMftSDoInc4N11AIQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-resolve-hypermedia-links": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-links-next/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-links-next/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-links-next/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo/-/actor-rdf-resolve-hypermedia-links-queue-fifo-4.2.0.tgz", + "integrity": "sha512-xRO7Z+AAGEA2YI2WSUuiR1XTNy2ZXBJETgW5pB/kSoNORsg1KWOtln8iRAyluReT0HuZnZq8hGGb+UCLimXQEw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-resolve-hypermedia-links-queue": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-serialize-jsonld": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-jsonld/-/actor-rdf-serialize-jsonld-4.2.0.tgz", + "integrity": "sha512-NtugnrS53bC23iWQ1Y981fy2tdjB8OMTnmvKLisQiy4TbfVEp//mNGNsKg9bGjmK7GQoMCbOw6RbO/F/AKdW1Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-serialize": "^4.2.0", + "@comunica/types": "^4.2.0", + "jsonld-streaming-serializer": "^3.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-serialize-jsonld/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-serialize-jsonld/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-serialize-n3": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-n3/-/actor-rdf-serialize-n3-4.2.0.tgz", + "integrity": "sha512-c4aQ21BtMSWS2ssK51BKEsUbg6Fb+oIPG+uOssRKQ9Gyoy0RySjJ5KkqURdGEZ7qx4mxEb3V5Nt5r4VXYm7gbA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-serialize": "^4.2.0", + "n3": "^1.17.0" + } + }, + "node_modules/@comunica/actor-rdf-serialize-shaclc": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-shaclc/-/actor-rdf-serialize-shaclc-4.2.0.tgz", + "integrity": "sha512-zQPq5DzClgxeWhR0Z34bHSZWAxCh9jD+d9fxNYC4YfvFqYELCUsR86sHlTuVs/Ri4p7Mx+3xaZqM4LXfhZQRZw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-serialize": "^4.2.0", + "arrayify-stream": "^2.0.1", + "readable-stream": "^4.5.2", + "shaclc-write": "^1.4.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-patch-sparql-update": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-patch-sparql-update/-/actor-rdf-update-hypermedia-patch-sparql-update-4.2.0.tgz", + "integrity": "sha512-PLpPYI5noKiigSTPRx2SKS5r7uWXWwBKQAxgQC679PCA50GRWsnntEJFI5r/vdEUrhjEAaTaQVvrRCovP/+A2Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-rdf-update-hypermedia": "^4.2.0", + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "rdf-string-ttl": "^1.3.2", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-patch-sparql-update/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-patch-sparql-update/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-patch-sparql-update/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-patch-sparql-update/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-put-ldp": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-put-ldp/-/actor-rdf-update-hypermedia-put-ldp-4.2.0.tgz", + "integrity": "sha512-61rAi6oReIASDszmkGuGvpz91adCYTTopznsGOIi0EthXqBCm02F4syk22s3g4wdHWuX2/u3JwQe57+w6dp/hA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-rdf-serialize": "^4.2.0", + "@comunica/bus-rdf-update-hypermedia": "^4.2.0", + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-put-ldp/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-put-ldp/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-put-ldp/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-put-ldp/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-sparql/-/actor-rdf-update-hypermedia-sparql-4.2.0.tgz", + "integrity": "sha512-OwIZni3o39RmafDuT7VSYNe0i1xme7qzdFxyBxhlMAA10dCuL0wgBFxYIgvfOP9n8LkGuhbUL1kkBjnzTjitGw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-rdf-update-hypermedia": "^4.2.0", + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "fetch-sparql-endpoint": "^5.1.0", + "rdf-string-ttl": "^1.3.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/fetch-sparql-endpoint": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-5.1.0.tgz", + "integrity": "sha512-ylROBEdVOVzaGdngq3hSGuA/cDtmRiMmPMU75dsu9xatdKEtU39vRp3HbVxdgzqDDX4HU0FnTBQ/+ciMaEBdbA==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/n3": "^1.0.0", + "@types/readable-stream": "^4.0.0", + "@types/sparqljs": "^3.0.0", + "is-stream": "^2.0.0", + "n3": "^1.0.0", + "rdf-string": "^1.0.0", + "readable-from-web": "^1.0.0", + "sparqljs": "^3.0.0", + "sparqljson-parse": "^2.0.0", + "sparqlxml-parse": "^2.0.0", + "stream-to-string": "^1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/sparqljson-parse": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.2.0.tgz", + "integrity": "sha512-2TfvNvUsaJyWfCrq3ExdDdbF9LBLzIUCricg+D1YCYbbmyTzscgCtRk4KcIyJF178DtfCt4BkKzbKl8IXMHp8w==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.1", + "@rdfjs/types": "*", + "@types/readable-stream": "^2.3.13", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/sparqljson-parse/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/sparqlxml-parse": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.1.1.tgz", + "integrity": "sha512-71sltShF6gDAzuKWEHNeij7r0Mv5VqRrvJing6W4WHJ12GRe6+t1IRTv6MeqxYN3XJmKevs7B3HCBUo7wceeJQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/sparqlxml-parse/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-hypermedia": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-quads-hypermedia/-/actor-rdf-update-quads-hypermedia-4.2.0.tgz", + "integrity": "sha512-2NskE7nzR1amNQOvneIuSEZT4ASJ7AwUkJglLyxxx9/3CZNP+C6G+j9U0rWWqaLuU0FRkU25MjsaWVS9HXqqlQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference-rdf": "^4.2.0", + "@comunica/bus-http-invalidate": "^4.2.0", + "@comunica/bus-rdf-metadata": "^4.2.0", + "@comunica/bus-rdf-metadata-extract": "^4.2.0", + "@comunica/bus-rdf-update-hypermedia": "^4.2.0", + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "lru-cache": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-hypermedia/node_modules/@comunica/actor-abstract-mediatyped": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-4.2.0.tgz", + "integrity": "sha512-+7NuPZQAi7iRJ1Cie9qqhbJjBv0/SadA/24+KrDVU4+4QM6n5usCKibA8D84Nqgt257IsrFrb2G7NndTZ6taww==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-hypermedia/node_modules/@comunica/actor-abstract-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-4.2.0.tgz", + "integrity": "sha512-WUHr9Bhr3Z7eJ2GtSGnhj1xCXCarKkC82WPorlG+RhuPuryp152GtJYtdyBIR4pEetP2hL4n+VuvHjXY80LWbQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-hypermedia/node_modules/@comunica/bus-dereference": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-4.2.0.tgz", + "integrity": "sha512-KWaGcrW9B0tWbgtG8gDK6nosdl94unyaaX5eCDSjTXqN6ZZA+NEDHbzRWypxcxbzMugAvyNwcAmC28KW+h9KCQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-hypermedia/node_modules/@comunica/bus-dereference-rdf": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-4.2.0.tgz", + "integrity": "sha512-RQvj/BMP9QD9v3ZR4vIYLLlRWawAhXDzCOZZ6oJnhmxSOW0NfdL3h5rFI03HVPpDfyWtV4ACKK8FNe6gOIeXZw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-hypermedia/node_modules/@comunica/bus-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-4.2.0.tgz", + "integrity": "sha512-P92ACuOk2zicOfNDiRc8xAA/u3yw6pHKQDZWRs/XXJJQIyEU+9CAKA6URHcb0+ffnVtxHtiiqI2nsra7MRadIg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-hypermedia/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-hypermedia/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-hypermedia/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-hypermedia/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-rdf-update-quads-rdfjs-store": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-quads-rdfjs-store/-/actor-rdf-update-quads-rdfjs-store-4.2.0.tgz", + "integrity": "sha512-gLBHHa2DMELJM/h0tEUM7LEQGyVG8pxzGWXHGAFT4892Xyj/Omr8Jask/w7ZYTdYehNjYiyUyB7vvp3wXO6Hiw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "event-emitter-promisify": "^1.1.0", + "rdf-string": "^1.6.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-rdfjs-store/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-rdfjs-store/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-rdfjs-store/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-rdf-update-quads-rdfjs-store/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/actor-term-comparator-factory-expression-evaluator": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-term-comparator-factory-expression-evaluator/-/actor-term-comparator-factory-expression-evaluator-4.2.0.tgz", + "integrity": "sha512-wgt6nZGC0/WhBgtBqpLkiZgN10VUaqL14AMZg3HsMkdb02/+uksWlWjmRDW9zaKYvgcWAaYbODpciSyqlRoZEA==", + "license": "MIT", + "dependencies": { + "@comunica/actor-expression-evaluator-factory-default": "^4.2.0", + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/bus-term-comparator-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/actor-term-comparator-factory-expression-evaluator/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-term-comparator-factory-expression-evaluator/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-term-comparator-factory-expression-evaluator/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/actor-term-comparator-factory-expression-evaluator/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-bindings-aggregator-factory": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-bindings-aggregator-factory/-/bus-bindings-aggregator-factory-4.2.0.tgz", + "integrity": "sha512-Rwu4AP2OwXbjOHHDHi8nSit1xDcuL/PsrWjhKvGanQGFgRe/xB8TVfOfzLLpnFy1WELFsbVbV55ybKEF5N2Gug==", + "license": "MIT", + "dependencies": { + "@comunica/bus-expression-evaluator-factory": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "@rdfjs/types": "*", + "rdf-string": "^1.6.3", + "sparqlalgebrajs": "^4.2.0" + } + }, + "node_modules/@comunica/bus-bindings-aggregator-factory/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-bindings-aggregator-factory/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-bindings-aggregator-factory/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-bindings-aggregator-factory/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-context-preprocess": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-context-preprocess/-/bus-context-preprocess-4.2.0.tgz", + "integrity": "sha512-Au+RmbJddaHpWulfQXSS+FkijFai96oOuk1Jrq4Dw5iOPvY4gKFI1/iK8OnkU0wn1vINyCKTPHCLx6lUSHu4fw==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-context-preprocess/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-context-preprocess/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-context-preprocess/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-dereference": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-2.10.0.tgz", + "integrity": "sha512-nWyQXiH7zbiPTVttWVKJHykhV4IuahfhfUwPx3Op+cVsK489Su84dnGeSmPkxTAFFuxe6wU6ZEH4i7PDu48YvQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^2.10.0", + "@comunica/actor-abstract-parse": "^2.10.0", + "@comunica/context-entries": "^2.10.0", + "@comunica/core": "^2.10.0", + "@comunica/types": "^2.10.0", + "readable-stream": "^4.4.2" + } + }, + "node_modules/@comunica/bus-dereference-rdf": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-2.10.0.tgz", + "integrity": "sha512-WY/wPmFpO76wwJ2D5Aus43ZbYnBRLvQ0EOp4yywO0lBiq6F0JisjCVCM4EtWouOEAAfqEoIjHXGyC3gPWqm+SQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^2.10.0", + "@comunica/bus-rdf-parse": "^2.10.0", + "@comunica/core": "^2.10.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/bus-expression-evaluator-factory": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-expression-evaluator-factory/-/bus-expression-evaluator-factory-4.2.0.tgz", + "integrity": "sha512-wrtC4deJU6sd6eDBYiP0fQ76vAZSIRzaB55qtBWjYxYlMkEnXHhOAiXyhFSOeELa0t9ynkiP6+uqbwso5Vf3KA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.2.0" + } + }, + "node_modules/@comunica/bus-expression-evaluator-factory/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-expression-evaluator-factory/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-expression-evaluator-factory/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-function-factory": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-function-factory/-/bus-function-factory-4.2.0.tgz", + "integrity": "sha512-sxMImvteTSt/5IXYmJ7Gz2OjxIr0XJB7yhBcbMFw1JW2C7yTFl2MHaH8ED+95Ap4xtDUQNx4P70P4Odq9K6Gaw==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-expression-evaluator": "^4.2.0", + "sparqlalgebrajs": "^4.2.0" + } + }, + "node_modules/@comunica/bus-function-factory/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-function-factory/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-function-factory/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-function-factory/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-hash-bindings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-hash-bindings/-/bus-hash-bindings-4.2.0.tgz", + "integrity": "sha512-mQ3EmvT/IKBSpa+37PyB1iMwIObpTQss2hqgLmTkM1P8HfrVoGYvr3/LHbbB8lFhhEvaY2O4OfaCXMWsJbmP7g==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-hash-bindings/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-hash-bindings/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-hash-bindings/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-hash-quads": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-hash-quads/-/bus-hash-quads-4.2.0.tgz", + "integrity": "sha512-vSydgS2a6UykuleSAdpx4SrZT7Gim6ocR55NUYmZdqNYwkBZ9/7PfRYsKpo6i3NTaXv8WArIg7p+KuDUZIDmIQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "rdf-data-factory": "^1.1.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-hash-quads/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-hash-quads/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-hash-quads/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-http": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-2.10.2.tgz", + "integrity": "sha512-MAYRF6uEBAuJ9dCPW2Uyne7w3lNwXFXKfa14XuPG5DFTDpgo/Z2pWupPrBsA1eIWMNJ6WOG6QyEv4rllSIBqlg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0", + "@smessie/readable-web-to-node-stream": "^3.0.3", + "is-stream": "^2.0.1", + "readable-stream-node-to-web": "^1.0.1", + "web-streams-ponyfill": "^1.4.2" + } + }, + "node_modules/@comunica/bus-http-invalidate": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http-invalidate/-/bus-http-invalidate-4.2.0.tgz", + "integrity": "sha512-HsWj+AMPHcshRv+srt3r1I4WJCVgITrHFqr/GPCOrXibLpbA9ECoQ20npb5hO/MJIOsG6wvWaqIbv6loOwVOqA==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-http-invalidate/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-http-invalidate/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-http-invalidate/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-init": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-2.10.0.tgz", + "integrity": "sha512-hJejHa8sLVhQLFlduCVnhOd5aW3FCEz8wmWjyeLI3kiHFaQibnGVMhUuuNRX5f8bnnPuTdEiHc1nnYHuSi+j8A==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0", + "readable-stream": "^4.4.2" + } + }, + "node_modules/@comunica/bus-merge-bindings-context": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-merge-bindings-context/-/bus-merge-bindings-context-4.2.0.tgz", + "integrity": "sha512-iORfEkZ4Z1tFlh7jvZtB7pfr51z1mVn03LJSMwKo4Y8nke+MDXtrSpUd0/KLJ9Y5YF9F+2JodbzWoiLEE4NbQA==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-merge-bindings-context/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-merge-bindings-context/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-merge-bindings-context/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-optimize-query-operation": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-optimize-query-operation/-/bus-optimize-query-operation-4.2.0.tgz", + "integrity": "sha512-Dotr1353dJZQ+J7PqHjSH/EheClMEWZ+ZyHYYrYx21sCJvaGqY4X+qHY2yBTnkl/2RakbQu/PLVnVbkwtYSGxQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-optimize-query-operation/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-optimize-query-operation/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-optimize-query-operation/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-query-operation": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-operation/-/bus-query-operation-4.2.0.tgz", + "integrity": "sha512-trefCh+bAEQBOx5RKrtvyGcTeR41tsemyqVg8m/gYCpz4tO26u9EXWjxtTdjU81Lopv2S4l4VpmlDFOXLSBTZA==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-metadata": "^4.2.0", + "@rdfjs/types": "*", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-operation/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-operation/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-operation/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-operation/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-query-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-parse/-/bus-query-parse-4.2.0.tgz", + "integrity": "sha512-4CbzXpi+B6JrSprUxiZTzfBsY50sDc48/t3HFeX4dkux52tyuv4Flo4RPq2Ffs4Sb1XBo7WcI7GIuR6jlfGEwg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-parse/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-parse/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-parse/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-query-process": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-process/-/bus-query-process-4.2.0.tgz", + "integrity": "sha512-g20Ra9VoGBdTLVS10zU0v0V8uS/UDxBaqF3m1tvvxyLWaaDVluURJkGI9H809nSr7ID2z9zmpYgl+9GT9SNNKQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-process/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-process/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-process/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-query-result-serialize": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-result-serialize/-/bus-query-result-serialize-4.2.0.tgz", + "integrity": "sha512-vF7NGsoVX69KfcVdX3seLPhGEO8xFVRFDglD6i5PR9TtFaI6X0IKfwm0yvNIi99M36RczzdWxrCBwY92cW7Rvg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-result-serialize/node_modules/@comunica/actor-abstract-mediatyped": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-4.2.0.tgz", + "integrity": "sha512-+7NuPZQAi7iRJ1Cie9qqhbJjBv0/SadA/24+KrDVU4+4QM6n5usCKibA8D84Nqgt257IsrFrb2G7NndTZ6taww==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-result-serialize/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-result-serialize/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-result-serialize/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-query-source-identify": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-source-identify/-/bus-query-source-identify-4.2.0.tgz", + "integrity": "sha512-lULfROk9jV+jL5M1axwaQUrlG4kMAuqSUH3bcheTUAKsJo7jo+/omI0SfOMr/shczKrYn9lgHih2Oh9CmVnGEA==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@comunica/utils-iterator": "^4.0.1", + "@comunica/utils-metadata": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "rdf-string": "^1.6.3", + "rdf-terms": "^1.11.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-source-identify-hypermedia": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-source-identify-hypermedia/-/bus-query-source-identify-hypermedia-4.2.0.tgz", + "integrity": "sha512-xuahx4w8o7gSUxKhkrmMOaPyoR5UeK2B6Tr21fLdd3kjfYnY13XZU+mjxrPIJNPfPRxYyiFcJ5xJjSE/6jWIIw==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-source-identify-hypermedia/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-source-identify-hypermedia/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-source-identify-hypermedia/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-query-source-identify/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-source-identify/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-query-source-identify/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-join": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join/-/bus-rdf-join-4.2.0.tgz", + "integrity": "sha512-gWpKLcC/8ffWr+snVcqx8UuLthuaigRc9YIN4TVDOZ5Hqv7do/Wy7bgctGjGGsOsTl7rhvPGHFnP2dwAgg8Ayg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join-entries-sort": "^4.2.0", + "@comunica/bus-rdf-join-selectivity": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-iterator": "^4.0.1", + "@comunica/utils-metadata": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-join-entries-sort": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join-entries-sort/-/bus-rdf-join-entries-sort-4.2.0.tgz", + "integrity": "sha512-ngUYf7iq9be3DbzfAcplCrjb3Nah5Y3FN71+pZt2c8icBl7/GT209iDmmDwexm7qz/xLTuwfQTdGuVci9g1djg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-join-entries-sort/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-join-entries-sort/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-join-entries-sort/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-join-selectivity": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join-selectivity/-/bus-rdf-join-selectivity-4.2.0.tgz", + "integrity": "sha512-GQwrbWqx+ga843TfrKwSLJ+Y0HiEhwkYMRQWRlsJnA3AgKdkJb2u6CpU1eHjQwEgcnDC4xYatPnhu/GJ/LEIJw==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-accuracy": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-join-selectivity/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-join-selectivity/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-join-selectivity/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-join/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-join/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-join/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-join/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-metadata": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata/-/bus-rdf-metadata-4.2.0.tgz", + "integrity": "sha512-LUcRGA4jlBPrr4X2DcDsBIasJYEq6awKplnFU4nBJHKC0QZgQC1DwsTvoxCHKvdQMkAJ6lAbbzkgTRtYRfPiHA==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-metadata-accumulate": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata-accumulate/-/bus-rdf-metadata-accumulate-4.2.0.tgz", + "integrity": "sha512-urv343Sbmez5xk6djkXpIMq6o1M/4drdBTVH8AzmTx4RSilAPYBnSneC3TS068NQDeFG2XjdJJbhKs3zU4ko4Q==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-metadata-accumulate/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-metadata-accumulate/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-metadata-accumulate/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-metadata-extract": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata-extract/-/bus-rdf-metadata-extract-4.2.0.tgz", + "integrity": "sha512-/cVqE2AqMZwyv4hRs/XuqcHQ0fOFzOT33+h/S1mVpSsycKI1VtYX4Mv7my9sdE2EHicYRAnxwUDlrS4w7X2HHg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-metadata-extract/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-metadata-extract/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-metadata-extract/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-metadata/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-metadata/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-metadata/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-parse": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-2.10.0.tgz", + "integrity": "sha512-EgCMZACfTG/+mayQpExWt0HoBT32BBVC1aS1lC43fXKBTxJ8kYrSrorVUuMACoh4dQVGTb+7j1j4K0hGNVzXGA==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^2.10.0", + "@comunica/actor-abstract-parse": "^2.10.0", + "@comunica/core": "^2.10.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/bus-rdf-parse-html": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-2.10.0.tgz", + "integrity": "sha512-RZliz4TtKP63QggoohGuIkGb6lq0BoYJ4aztKtGldWtPAVP/pdEvlDpiZWLB/j19g7S2aDLNY/lJtZ5efM1tHQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/bus-rdf-resolve-hypermedia-links": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia-links/-/bus-rdf-resolve-hypermedia-links-4.2.0.tgz", + "integrity": "sha512-Lpx5bVG8CLyIIw4jesvt6ZjgFmV5+veagePa8guBgurWErkuGryPQhrCUqqdr4hqHfbgzd5FlfunBrY9Plgl4g==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-resolve-hypermedia-links-queue": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia-links-queue/-/bus-rdf-resolve-hypermedia-links-queue-4.2.0.tgz", + "integrity": "sha512-57MEes59Yte57j9Wf5L9N8STXxJFjwcuNoC97PkKTH0jSARL82DDgRseJBs2RxjL0L2Yg0+naCgCzo2xnnnAKg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-resolve-hypermedia-links-queue/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-resolve-hypermedia-links-queue/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-resolve-hypermedia-links-queue/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-resolve-hypermedia-links/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-resolve-hypermedia-links/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-resolve-hypermedia-links/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-serialize": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-serialize/-/bus-rdf-serialize-4.2.0.tgz", + "integrity": "sha512-F/U1I6qNQlwCzoIOwW1ZbCW6gUzPRHI53+n2qk/Kvnla0e/V/4eYQfd1FhVsNxO2X1jhWhG+sRDKb+cmpRjPBQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-serialize/node_modules/@comunica/actor-abstract-mediatyped": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-4.2.0.tgz", + "integrity": "sha512-+7NuPZQAi7iRJ1Cie9qqhbJjBv0/SadA/24+KrDVU4+4QM6n5usCKibA8D84Nqgt257IsrFrb2G7NndTZ6taww==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-serialize/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-serialize/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-serialize/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-update-hypermedia": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-update-hypermedia/-/bus-rdf-update-hypermedia-4.2.0.tgz", + "integrity": "sha512-70ocE868I/9n7Z7tNIYCIT8y/hcUkvf/Qbo3WfGH3Z+8YYau2mRKQOAC4jt+sc2dDJFHoiS7psqUUbAZ4P6pdA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-update-quads": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-update-hypermedia/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-update-hypermedia/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-update-hypermedia/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-rdf-update-quads": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-update-quads/-/bus-rdf-update-quads-4.2.0.tgz", + "integrity": "sha512-c24G5zbl8+m3t8WOCcMwsJMoEyF6zIXSiI1Y3EacRHdw0KjdbyempS/8dauaHuyNfjWbrYOM0nEMep3Sn944+Q==", + "license": "MIT", + "dependencies": { + "@comunica/actor-context-preprocess-query-source-skolemize": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-update-quads/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-update-quads/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-update-quads/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-rdf-update-quads/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/bus-term-comparator-factory": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-term-comparator-factory/-/bus-term-comparator-factory-4.2.0.tgz", + "integrity": "sha512-YBz5lqJSljR99xOP3uEkkQjqE/4YbVbRBtaEygpaogebczvpb/rhL3bQUh1gYEWNT7co/iNw+hz2dHipYQaVUg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + } + }, + "node_modules/@comunica/bus-term-comparator-factory/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-term-comparator-factory/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/bus-term-comparator-factory/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/config-query-sparql": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@comunica/config-query-sparql/-/config-query-sparql-2.7.0.tgz", + "integrity": "sha512-rMnFgT7cz9+0z7wV4OzIMY5qM9/Z0mTGrR8y2JokoHyyTcBGOSajFmy61XCSLMCsLLG8qDXsJ4ClCCky3TGfqA==", + "license": "MIT" + }, + "node_modules/@comunica/context-entries": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-2.10.0.tgz", + "integrity": "sha512-lmCYCcXxW8C6ecFH2whZCt31NT1ejb0P/sbytK7f4ctyA06Q8iYFEcYE4eWOXMdpfkwkcnz31x9XL77OGeSC2Q==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0", + "@comunica/types": "^2.10.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.2.0" + } + }, + "node_modules/@comunica/core": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-2.10.0.tgz", + "integrity": "sha512-onsGs2iKHUPRxxMOdx42vdxslk8q9FQZdRjQtHJ6SGiCpJwIL9ciBgPIOl2RL2YfzXHemr/0umeNOppRDcWhJA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^2.10.0", + "immutable": "^4.1.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/@comunica/logger-pretty": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/logger-pretty/-/logger-pretty-4.2.0.tgz", + "integrity": "sha512-PkiAv13icKnq5JydB7W1mBR4tc+mxpZUsnWG9tc/6V26ayd/W42FZPWDFUk7+jqdxa0oHPsaq6YrOeGFYmnsUA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "object-inspect": "^1.12.2", + "process": "^0.11.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/logger-pretty/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/logger-pretty/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/logger-void": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/logger-void/-/logger-void-4.2.0.tgz", + "integrity": "sha512-HHutmKwSh32eX+HQkPRyWc2etyWz1ZpkdVUIn60kANpfzGz9J+tWMqUZvhU4IBWrt8ezcpEsNFSXYa1XejsjJA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/logger-void/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/logger-void/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/mediator-all": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-all/-/mediator-all-4.2.0.tgz", + "integrity": "sha512-R8p5zbj+NJwpIUexNkDudUFVogheNJJRE4vHpQ3roPBWJ6hOIDSg80lGAmHeAKswKd7RkhoyeurGvwVtfGA6ug==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediator-all/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediator-all/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediator-all/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/mediator-combine-pipeline": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-pipeline/-/mediator-combine-pipeline-2.10.0.tgz", + "integrity": "sha512-j7+/oUlbhKB4Rq6g9oNKU+e9cQL8U9z8tAUNhoXUSHajcr4huj0t1+riaOD109/DRWhV793ILhBDzgiZbHd7DA==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0", + "@comunica/types": "^2.10.0" + } + }, + "node_modules/@comunica/mediator-combine-union": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-2.10.0.tgz", + "integrity": "sha512-QbP4zP1i6nMDZ8teC0RoTz5E8pOpxDhWPBr1ylb2jzPUjPpMgrnbHYTondlN0Oau3SMEehItojg/LYDtPOP/GQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0" + } + }, + "node_modules/@comunica/mediator-join-coefficients-fixed": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-join-coefficients-fixed/-/mediator-join-coefficients-fixed-4.2.0.tgz", + "integrity": "sha512-7XyjxHfONutzwiPfdIjRMooZnkqd1N14gaOynl4Lp8wxVcEU0GNDkk4A/axcIR3APRmSWY6fgw/FKkcbEzFtKw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-join": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-join-coefficients": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediator-join-coefficients-fixed/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediator-join-coefficients-fixed/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediator-join-coefficients-fixed/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediator-join-coefficients-fixed/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/mediator-number": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-2.10.0.tgz", + "integrity": "sha512-0T8D1HGTu5Sd8iKb2dBjc6VRc/U4A15TAN6m561ra9pFlP+w31kby0ZYP6WWBHBobbUsX1LCvnbRQaAC4uWwVw==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0" + } + }, + "node_modules/@comunica/mediator-race": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-2.10.0.tgz", + "integrity": "sha512-JiEtOLMkPnbjSLabVpE4VqDbu2ZKKnkUdATGBeWX+o+MjPw6c0hhw01RG4WY2rQhDyNl++nLQe3EowQh8xW9TA==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0" + } + }, + "node_modules/@comunica/mediatortype-accuracy": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-accuracy/-/mediatortype-accuracy-4.2.0.tgz", + "integrity": "sha512-IAjY98uTTloCaAQuc/CYR1eK4NxX2oLXRexf2JtpiUMO79JM9MXZjFVWpibNZpH5fSqXPb9BQ/T93BnALVwbLg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediatortype-accuracy/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediatortype-accuracy/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediatortype-accuracy/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/mediatortype-join-coefficients": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-join-coefficients/-/mediatortype-join-coefficients-4.2.0.tgz", + "integrity": "sha512-vTMn37N7Stj9LXkbWG9WQTOcCX8Qixa3wKv8a86nLELnjPR2uL59mxdelr1GXURuboSTJuKOMJZGNXyyEAewtQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediatortype-join-coefficients/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediatortype-join-coefficients/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/mediatortype-join-coefficients/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/mediatortype-time": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-2.10.0.tgz", + "integrity": "sha512-nBz1exxrja1Tj8KSlSevG4Hw2u09tTh6gtNfVjI76i/e7muu4RUWVhi9b8PcwBNAfuUqRl+5OgOSa2X4W+6QlA==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^2.10.0" + } + }, + "node_modules/@comunica/query-sparql": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/query-sparql/-/query-sparql-4.3.0.tgz", + "integrity": "sha512-Bq8OV1Ve0FHdpnZtHF9abhmenmGE3s3B9+0ggvfss0QVYZ+hJRONSuIHC3arbuooyK2sX/eSXnLuyUWBV+KzXg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-bindings-aggregator-factory-average": "^4.2.0", + "@comunica/actor-bindings-aggregator-factory-count": "^4.2.0", + "@comunica/actor-bindings-aggregator-factory-group-concat": "^4.2.0", + "@comunica/actor-bindings-aggregator-factory-max": "^4.2.0", + "@comunica/actor-bindings-aggregator-factory-min": "^4.2.0", + "@comunica/actor-bindings-aggregator-factory-sample": "^4.2.0", + "@comunica/actor-bindings-aggregator-factory-sum": "^4.2.0", + "@comunica/actor-bindings-aggregator-factory-wildcard-count": "^4.2.0", + "@comunica/actor-context-preprocess-convert-shortcuts": "^4.2.0", + "@comunica/actor-context-preprocess-query-source-identify": "^4.2.0", + "@comunica/actor-context-preprocess-query-source-skolemize": "^4.2.0", + "@comunica/actor-context-preprocess-set-defaults": "^4.2.0", + "@comunica/actor-context-preprocess-source-to-destination": "^4.2.0", + "@comunica/actor-dereference-fallback": "^4.2.0", + "@comunica/actor-dereference-http": "^4.2.0", + "@comunica/actor-dereference-rdf-parse": "^4.2.0", + "@comunica/actor-expression-evaluator-factory-default": "^4.2.0", + "@comunica/actor-function-factory-expression-bnode": "^4.2.0", + "@comunica/actor-function-factory-expression-bound": "^4.2.0", + "@comunica/actor-function-factory-expression-coalesce": "^4.2.0", + "@comunica/actor-function-factory-expression-concat": "^4.2.0", + "@comunica/actor-function-factory-expression-extensions": "^4.2.0", + "@comunica/actor-function-factory-expression-if": "^4.2.0", + "@comunica/actor-function-factory-expression-in": "^4.2.0", + "@comunica/actor-function-factory-expression-logical-and": "^4.2.0", + "@comunica/actor-function-factory-expression-logical-or": "^4.2.0", + "@comunica/actor-function-factory-expression-not-in": "^4.2.0", + "@comunica/actor-function-factory-expression-same-term": "^4.2.0", + "@comunica/actor-function-factory-term-abs": "^4.2.0", + "@comunica/actor-function-factory-term-addition": "^4.2.0", + "@comunica/actor-function-factory-term-ceil": "^4.2.0", + "@comunica/actor-function-factory-term-contains": "^4.2.0", + "@comunica/actor-function-factory-term-datatype": "^4.2.0", + "@comunica/actor-function-factory-term-day": "^4.2.0", + "@comunica/actor-function-factory-term-division": "^4.2.0", + "@comunica/actor-function-factory-term-encode-for-uri": "^4.2.0", + "@comunica/actor-function-factory-term-equality": "^4.2.0", + "@comunica/actor-function-factory-term-floor": "^4.2.0", + "@comunica/actor-function-factory-term-greater-than": "^4.2.0", + "@comunica/actor-function-factory-term-greater-than-equal": "^4.2.0", + "@comunica/actor-function-factory-term-hours": "^4.2.0", + "@comunica/actor-function-factory-term-inequality": "^4.2.0", + "@comunica/actor-function-factory-term-iri": "^4.2.0", + "@comunica/actor-function-factory-term-is-blank": "^4.2.0", + "@comunica/actor-function-factory-term-is-iri": "^4.2.0", + "@comunica/actor-function-factory-term-is-literal": "^4.2.0", + "@comunica/actor-function-factory-term-is-numeric": "^4.2.0", + "@comunica/actor-function-factory-term-is-triple": "^4.2.0", + "@comunica/actor-function-factory-term-lang": "^4.2.0", + "@comunica/actor-function-factory-term-langmatches": "^4.2.0", + "@comunica/actor-function-factory-term-lcase": "^4.2.0", + "@comunica/actor-function-factory-term-lesser-than": "^4.2.0", + "@comunica/actor-function-factory-term-lesser-than-equal": "^4.2.0", + "@comunica/actor-function-factory-term-md5": "^4.2.0", + "@comunica/actor-function-factory-term-minutes": "^4.2.0", + "@comunica/actor-function-factory-term-month": "^4.2.0", + "@comunica/actor-function-factory-term-multiplication": "^4.2.0", + "@comunica/actor-function-factory-term-not": "^4.2.0", + "@comunica/actor-function-factory-term-now": "^4.2.0", + "@comunica/actor-function-factory-term-object": "^4.2.0", + "@comunica/actor-function-factory-term-predicate": "^4.2.0", + "@comunica/actor-function-factory-term-rand": "^4.2.0", + "@comunica/actor-function-factory-term-regex": "^4.2.0", + "@comunica/actor-function-factory-term-replace": "^4.2.0", + "@comunica/actor-function-factory-term-round": "^4.2.0", + "@comunica/actor-function-factory-term-seconds": "^4.2.0", + "@comunica/actor-function-factory-term-sha1": "^4.2.0", + "@comunica/actor-function-factory-term-sha256": "^4.2.0", + "@comunica/actor-function-factory-term-sha384": "^4.2.0", + "@comunica/actor-function-factory-term-sha512": "^4.2.0", + "@comunica/actor-function-factory-term-str": "^4.2.0", + "@comunica/actor-function-factory-term-str-after": "^4.2.0", + "@comunica/actor-function-factory-term-str-before": "^4.2.0", + "@comunica/actor-function-factory-term-str-dt": "^4.2.0", + "@comunica/actor-function-factory-term-str-ends": "^4.2.0", + "@comunica/actor-function-factory-term-str-lang": "^4.2.0", + "@comunica/actor-function-factory-term-str-len": "^4.2.0", + "@comunica/actor-function-factory-term-str-starts": "^4.2.0", + "@comunica/actor-function-factory-term-str-uuid": "^4.2.0", + "@comunica/actor-function-factory-term-sub-str": "^4.2.0", + "@comunica/actor-function-factory-term-subject": "^4.2.0", + "@comunica/actor-function-factory-term-subtraction": "^4.2.0", + "@comunica/actor-function-factory-term-timezone": "^4.2.0", + "@comunica/actor-function-factory-term-triple": "^4.2.0", + "@comunica/actor-function-factory-term-tz": "^4.2.0", + "@comunica/actor-function-factory-term-ucase": "^4.2.0", + "@comunica/actor-function-factory-term-unary-minus": "^4.2.0", + "@comunica/actor-function-factory-term-unary-plus": "^4.2.0", + "@comunica/actor-function-factory-term-uuid": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-boolean": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-date": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-datetime": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-day-time-duration": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-decimal": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-double": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-duration": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-float": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-integer": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-string": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-time": "^4.2.0", + "@comunica/actor-function-factory-term-xsd-to-year-month-duration": "^4.2.0", + "@comunica/actor-function-factory-term-year": "^4.2.0", + "@comunica/actor-hash-bindings-murmur": "^4.2.0", + "@comunica/actor-hash-quads-murmur": "^4.2.0", + "@comunica/actor-http-fetch": "^4.2.0", + "@comunica/actor-http-limit-rate": "^4.2.0", + "@comunica/actor-http-proxy": "^4.2.0", + "@comunica/actor-http-retry": "^4.2.0", + "@comunica/actor-http-wayback": "^4.2.0", + "@comunica/actor-init-query": "^4.3.0", + "@comunica/actor-optimize-query-operation-assign-sources-exhaustive": "^4.2.0", + "@comunica/actor-optimize-query-operation-bgp-to-join": "^4.2.0", + "@comunica/actor-optimize-query-operation-construct-distinct": "^4.2.0", + "@comunica/actor-optimize-query-operation-describe-to-constructs-subject": "^4.2.0", + "@comunica/actor-optimize-query-operation-filter-pushdown": "^4.2.0", + "@comunica/actor-optimize-query-operation-group-sources": "^4.2.0", + "@comunica/actor-optimize-query-operation-join-bgp": "^4.2.0", + "@comunica/actor-optimize-query-operation-join-connected": "^4.2.0", + "@comunica/actor-optimize-query-operation-prune-empty-source-operations": "^4.2.0", + "@comunica/actor-optimize-query-operation-rewrite-add": "^4.2.0", + "@comunica/actor-optimize-query-operation-rewrite-copy": "^4.2.0", + "@comunica/actor-optimize-query-operation-rewrite-move": "^4.2.0", + "@comunica/actor-query-operation-ask": "^4.2.0", + "@comunica/actor-query-operation-bgp-join": "^4.2.0", + "@comunica/actor-query-operation-construct": "^4.2.0", + "@comunica/actor-query-operation-distinct-identity": "^4.3.0", + "@comunica/actor-query-operation-extend": "^4.2.0", + "@comunica/actor-query-operation-filter": "^4.2.0", + "@comunica/actor-query-operation-from-quad": "^4.2.0", + "@comunica/actor-query-operation-group": "^4.2.0", + "@comunica/actor-query-operation-join": "^4.2.0", + "@comunica/actor-query-operation-leftjoin": "^4.2.0", + "@comunica/actor-query-operation-minus": "^4.2.0", + "@comunica/actor-query-operation-nop": "^4.2.0", + "@comunica/actor-query-operation-orderby": "^4.2.0", + "@comunica/actor-query-operation-path-alt": "^4.3.0", + "@comunica/actor-query-operation-path-inv": "^4.3.0", + "@comunica/actor-query-operation-path-link": "^4.3.0", + "@comunica/actor-query-operation-path-nps": "^4.3.0", + "@comunica/actor-query-operation-path-one-or-more": "^4.3.0", + "@comunica/actor-query-operation-path-seq": "^4.3.0", + "@comunica/actor-query-operation-path-zero-or-more": "^4.3.0", + "@comunica/actor-query-operation-path-zero-or-one": "^4.3.0", + "@comunica/actor-query-operation-project": "^4.2.0", + "@comunica/actor-query-operation-reduced-hash": "^4.2.0", + "@comunica/actor-query-operation-service": "^4.2.0", + "@comunica/actor-query-operation-slice": "^4.2.0", + "@comunica/actor-query-operation-source": "^4.2.0", + "@comunica/actor-query-operation-union": "^4.2.0", + "@comunica/actor-query-operation-update-clear": "^4.2.0", + "@comunica/actor-query-operation-update-compositeupdate": "^4.2.0", + "@comunica/actor-query-operation-update-create": "^4.2.0", + "@comunica/actor-query-operation-update-deleteinsert": "^4.2.0", + "@comunica/actor-query-operation-update-drop": "^4.2.0", + "@comunica/actor-query-operation-update-load": "^4.2.0", + "@comunica/actor-query-operation-values": "^4.2.0", + "@comunica/actor-query-parse-graphql": "^4.2.0", + "@comunica/actor-query-parse-sparql": "^4.2.0", + "@comunica/actor-query-process-explain-logical": "^4.2.0", + "@comunica/actor-query-process-explain-parsed": "^4.2.0", + "@comunica/actor-query-process-explain-physical": "^4.2.0", + "@comunica/actor-query-process-sequential": "^4.2.0", + "@comunica/actor-query-result-serialize-json": "^4.2.0", + "@comunica/actor-query-result-serialize-rdf": "^4.2.0", + "@comunica/actor-query-result-serialize-simple": "^4.2.0", + "@comunica/actor-query-result-serialize-sparql-csv": "^4.2.0", + "@comunica/actor-query-result-serialize-sparql-json": "^4.2.0", + "@comunica/actor-query-result-serialize-sparql-tsv": "^4.2.0", + "@comunica/actor-query-result-serialize-sparql-xml": "^4.2.0", + "@comunica/actor-query-result-serialize-stats": "^4.2.0", + "@comunica/actor-query-result-serialize-table": "^4.2.0", + "@comunica/actor-query-result-serialize-tree": "^4.2.0", + "@comunica/actor-query-source-identify-hypermedia": "^4.3.0", + "@comunica/actor-query-source-identify-hypermedia-none": "^4.3.0", + "@comunica/actor-query-source-identify-hypermedia-qpf": "^4.2.0", + "@comunica/actor-query-source-identify-hypermedia-sparql": "^4.2.0", + "@comunica/actor-query-source-identify-rdfjs": "^4.3.0", + "@comunica/actor-query-source-identify-serialized": "^4.2.0", + "@comunica/actor-rdf-join-entries-sort-cardinality": "^4.2.0", + "@comunica/actor-rdf-join-entries-sort-selectivity": "^4.2.0", + "@comunica/actor-rdf-join-inner-hash": "^4.2.0", + "@comunica/actor-rdf-join-inner-multi-bind": "^4.2.0", + "@comunica/actor-rdf-join-inner-multi-bind-source": "^4.2.0", + "@comunica/actor-rdf-join-inner-multi-empty": "^4.2.0", + "@comunica/actor-rdf-join-inner-multi-smallest": "^4.2.0", + "@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings": "^4.2.0", + "@comunica/actor-rdf-join-inner-nestedloop": "^4.2.0", + "@comunica/actor-rdf-join-inner-none": "^4.2.0", + "@comunica/actor-rdf-join-inner-single": "^4.2.0", + "@comunica/actor-rdf-join-inner-symmetrichash": "^4.2.0", + "@comunica/actor-rdf-join-minus-hash": "^4.2.0", + "@comunica/actor-rdf-join-optional-bind": "^4.2.0", + "@comunica/actor-rdf-join-optional-hash": "^4.2.0", + "@comunica/actor-rdf-join-optional-nestedloop": "^4.2.0", + "@comunica/actor-rdf-join-selectivity-variable-counting": "^4.2.0", + "@comunica/actor-rdf-metadata-accumulate-cardinality": "^4.2.0", + "@comunica/actor-rdf-metadata-accumulate-pagesize": "^4.2.0", + "@comunica/actor-rdf-metadata-accumulate-requesttime": "^4.2.0", + "@comunica/actor-rdf-metadata-all": "^4.2.0", + "@comunica/actor-rdf-metadata-extract-allow-http-methods": "^4.2.0", + "@comunica/actor-rdf-metadata-extract-hydra-controls": "^4.2.0", + "@comunica/actor-rdf-metadata-extract-hydra-count": "^4.2.0", + "@comunica/actor-rdf-metadata-extract-hydra-pagesize": "^4.2.0", + "@comunica/actor-rdf-metadata-extract-patch-sparql-update": "^4.2.0", + "@comunica/actor-rdf-metadata-extract-put-accepted": "^4.2.0", + "@comunica/actor-rdf-metadata-extract-request-time": "^4.2.0", + "@comunica/actor-rdf-metadata-extract-sparql-service": "^4.2.0", + "@comunica/actor-rdf-metadata-extract-void": "^4.2.0", + "@comunica/actor-rdf-metadata-primary-topic": "^4.2.0", + "@comunica/actor-rdf-parse-html": "^4.2.0", + "@comunica/actor-rdf-parse-html-microdata": "^4.2.0", + "@comunica/actor-rdf-parse-html-rdfa": "^4.2.0", + "@comunica/actor-rdf-parse-html-script": "^4.2.0", + "@comunica/actor-rdf-parse-jsonld": "^4.2.0", + "@comunica/actor-rdf-parse-n3": "^4.3.0", + "@comunica/actor-rdf-parse-rdfxml": "^4.2.0", + "@comunica/actor-rdf-parse-shaclc": "^4.2.0", + "@comunica/actor-rdf-parse-xml-rdfa": "^4.2.0", + "@comunica/actor-rdf-resolve-hypermedia-links-next": "^4.2.0", + "@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo": "^4.2.0", + "@comunica/actor-rdf-serialize-jsonld": "^4.2.0", + "@comunica/actor-rdf-serialize-n3": "^4.2.0", + "@comunica/actor-rdf-serialize-shaclc": "^4.2.0", + "@comunica/actor-rdf-update-hypermedia-patch-sparql-update": "^4.2.0", + "@comunica/actor-rdf-update-hypermedia-put-ldp": "^4.2.0", + "@comunica/actor-rdf-update-hypermedia-sparql": "^4.2.0", + "@comunica/actor-rdf-update-quads-hypermedia": "^4.2.0", + "@comunica/actor-rdf-update-quads-rdfjs-store": "^4.2.0", + "@comunica/actor-term-comparator-factory-expression-evaluator": "^4.2.0", + "@comunica/bus-function-factory": "^4.2.0", + "@comunica/bus-http-invalidate": "^4.2.0", + "@comunica/bus-query-operation": "^4.2.0", + "@comunica/config-query-sparql": "^4.3.0", + "@comunica/core": "^4.2.0", + "@comunica/logger-void": "^4.2.0", + "@comunica/mediator-all": "^4.2.0", + "@comunica/mediator-combine-pipeline": "^4.2.0", + "@comunica/mediator-combine-union": "^4.2.0", + "@comunica/mediator-join-coefficients-fixed": "^4.2.0", + "@comunica/mediator-number": "^4.2.0", + "@comunica/mediator-race": "^4.2.0", + "@comunica/runner": "^4.2.0", + "@comunica/runner-cli": "^4.2.0", + "@comunica/types": "^4.2.0", + "process": "^0.11.10" + }, + "bin": { + "comunica-dynamic-sparql": "bin/query-dynamic.js", + "comunica-sparql": "bin/query.js", + "comunica-sparql-http": "bin/http.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-abstract-mediatyped": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-4.2.0.tgz", + "integrity": "sha512-+7NuPZQAi7iRJ1Cie9qqhbJjBv0/SadA/24+KrDVU4+4QM6n5usCKibA8D84Nqgt257IsrFrb2G7NndTZ6taww==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-abstract-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-4.2.0.tgz", + "integrity": "sha512-WUHr9Bhr3Z7eJ2GtSGnhj1xCXCarKkC82WPorlG+RhuPuryp152GtJYtdyBIR4pEetP2hL4n+VuvHjXY80LWbQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-dereference-fallback": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-fallback/-/actor-dereference-fallback-4.2.0.tgz", + "integrity": "sha512-MtDTZj1zUrzj8zte74+3KnMVaJrQfQm15AquK3g8XwJYwDEPJwT5bDRenb/TXlcG6qio9MamY4iYkgsCRPmPVQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-dereference-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-http/-/actor-dereference-http-4.2.0.tgz", + "integrity": "sha512-FKyO0N15QKanXc5mHAdLTaI0BXEhs2A6uxGr0IwcAePaMFt+fjxlG/sz97PeSgVzoW60nLD21a29KVN6cTGbMg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-http": "^4.2.0", + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "relative-to-absolute-iri": "^1.0.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-dereference-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-rdf-parse/-/actor-dereference-rdf-parse-4.2.0.tgz", + "integrity": "sha512-i8Buj5Vlf6C7cA59Y8DqPjVABSDQZtjOgME/dheGrLdGm04xES+MRBwjLIhYnXadBns0Kk/UjIsnSI+k6sEXdw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-dereference-rdf": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-http-fetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-fetch/-/actor-http-fetch-4.2.0.tgz", + "integrity": "sha512-oZMNb01Jpc+e/0/b8+zRjQsNrEndfIiA6UpN0os4hROHw3QBw3ewT05g/GZUp7V+Fo/uSA4akUUqDsLKyZxRaw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-http-proxy": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-proxy/-/actor-http-proxy-4.2.0.tgz", + "integrity": "sha512-aKJEv7mkMJiMJRTxsqPyUfjczoKDT9u/0wIWzSdW215hdW5ITAla08fD+/yIqKAD/Nz9bdZo3CSLwIMrtENmEQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-rdf-parse-html": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-4.2.0.tgz", + "integrity": "sha512-g3WBPzZ76AnMqNc9EJ0NYrF/3YYyyv5xz07yLtoRPwseT/ADdXszMLnkqlrNvh0hoz2DV4RVBynW7X/3gcv83A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "htmlparser2": "^10.0.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-rdf-parse-html-microdata": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-4.2.0.tgz", + "integrity": "sha512-BcwVDfgtGKbXcdi7FHNzGiwOwZim629obfiHJsCFz/u+/ijQ9uQCbkBYILkvlNDBhJGhV2g+z0WdyJnnrVH6nA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "microdata-rdf-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-rdf-parse-html-rdfa": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-4.2.0.tgz", + "integrity": "sha512-frs09nzpFCpGV8w3MRT9SvHiBeeiMWnvVh/aJ1XKgzZh4sXYvUyf1nPMf5eUCa8tv3x4k1Rt+1ryd5nHyPRLOg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "rdfa-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-rdf-parse-html-script": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-4.2.0.tgz", + "integrity": "sha512-zbH9NSDPmufxJvbHdsQK3QwDf5Et/ywXElgCG+sPHdtJTqjKG/cuQSF3xwM1xYl++kLXR0KY3bz/EIQGRsq/OA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "readable-stream": "^4.5.2", + "relative-to-absolute-iri": "^1.0.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-rdf-parse-jsonld": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-4.2.0.tgz", + "integrity": "sha512-qD+tuwx/E5z+c55hWrjtRWmS+tMw/ZPJgvNmD+DEUYf1LCeJ3WqjMEa3u783eVxNCXTJQ/CguVm5kZGKwG669w==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "jsonld-context-parser": "^2.2.2", + "jsonld-streaming-parser": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-rdf-parse-n3": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-4.3.0.tgz", + "integrity": "sha512-kDVTeefCi1PpTuDDm+lLumz2nUofPxvPeeOO531FKtky5tAfT9SZGblptAgM1EgdKqruH00IJ6+KLXFb1XbjDA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "n3": "^1.26.0" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-rdf-parse-rdfxml": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-4.2.0.tgz", + "integrity": "sha512-0bhARRt80pEgVRDPb8xmtgKOrXS6ccV/XJMfmXTFEN2y5BCdXPKVazN/QEH7GBIrx/GkgQGXFwnprIvJlRJbag==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "rdfxml-streaming-parser": "^2.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-rdf-parse-shaclc": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-shaclc/-/actor-rdf-parse-shaclc-4.2.0.tgz", + "integrity": "sha512-qnTAFZEYofrwuhjGi1ToMs33BuUjvdklixQ9odEUcGTbUhrhCkcI2VqE7etDVkn3RlmEAHLseWHkCWEWWS167Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/types": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "readable-stream": "^4.5.2", + "shaclc-parse": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/actor-rdf-parse-xml-rdfa": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-4.2.0.tgz", + "integrity": "sha512-PMRVpUSGzUieRpW7ffkciaX+x+QkgtlD/2lu2Ru7EPo/NwM5yelshwdv7VDv/lYeWOKwrx01GQgTQSU8dPDeoQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "rdfa-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/bus-dereference": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-4.2.0.tgz", + "integrity": "sha512-KWaGcrW9B0tWbgtG8gDK6nosdl94unyaaX5eCDSjTXqN6ZZA+NEDHbzRWypxcxbzMugAvyNwcAmC28KW+h9KCQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/bus-dereference-rdf": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-4.2.0.tgz", + "integrity": "sha512-RQvj/BMP9QD9v3ZR4vIYLLlRWawAhXDzCOZZ6oJnhmxSOW0NfdL3h5rFI03HVPpDfyWtV4ACKK8FNe6gOIeXZw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/bus-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-4.2.0.tgz", + "integrity": "sha512-P92ACuOk2zicOfNDiRc8xAA/u3yw6pHKQDZWRs/XXJJQIyEU+9CAKA6URHcb0+ffnVtxHtiiqI2nsra7MRadIg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/bus-rdf-parse-html": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-4.2.0.tgz", + "integrity": "sha512-pQPHa2IMPPuicQQYQ2IlgFuUa7JBPRohSe3uMhUfcAUv9aGZKcIrlFdXCQPnUc+HLNU/f/06HmcWiXtgS8YujQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/config-query-sparql": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/config-query-sparql/-/config-query-sparql-4.3.0.tgz", + "integrity": "sha512-uFCwe5eSewx1bznciTZSTjMbN+9i4wD8l1KQEFe9b+UOGWJ0JLs4rz4PMYx0k/DQQqz6OyG87G2ikn16DoNzWg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/mediator-combine-pipeline": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-pipeline/-/mediator-combine-pipeline-4.2.0.tgz", + "integrity": "sha512-UYFBKR3bmFqJC+A9sx+kEsvGuILNimt/5yTC0yId56sjdwAaEEQz9iFLI1HqJS2T6weu81S/VXiYUpwp9DGJbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/mediator-combine-union": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-4.2.0.tgz", + "integrity": "sha512-hdqtqmGb0aEW8sIcp3WvzziXAxPfGWYDBgH/QQIk2JVWc7auGWvddut2pQCGHyFrv6MXI0vbjj8g1UIaAMviBQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/mediator-number": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-4.2.0.tgz", + "integrity": "sha512-TYwcukPQLblV3sfkNMsl3oj3AXSzcGmB+tUYy/++kKohQ67xy2r0wfBo1Ij/6G4ZnzlMIuOWzQcXojFrnV9iWQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/mediator-race": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-4.2.0.tgz", + "integrity": "sha512-KHfRVB+Qfaou8tJeXrCrcw1NlTUD+xbi5/7qSwvRqEbbajW2B4cRYbw0VrTJDFUb1tva5IHQQGpMFJ/aHHpH5w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/mediatortype-time": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-4.2.0.tgz", + "integrity": "sha512-t/IVwZPeb4hijIjdQKl/BS14HR7PXDgiv2Djq1f42596mluPjDemUG3suxx8VxBCGhG6Jckupg/WvvLYdW585w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@types/node": { + "version": "18.19.112", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.112.tgz", + "integrity": "sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@comunica/query-sparql/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@comunica/query-sparql/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@comunica/query-sparql/node_modules/htmlparser2": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/@comunica/query-sparql/node_modules/jsonld-streaming-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-4.0.1.tgz", + "integrity": "sha512-6M4y9YGgADk3nXJebbRrxEdMVBJ9bnz+peAvjTXUievopqaE8sg/qml/I6Sp1ln7rpOKffsNZWSre6B7N76szw==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.0", + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^3.0.0", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@comunica/query-sparql/node_modules/jsonld-streaming-parser/node_modules/jsonld-context-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-3.0.0.tgz", + "integrity": "sha512-Kg6TVtBUdIm057ht/8WNhM9BROt+BeYaDGXbzrKaa3xA99csee+CsD8IMCTizRgzoO8PIzvzcxxCoRvpq1xNQw==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/@comunica/query-sparql/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/query-sparql/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/@comunica/runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/runner/-/runner-4.2.0.tgz", + "integrity": "sha512-13YYeiU3VRES2owxZ5tPv+tIc3rAeg8SdZCNTAUBBI3LhJzMCdZazce+ufo716FDeMW+nfqPNzmnBv6OFDx/KQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-init": "^4.2.0", + "@comunica/core": "^4.2.0", + "componentsjs": "^6.2.0", + "process": "^0.11.10" + }, + "bin": { + "comunica-compile-config": "bin/compile-config" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/runner-cli": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/runner-cli/-/runner-cli-4.2.0.tgz", + "integrity": "sha512-QbIEezExlz2IP6eAEoX/UNqa8si3DmVbRVOBkLxr62fqV521jf3a+ZVmgsusSu4qePt0ivCgkxJZmC8NmfsgUA==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/runner": "^4.2.0", + "@comunica/types": "^4.2.0", + "process": "^0.11.10" + }, + "bin": { + "comunica-run": "bin/run.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/runner-cli/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/runner-cli/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/runner-cli/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/runner/node_modules/@comunica/bus-init": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-4.2.0.tgz", + "integrity": "sha512-AxX9fOI0xKjed4nbxz5ADLb5ILbBJPkvDuehvKOtK5i2fto+cUDg3V4QUVJEdSrCoreSwdSzmygG93NBOkqHrg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/runner/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/runner/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/runner/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/types": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-2.10.0.tgz", + "integrity": "sha512-1UjPGbZcYrapBjMGUZedrIGcn9rOLpEOlJo1ZkWddFUGTwndVg9d4BZnQw+UnQzXMcLJcdKt94Zns8iEmBqARw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.8.1", + "sparqlalgebrajs": "^4.2.0" + } + }, + "node_modules/@comunica/utils-bindings-factory": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/utils-bindings-factory/-/utils-bindings-factory-4.2.0.tgz", + "integrity": "sha512-Rw6me8UCdYTvotKt0SJcyQy7tMoruE6gjL8ZSxRZhYORY0+peOgkHHOAmZ41K/TG8TlrthO5cuWB7kK81VeEig==", + "license": "MIT", + "dependencies": { + "@comunica/bus-merge-bindings-context": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "immutable": "^4.1.0", + "rdf-string": "^1.6.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-bindings-factory/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-bindings-factory/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-bindings-factory/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/utils-bindings-index": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/utils-bindings-index/-/utils-bindings-index-4.2.0.tgz", + "integrity": "sha512-3ljU/1gvXUn8b1A2jFA0vz+Zr0IPYtssjOHhOsZK9ooMaJduAm8SFj5nznvT4rE70zZ5wCdINCKqwiSPxOqU1w==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-bindings-index/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-bindings-index/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/utils-data-factory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@comunica/utils-data-factory/-/utils-data-factory-4.0.1.tgz", + "integrity": "sha512-6FTyTC0dNgXwnZN4/5QSDsfNT7AhWPJUcE3a9aa78kQodaq3LfQNW4fiG4tC2O4tcbSy4Ds7ZG/cflThCHwa2w==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-expression-evaluator": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/utils-expression-evaluator/-/utils-expression-evaluator-4.2.0.tgz", + "integrity": "sha512-HAX4Duv8Bva27f/ooIlALwPRFzqZcpb9Im9QoT4L42gCkBfbhOjDpd0skNXJ8nio30GG0aW90UM122u8vAGihQ==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "lru-cache": "^10.0.0", + "rdf-data-factory": "^1.1.2", + "rdf-string": "^1.6.3", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-expression-evaluator/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-expression-evaluator/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-expression-evaluator/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-expression-evaluator/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/utils-iterator": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@comunica/utils-iterator/-/utils-iterator-4.0.1.tgz", + "integrity": "sha512-JfWFr212IFpRIe0kU//AdtrPgcKusnRnHeipqVKv6EVeWl3ZfPZsO/e+aSr/llQoAJBaGKfMH0ATuXzWCSjU/g==", + "license": "MIT", + "dependencies": { + "asynciterator": "^3.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-metadata": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/utils-metadata/-/utils-metadata-4.2.0.tgz", + "integrity": "sha512-xNqnI2XiUgs/xv/3jKo+ueui6akOlrwR/szyMKCu/DXuzSfYor0/czTWJLcLOxYDB4T4hMJCxQgaVyyX4D1ZeA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-metadata/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-metadata/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@comunica/utils-query-operation": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/utils-query-operation/-/utils-query-operation-4.2.0.tgz", + "integrity": "sha512-HZyO6xYJcS9n6NcJAxrxltKph4NfCClUUjHiM3ayb8zrYmfO62dv0SGLp3VgalaMkPF5cRFuIGolt6uzgczHWQ==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@comunica/utils-bindings-factory": "^4.2.0", + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.2", + "rdf-string": "^1.6.1", + "rdf-terms": "^1.11.0", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-query-operation/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-query-operation/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-query-operation/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@comunica/utils-query-operation/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz", + "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz", + "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@digitalbazaar/http-client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-1.2.0.tgz", + "integrity": "sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "esm": "^3.2.22", + "ky": "^0.25.1", + "ky-universal": "^0.8.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "license": "BSD-3-Clause" + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@inrupt/oidc-client": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@inrupt/oidc-client/-/oidc-client-1.11.6.tgz", + "integrity": "sha512-1rCTk1T6pdm/7gKozutZutk7jwmYBADlnkGGoI5ypke099NOCa5KFXjkQpbjsps0PRkKZ+0EaR70XN5+xqmViA==", + "license": "Apache-2.0", + "dependencies": { + "acorn": "^7.4.1", + "base64-js": "^1.5.1", + "core-js": "^3.8.3", + "crypto-js": "^4.0.0", + "serialize-javascript": "^4.0.0" + } + }, + "node_modules/@inrupt/oidc-client-ext": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inrupt/oidc-client-ext/-/oidc-client-ext-3.0.0.tgz", + "integrity": "sha512-eVmNBFueN/eM0u3B8QHqtr/qlMVN3BXJa9zZONhPGa3UKYwjXD6SgwDHPIvU+//kY2aUYxOpEdSKMbvyDpMZMw==", + "license": "MIT", + "dependencies": { + "@inrupt/oidc-client": "^1.11.6", + "@inrupt/solid-client-authn-core": "^3.0.0", + "jose": "^5.1.3", + "uuid": "^11.1.0" + } + }, + "node_modules/@inrupt/solid-client-authn-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inrupt/solid-client-authn-browser/-/solid-client-authn-browser-3.0.0.tgz", + "integrity": "sha512-rA0mIqWRatCfEQ5fog7IxJAdga7cTCZyUWdFYFeSRnI/vTr4bQ4aGu0VEOdT00UJv1AqQcIKStHdJG3F23xDvA==", + "license": "MIT", + "dependencies": { + "@inrupt/oidc-client-ext": "^3.0.0", + "@inrupt/solid-client-authn-core": "^3.0.0", + "events": "^3.3.0", + "jose": "^5.1.3", + "uuid": "^11.1.0" + } + }, + "node_modules/@inrupt/solid-client-authn-core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inrupt/solid-client-authn-core/-/solid-client-authn-core-3.0.0.tgz", + "integrity": "sha512-x5AovRam09qEKjIxGbYRmNUXXlQyWXUmVf5515RxiOPwfAlfp3PQpgoB0UU2u9SIToMOjb1wc6cAsFxZmy0qQw==", + "license": "MIT", + "dependencies": { + "events": "^3.3.0", + "jose": "^5.1.3", + "uuid": "^11.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@janeirodigital/interop-utils": { + "version": "1.0.0-rc.24", + "resolved": "https://registry.npmjs.org/@janeirodigital/interop-utils/-/interop-utils-1.0.0-rc.24.tgz", + "integrity": "sha512-mLOhitq6SyRSZi1DxrzTTgms7Mt0zgx/5KezkkyMBH3OYuYJBGPH6A93iBJl0wA5Ln90A9KnyiC7I/7+IUYhoQ==", + "license": "MIT", + "dependencies": { + "http-link-header": "^1.1.1", + "jsonld-streaming-parser": "^3.2.1", + "n3": "^1.17.1" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jeswr/prefixcc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jeswr/prefixcc/-/prefixcc-1.2.1.tgz", + "integrity": "sha512-kBBXbqsaeh3Irp416h/RbelqJgIOp6X/OJJlYmLyr/9qlBYKTKSCuEv5/xjZ0Yf8Yec+QFRYBaOQ2JkMBSH7KA==", + "license": "MIT", + "dependencies": { + "cross-fetch": "^3.1.5" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@jeswr/shacl2shex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jeswr/shacl2shex/-/shacl2shex-1.1.0.tgz", + "integrity": "sha512-1lcPUqavU+Q1wCM+aF2JbHjTKoBZTNbA6n4P+EfmXDzNKK8UPJ6qRlyx6ICpHEw2wxoXhcFAYdtBUpQc/cxHnw==", + "license": "MIT", + "dependencies": { + "@ldo/ldo": "^0.0.1-alpha.24", + "@on2ts/ontologies-sh": "^1.0.51", + "@rdfjs/term-set": "^1.1.0", + "@rdfjs/types": "^1.1.0", + "@shexjs/neighborhood-rdfjs": "^1.0.0-alpha.29", + "@shexjs/validator": "^1.0.0-alpha.29", + "@shexjs/writer": "^1.0.0-alpha.27", + "event-emitter-promisify": "^1.1.0", + "n3": "^1.17.3", + "rdf-dereference": "^2.2.0", + "rdf-namespaces": "^1.12.0" + }, + "bin": { + "shacl2shex": "dist/bin/index.js" + } + }, + "node_modules/@jeswr/shacl2shex/node_modules/@ldo/dataset": { + "version": "0.0.1-alpha.24", + "resolved": "https://registry.npmjs.org/@ldo/dataset/-/dataset-0.0.1-alpha.24.tgz", + "integrity": "sha512-Jlh6DjvLN4gOOT8SYCKQaHZB8taeHvoriQRbF3s5CtYFf8Ne20job+02cToE1kVcBCinBrjZ/qnZ777wje+Z7A==", + "license": "MIT", + "dependencies": { + "@ldo/rdf-utils": "^0.0.1-alpha.24", + "@rdfjs/dataset": "^1.1.0", + "buffer": "^6.0.3", + "readable-stream": "^4.2.0" + } + }, + "node_modules/@jeswr/shacl2shex/node_modules/@ldo/jsonld-dataset-proxy": { + "version": "0.0.1-alpha.29", + "resolved": "https://registry.npmjs.org/@ldo/jsonld-dataset-proxy/-/jsonld-dataset-proxy-0.0.1-alpha.29.tgz", + "integrity": "sha512-6r1tn/t82aJ6vjxEGyNSJTzQJgz1Z4Pu875o4EolXXJZCu7TiXBdsW6HyAuloqiIV5b6A2b+M6G0mOuObndooA==", + "license": "MIT", + "dependencies": { + "@ldo/rdf-utils": "^0.0.1-alpha.24", + "@ldo/subscribable-dataset": "^0.0.1-alpha.24", + "@rdfjs/data-model": "^1.2.0", + "@rdfjs/dataset": "^1.1.0", + "jsonld2graphobject": "^0.0.4" + } + }, + "node_modules/@jeswr/shacl2shex/node_modules/@ldo/ldo": { + "version": "0.0.1-alpha.29", + "resolved": "https://registry.npmjs.org/@ldo/ldo/-/ldo-0.0.1-alpha.29.tgz", + "integrity": "sha512-eci3e2FlaSoOWN5vzLQaJhrmznuuK89yTr/ZLvmWIK2bvsY8QOArAx8EiGgwvvrzvHpG7ezaoW1ThS/53QFiqQ==", + "license": "MIT", + "dependencies": { + "@ldo/dataset": "^0.0.1-alpha.24", + "@ldo/jsonld-dataset-proxy": "^0.0.1-alpha.29", + "@ldo/subscribable-dataset": "^0.0.1-alpha.24", + "@rdfjs/data-model": "^1.2.0", + "buffer": "^6.0.3", + "readable-stream": "^4.3.0" + } + }, + "node_modules/@jeswr/shacl2shex/node_modules/@ldo/rdf-utils": { + "version": "0.0.1-alpha.24", + "resolved": "https://registry.npmjs.org/@ldo/rdf-utils/-/rdf-utils-0.0.1-alpha.24.tgz", + "integrity": "sha512-L6gV/pS7107ODinnvvD4sUBb9VM/7IuVeFWZnN0Jmyk7XBiviPLVUvReO18UB7mambXweLS7efl+Z0W2NnsH1A==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^1.2.0", + "n3": "^1.17.1", + "rdf-string": "^1.6.3" + } + }, + "node_modules/@jeswr/shacl2shex/node_modules/@ldo/subscribable-dataset": { + "version": "0.0.1-alpha.24", + "resolved": "https://registry.npmjs.org/@ldo/subscribable-dataset/-/subscribable-dataset-0.0.1-alpha.24.tgz", + "integrity": "sha512-grQ0/pzdx4euBOTxMHqQqebOYBqrBbNS9Jk8sYFR4u/dEg8e6nIGz0E4beI83dHp/hT8fT18gs/gV4UxZzmphQ==", + "license": "MIT", + "dependencies": { + "@ldo/dataset": "^0.0.1-alpha.24", + "@ldo/rdf-utils": "^0.0.1-alpha.24" + } + }, + "node_modules/@jeswr/shacl2shex/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@jeswr/stream-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@jeswr/stream-to-string/-/stream-to-string-2.0.0.tgz", + "integrity": "sha512-VmoW6xYRjVzdMr2njBObVSlUc5KCJT+gyuuH+tea9ZLE59XhgfLNc8ufN5Md38STxCyAJUDUVcCBfaOo11BfuA==", + "license": "MIT", + "dependencies": { + "event-emitter-promisify": "^1.1.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@koa/cors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-5.0.0.tgz", + "integrity": "sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==", + "license": "MIT", + "dependencies": { + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@koa/router": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@koa/router/-/router-13.1.0.tgz", + "integrity": "sha512-mNVu1nvkpSd8Q8gMebGbCkDWJ51ODetrFvLKYusej+V0ByD4btqHYnPIzTBLXnQMVUlm/oxVwqmWBY3zQfZilw==", + "license": "MIT", + "dependencies": { + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "path-to-regexp": "^6.3.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ldo/cli": { + "resolved": "packages/cli", + "link": true + }, + "node_modules/@ldo/connected": { + "resolved": "packages/connected", + "link": true + }, + "node_modules/@ldo/connected-nextgraph": { + "resolved": "packages/connected-nextgraph", + "link": true + }, + "node_modules/@ldo/connected-solid": { + "resolved": "packages/connected-solid", + "link": true + }, + "node_modules/@ldo/dataset": { + "resolved": "packages/dataset", + "link": true + }, + "node_modules/@ldo/jsonld-dataset-proxy": { + "resolved": "packages/jsonld-dataset-proxy", + "link": true + }, + "node_modules/@ldo/ldo": { + "resolved": "packages/ldo", + "link": true + }, + "node_modules/@ldo/rdf-utils": { + "resolved": "packages/rdf-utils", + "link": true + }, + "node_modules/@ldo/react": { + "resolved": "packages/react", + "link": true + }, + "node_modules/@ldo/schema-converter-shex": { + "resolved": "packages/schema-converter-shex", + "link": true + }, + "node_modules/@ldo/solid-react": { + "resolved": "packages/solid-react", + "link": true + }, + "node_modules/@ldo/solid-type-index": { + "resolved": "packages/solid-type-index", + "link": true + }, + "node_modules/@ldo/subscribable-dataset": { + "resolved": "packages/subscribable-dataset", + "link": true + }, + "node_modules/@ldo/svelte": { + "resolved": "packages/svelte", + "link": true + }, + "node_modules/@ldo/test-solid-server": { + "resolved": "packages/test-solid-server", + "link": true + }, + "node_modules/@ldo/traverser-shexj": { + "resolved": "packages/traverser-shexj", + "link": true + }, + "node_modules/@ldo/type-traverser": { + "resolved": "packages/type-traverser", + "link": true + }, + "node_modules/@lerna/child-process": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-7.4.2.tgz", + "integrity": "sha512-je+kkrfcvPcwL5Tg8JRENRqlbzjdlZXyaR88UcnCdNW0AJ1jX9IfHRys1X7AwSroU2ug8ESNC+suoBw1vX833Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@lerna/child-process/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@lerna/create": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-7.4.2.tgz", + "integrity": "sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "7.4.2", + "@npmcli/run-script": "6.0.2", + "@nx/devkit": ">=16.5.1 < 17", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.11", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.1", + "columnify": "1.6.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "^8.2.0", + "dedent": "0.7.0", + "execa": "5.0.0", + "fs-extra": "^11.1.1", + "get-stream": "6.0.0", + "git-url-parse": "13.1.0", + "glob-parent": "5.1.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "ini": "^1.3.8", + "init-package-json": "5.0.0", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "js-yaml": "4.1.0", + "libnpmpublish": "7.3.0", + "load-json-file": "6.2.0", + "lodash": "^4.17.21", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "8.1.1", + "npm-packlist": "5.1.1", + "npm-registry-fetch": "^14.0.5", + "npmlog": "^6.0.2", + "nx": ">=16.5.1 < 17", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-queue": "6.6.2", + "p-reduce": "^2.1.0", + "pacote": "^15.2.0", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "read-package-json": "6.0.4", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.4", + "signal-exit": "3.0.7", + "slash": "^3.0.0", + "ssri": "^9.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.1.11", + "temp-dir": "1.0.0", + "upath": "2.0.1", + "uuid": "^9.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "5.0.0", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@lerna/create/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/@lerna/create/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@lerna/create/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@lerna/create/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/create/node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@lerna/create/node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@lerna/create/node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@lerna/create/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@lerna/create/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@lerna/create/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/create/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@lerna/create/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@lerna/create/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@lerna/create/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@lerna/create/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/create/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@lerna/create/node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor": { + "version": "7.43.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.43.0.tgz", + "integrity": "sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/api-extractor-model": "7.28.13", + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "4.0.2", + "@rushstack/rig-package": "0.5.2", + "@rushstack/terminal": "0.10.0", + "@rushstack/ts-command-line": "4.19.1", + "lodash": "~4.17.15", + "minimatch": "~3.0.3", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "source-map": "~0.6.1", + "typescript": "5.4.2" + }, + "bin": { + "api-extractor": "bin/api-extractor" + } + }, + "node_modules/@microsoft/api-extractor-model": { + "version": "7.28.13", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.13.tgz", + "integrity": "sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "4.0.2" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/typescript": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", + "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", + "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nrwl/devkit": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.10.0.tgz", + "integrity": "sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/devkit": "16.10.0" + } + }, + "node_modules/@nrwl/tao": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.10.0.tgz", + "integrity": "sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "16.10.0", + "tslib": "^2.3.0" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@nx/devkit": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.10.0.tgz", + "integrity": "sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nrwl/devkit": "16.10.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 15 <= 17" + } + }, + "node_modules/@nx/devkit/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nx/devkit/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nx/devkit/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@nx/nx-darwin-arm64": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz", + "integrity": "sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-darwin-x64": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz", + "integrity": "sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz", + "integrity": "sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz", + "integrity": "sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz", + "integrity": "sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz", + "integrity": "sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz", + "integrity": "sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz", + "integrity": "sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz", + "integrity": "sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz", + "integrity": "sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@octokit/auth-token": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", + "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/graphql": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", + "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", + "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/tsconfig": "^1.0.2", + "@octokit/types": "^9.2.3" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=4" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", + "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^10.0.0" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", + "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/rest": { + "version": "19.0.11", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", + "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^4.2.1", + "@octokit/plugin-paginate-rest": "^6.1.2", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^7.1.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/tsconfig": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", + "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@on2ts/ontologies-sh": { + "version": "1.0.51", + "resolved": "https://registry.npmjs.org/@on2ts/ontologies-sh/-/ontologies-sh-1.0.51.tgz", + "integrity": "sha512-V0k+ZKupMjCQajCGkMVmILsxLq1uqHLY6V2xTmBJ0Y34q4dLZF6r1dX2NW1PZofekxLvx8VNNDsvynyPTDFp7g==", + "license": "MIT", + "dependencies": { + "@on2ts/ontologies-utils": "^1.0.51" + } + }, + "node_modules/@on2ts/ontologies-utils": { + "version": "1.0.51", + "resolved": "https://registry.npmjs.org/@on2ts/ontologies-utils/-/ontologies-utils-1.0.51.tgz", + "integrity": "sha512-xM4052l0OKxk73ERuWY+IObEIVgXxkwDOFZU3rlLK6GBDbReaGXSYK9DAJyqwk0R1FcyLZxjNdIDYN4WbMzpuA==", + "license": "MIT", + "dependencies": { + "@types/rdf-js": "^4.0.1", + "jsonld-streaming-parser": "^2.2.1" + } + }, + "node_modules/@on2ts/ontologies-utils/node_modules/jsonld-streaming-parser": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz", + "integrity": "sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^2.1.3", + "jsonparse": "^1.3.1", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", + "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", + "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.1" + }, + "bin": { + "rdfjs-data-model-test": "bin/test.js" + } + }, + "node_modules/@rdfjs/dataset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-1.1.1.tgz", + "integrity": "sha512-BNwCSvG0cz0srsG5esq6CQKJc1m8g/M0DZpLuiEp0MMpfwguXX7VeS8TCg4UUG3DV/DqEvhy83ZKSEjdsYseeA==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^1.2.0" + }, + "bin": { + "rdfjs-dataset-test": "bin/test.js" + } + }, + "node_modules/@rdfjs/fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@rdfjs/fetch/-/fetch-2.1.0.tgz", + "integrity": "sha512-1bhXqGfbQQKHrmuZOmUUQmCpDNQC25fksYoGXUvlQ80kWuk8r/PdcdUmzApCp7HSyHFUjmgH89Pkym/9WXyDkQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/dataset": "^1.0.1", + "@rdfjs/fetch-lite": "^2.1.0", + "@rdfjs/formats-common": "^2.0.1" + } + }, + "node_modules/@rdfjs/fetch-lite": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/fetch-lite/-/fetch-lite-2.1.2.tgz", + "integrity": "sha512-M66ShQbQH94/XdavOuCWLu5TFbx4pHxNLolC7oUvmIZI03mQOYyapEinGaaUozpdQoY8iOrekree4OORdRKFCA==", + "license": "MIT", + "dependencies": { + "isstream": "^0.1.2", + "nodeify-fetch": "^2.2.1", + "readable-stream": "^3.3.0" + } + }, + "node_modules/@rdfjs/fetch-lite/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@rdfjs/formats-common": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rdfjs/formats-common/-/formats-common-2.2.0.tgz", + "integrity": "sha512-XuW5tfTqN9gfbI/P3Duvai++m1fhp3idb7lmZYyP6F4EvgC7L6U9MgeRkFvqx8Vxq813+R09NeHBT5vC4BU3Lw==", + "license": "MIT", + "dependencies": { + "@rdfjs/parser-jsonld": "^1.2.1", + "@rdfjs/parser-n3": "^1.1.4", + "@rdfjs/serializer-jsonld": "^1.2.3", + "@rdfjs/serializer-ntriples": "^1.0.3", + "@rdfjs/sink-map": "^1.0.0", + "rdfxml-streaming-parser": "^1.4.0" + } + }, + "node_modules/@rdfjs/formats-common/node_modules/rdfxml-streaming-parser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz", + "integrity": "sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.0", + "sax": "^1.2.4" + } + }, + "node_modules/@rdfjs/namespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-1.1.0.tgz", + "integrity": "sha512-utO5rtaOKxk8B90qzaQ0N+J5WrCI28DtfAY/zExCmXE7cOfC5uRI/oMKbLaVEPj2P7uArekt/T4IPATtj7Tjug==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@rdfjs/parser-jsonld": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@rdfjs/parser-jsonld/-/parser-jsonld-1.3.1.tgz", + "integrity": "sha512-5eoG1YCq/uJvEBe0Hiw/TzPvRODLcUmWrGnOpzrvxkEvvmF8FUX8KYFfYtROEIjCuPywG2TBb0ID8F9/sqG0tg==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^1.3.4", + "@rdfjs/sink": "^1.0.3", + "jsonld-streaming-parser": "^2.4.3", + "readable-stream": "^3.6.0" + } + }, + "node_modules/@rdfjs/parser-jsonld/node_modules/jsonld-streaming-parser": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz", + "integrity": "sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^2.1.3", + "jsonparse": "^1.3.1", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/@rdfjs/parser-jsonld/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@rdfjs/parser-n3": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rdfjs/parser-n3/-/parser-n3-1.1.4.tgz", + "integrity": "sha512-PUKSNlfD2Zq3GcQZuOF2ndfrLbc+N96FUe2gNIzARlR2er0BcOHBHEFUJvVGg1Xmsg3hVKwfg0nwn1JZ7qKKMw==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^1.0.1", + "@rdfjs/sink": "^1.0.2", + "n3": "^1.3.5", + "readable-stream": "^3.6.0", + "readable-to-readable": "^0.1.0" + } + }, + "node_modules/@rdfjs/parser-n3/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@rdfjs/serializer-jsonld": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-jsonld/-/serializer-jsonld-1.2.3.tgz", + "integrity": "sha512-Y6jGvXvtI4eIpHIizkY6WQnwUZNWcNfkwO4ZVTIGZpc7mHrlBMaXpcXc3f6XOBVeeb4k1dNy7Fqu2CL0B5+Uew==", + "license": "MIT", + "dependencies": { + "@rdfjs/namespace": "^1.1.0", + "@rdfjs/sink": "^1.0.3", + "readable-stream": "^3.6.0" + } + }, + "node_modules/@rdfjs/serializer-jsonld/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@rdfjs/serializer-ntriples": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-ntriples/-/serializer-ntriples-1.0.3.tgz", + "integrity": "sha512-XXFgzNJyYrix0YgysqYowKw40hCJ+zeVqA/CGgO3y5XyKY+NL/VJJELMn7cTwjJteiLVCgRNAvaUVn4CjJ2PCg==", + "license": "MIT", + "dependencies": { + "@rdfjs/sink": "^1.0.3", + "@rdfjs/to-ntriples": "^1.0.2", + "readable-to-readable": "^0.1.0" + } + }, + "node_modules/@rdfjs/serializer-ntriples/node_modules/@rdfjs/to-ntriples": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-1.0.2.tgz", + "integrity": "sha512-ngw5XAaGHjgGiwWWBPGlfdCclHftonmbje5lMys4G2j4NvfExraPIuRZgjSnd5lg4dnulRVUll8tRbgKO+7EDA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@rdfjs/sink": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rdfjs/sink/-/sink-1.0.3.tgz", + "integrity": "sha512-2KfYa8mAnptRNeogxhQqkWNXqfYVWO04jQThtXKepySrIwYmz83+WlevQtA4VDLFe+kFd2TwgL29ekPe5XVUfA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@rdfjs/sink-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/sink-map/-/sink-map-1.0.1.tgz", + "integrity": "sha512-PRp5TjULHe2oRcupR80SClZ/l50wnSuX2Pl+TlkcRazt1w7AT86kLmQYFbDfjqGM7uDwSyD6evLJxXBDf5UuvQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@rdfjs/term-set": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rdfjs/term-set/-/term-set-1.1.0.tgz", + "integrity": "sha512-QQ4yzVe1Rvae/GN9SnOhweHNpaxQtnAjeOVciP/yJ0Gfxtbphy2tM56ZsRLV04Qq5qMcSclZIe6irYyEzx/UwQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/to-ntriples": "^2.0.0" + } + }, + "node_modules/@rdfjs/to-ntriples": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-2.0.0.tgz", + "integrity": "sha512-nDhpfhx6W6HKsy4HjyLp3H1nbrX1CiUCWhWQwKcYZX1s9GOjcoQTwY7GUUbVec0hzdJDQBR6gnjxtENBDt482Q==", + "license": "MIT" + }, + "node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.43.0.tgz", + "integrity": "sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.43.0.tgz", + "integrity": "sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.43.0.tgz", + "integrity": "sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.43.0.tgz", + "integrity": "sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.43.0.tgz", + "integrity": "sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.43.0.tgz", + "integrity": "sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.43.0.tgz", + "integrity": "sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.43.0.tgz", + "integrity": "sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.43.0.tgz", + "integrity": "sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.43.0.tgz", + "integrity": "sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.43.0.tgz", + "integrity": "sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.43.0.tgz", + "integrity": "sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", + "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.43.0.tgz", + "integrity": "sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.43.0.tgz", + "integrity": "sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.43.0.tgz", + "integrity": "sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz", + "integrity": "sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz", + "integrity": "sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.43.0.tgz", + "integrity": "sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.43.0.tgz", + "integrity": "sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.43.0.tgz", + "integrity": "sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rubensworks/saxes": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@rubensworks/saxes/-/saxes-6.0.1.tgz", + "integrity": "sha512-UW4OTIsOtJ5KSXo2Tchi4lhZqu+tlHrOAs4nNti7CrtB53kAZl3/hyrTi6HkMihxdbDM6m2Zc3swc/ZewEe1xw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.12" + } + }, + "node_modules/@rushstack/node-core-library": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.0.2.tgz", + "integrity": "sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@rushstack/rig-package": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.2.tgz", + "integrity": "sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/@rushstack/terminal": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.0.tgz", + "integrity": "sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rushstack/node-core-library": "4.0.2", + "supports-color": "~8.1.1" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/terminal/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@rushstack/ts-command-line": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.1.tgz", + "integrity": "sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rushstack/terminal": "0.10.0", + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "string-argv": "~0.3.1" + } + }, + "node_modules/@shexjs/eval-simple-1err": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@shexjs/eval-simple-1err/-/eval-simple-1err-1.0.0-alpha.29.tgz", + "integrity": "sha512-qizKDp+FPoOL9140VJglIbf9brgQdoPDrZ0t0vmTEdRQvY5+rF+H20nStAiPPK6XxC/AbIglv6/dImQWAMKuSw==", + "license": "MIT", + "dependencies": { + "@shexjs/eval-validator-api": "^1.0.0-alpha.29", + "@shexjs/term": "^1.0.0-alpha.27" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@shexjs/eval-threaded-nerr": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@shexjs/eval-threaded-nerr/-/eval-threaded-nerr-1.0.0-alpha.29.tgz", + "integrity": "sha512-/RFl7SzEaiofdLd1qNidvpU4Yy4TZuMdO5DMPznHkIICjyJeKgg8Kx166VznZPVIa66Sxr/hG4ngkaWsHxWYwQ==", + "license": "MIT", + "dependencies": { + "@shexjs/eval-validator-api": "^1.0.0-alpha.29", + "@shexjs/term": "^1.0.0-alpha.27" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@shexjs/eval-validator-api": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@shexjs/eval-validator-api/-/eval-validator-api-1.0.0-alpha.29.tgz", + "integrity": "sha512-5QCd6DvgBMOZvWZtixdsH/d4uXPzxYr4yv7C0wzVeBKRkB15KQd7Ccg8Bz9QbsIV1O9asxG1xoxGgYDkhZeBPg==", + "license": "MIT", + "dependencies": { + "@shexjs/term": "^1.0.0-alpha.27" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@shexjs/neighborhood-api": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@shexjs/neighborhood-api/-/neighborhood-api-1.0.0-alpha.28.tgz", + "integrity": "sha512-rkIIt39z3z1gt+8xc3CJAKLBJ/OUE+8sP24Iqs9uZYuRvJitavd+L8oX5XcdpMduwJUqE6s+Rf/YUuN0VYn7Qw==", + "license": "MIT", + "dependencies": { + "@shexjs/term": "^1.0.0-alpha.27" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@shexjs/neighborhood-rdfjs": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@shexjs/neighborhood-rdfjs/-/neighborhood-rdfjs-1.0.0-alpha.29.tgz", + "integrity": "sha512-6B4LMfTyQA5L42QI3+rlGxQEPywqLe4CFJDUm/bn6V3ldakajh/ZbPHod3DPjSLsJ7tYLZsRi9GPIPTgYgmZUw==", + "license": "MIT", + "dependencies": { + "@shexjs/eval-validator-api": "^1.0.0-alpha.29", + "@shexjs/term": "^1.0.0-alpha.27" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@shexjs/parser": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@shexjs/parser/-/parser-1.0.0-alpha.28.tgz", + "integrity": "sha512-eeVeHq/2JG9X+3h7y+7EmuBSWWl2EMj/EQBLk5CTRx4W4hWDdjWczsY8RWwKjkIzLwUS1+G0aiAI1u5LHCZ2Rw==", + "license": "MIT", + "dependencies": { + "@shexjs/util": "^1.0.0-alpha.28", + "@ts-jison/parser": "^0.4.1-alpha.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@shexjs/term": { + "version": "1.0.0-alpha.27", + "resolved": "https://registry.npmjs.org/@shexjs/term/-/term-1.0.0-alpha.27.tgz", + "integrity": "sha512-+D7P7pglRPTZC2RkwaQuq+cgBZImx+61JZtcN77uEJVqcGaIscQK5hScsKhAPIo16/I+4jhIUCEFojXqw6otpg==", + "license": "MIT", + "dependencies": { + "@types/shexj": "^2.1.6", + "rdf-data-factory": "^1.1.2", + "relativize-url": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@shexjs/util": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@shexjs/util/-/util-1.0.0-alpha.28.tgz", + "integrity": "sha512-L8pBokTU/5eNRJPkC8R9SIgPw6/JDh/bHKdV5TZzf8/FkOMNJwKIy6UDHXM1I8FJ+c8u2gOOHp2MA+7b+md+0A==", + "license": "MIT", + "dependencies": { + "@shexjs/term": "^1.0.0-alpha.27", + "@shexjs/visitor": "^1.0.0-alpha.27", + "@types/shexj": "^2.1.6", + "hierarchy-closure": "^1.2.2", + "sync-request": "^6.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@shexjs/validator": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@shexjs/validator/-/validator-1.0.0-alpha.29.tgz", + "integrity": "sha512-KO9Sf9ICpnoFFutiX59vx7o9eRnOPuKngKxfeyOzM3mKmKQXad0SOIbqRxRBaMgV/eXwhnIERhzvCK66EZMrFQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^2.0.1", + "@shexjs/eval-simple-1err": "^1.0.0-alpha.29", + "@shexjs/eval-threaded-nerr": "^1.0.0-alpha.29", + "@shexjs/eval-validator-api": "^1.0.0-alpha.29", + "@shexjs/neighborhood-api": "^1.0.0-alpha.28", + "@shexjs/term": "^1.0.0-alpha.27", + "@shexjs/visitor": "^1.0.0-alpha.27", + "@types/shexj": "^2.1.6", + "hierarchy-closure": "^1.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@shexjs/validator/node_modules/@rdfjs/data-model": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-2.1.0.tgz", + "integrity": "sha512-pnjwSqDCXxxJQPm3TyDaqoWynYYQBl1pZC7rIPhdck7RbcEVF8hIBg5vXXosUbNcW3qwyAEBtYGojoWRnxBPew==", + "license": "MIT", + "bin": { + "rdfjs-data-model-test": "bin/test.js" + } + }, + "node_modules/@shexjs/visitor": { + "version": "1.0.0-alpha.27", + "resolved": "https://registry.npmjs.org/@shexjs/visitor/-/visitor-1.0.0-alpha.27.tgz", + "integrity": "sha512-9s67A+f0ZZNw/SNxqoi1483CqUca8dbnHM6WDWsRH4+eXlQpQqwOZDxA8uKEaWeX4VcDrDwzWpr0WvK6EyDWIQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@shexjs/writer": { + "version": "1.0.0-alpha.27", + "resolved": "https://registry.npmjs.org/@shexjs/writer/-/writer-1.0.0-alpha.27.tgz", + "integrity": "sha512-VK4gIQdIuhlU2vU8HiZAvffj4zPzLrDjLaBS0uKiLS0VTSpee4rejLJs4HiXCfPXFY7xOdW+As9dBH7kKpXWew==", + "license": "MIT", + "dependencies": { + "relativize-url": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sigstore/sign/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@sigstore/sign/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@smessie/readable-web-to-node-stream": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smessie/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.3.tgz", + "integrity": "sha512-8FFE7psRtRWQT31/duqbmgnSf2++QLR2YH9kj5iwsHhnoqSvHdOY3SAN5e7dhc+60p2cNk7rv3HYOiXOapTEXQ==", + "license": "MIT", + "dependencies": { + "process": "^0.11.10", + "readable-stream": "^4.5.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@solid-notifications/discovery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@solid-notifications/discovery/-/discovery-0.1.2.tgz", + "integrity": "sha512-jkqV+Ceknw2XE0Vl/4O2BBFnkCZQhNDVt6B9nzbVD4T3aNhMlK/gZS6oNHqa23obgFNCtgFBmeeRKiN1/v8lcw==", + "license": "MIT", + "dependencies": { + "@janeirodigital/interop-utils": "^1.0.0-rc.24", + "n3": "^1.17.2" + } + }, + "node_modules/@solid-notifications/subscription": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@solid-notifications/subscription/-/subscription-0.1.2.tgz", + "integrity": "sha512-XnnqNsLOIdUAzB11aROzfRiJLHJjTOaHMSrnn3teQRtE0BwpbnAJtzGG/m3JNUR+QqyjKkB3jfibxJjzvI/HQg==", + "license": "MIT", + "dependencies": { + "@janeirodigital/interop-utils": "^1.0.0-rc.24", + "@solid-notifications/discovery": "^0.1.2", + "n3": "^1.17.2" + } + }, + "node_modules/@solid-notifications/types": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@solid-notifications/types/-/types-0.1.2.tgz", + "integrity": "sha512-0SP6XmOjFhqt/m4FFXnYh6slSiXMoheO3UpU7POSDStLSb6tLVAQLiy0hBKvNyGBLlftRObHWoBWlt2X/LhVRg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@solid/access-token-verifier": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@solid/access-token-verifier/-/access-token-verifier-2.1.0.tgz", + "integrity": "sha512-79u92GD1SBTxjYghg2ta6cfoBNZ5ljz/9zE6RmXUypTXW7oI18DTWiSrEjWwI4njW+OMh+4ih+sAR6AkI1IFxg==", + "license": "MIT", + "dependencies": { + "jose": "^5.1.3", + "lru-cache": "^6.0.0", + "n3": "^1.17.1", + "node-fetch": "^2.7.0", + "ts-guards": "^0.5.1" + } + }, + "node_modules/@solid/access-token-verifier/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@solid/access-token-verifier/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@solid/community-server": { + "version": "8.0.0-alpha.0", + "resolved": "https://registry.npmjs.org/@solid/community-server/-/community-server-8.0.0-alpha.0.tgz", + "integrity": "sha512-louzwHuZb2J3cagbNx/U4xk9OvkPMfz2pGxp0515FdfeA9stRDoza/Qiy6CAhSMpkLcMFgco2IoUB7jl5c98+w==", + "license": "MIT", + "dependencies": { + "@comunica/context-entries": "^4.0.2", + "@comunica/query-sparql": "^4.0.2", + "@isaacs/ttlcache": "^1.4.1", + "@rdfjs/types": "^1.1.0", + "@solid/access-token-verifier": "^2.1.0", + "@solidlab/policy-engine": "^0.0.2", + "@types/async-lock": "^1.4.0", + "@types/bcryptjs": "^2.4.4", + "@types/cookie": "^0.5.2", + "@types/cors": "^2.8.14", + "@types/ejs": "^3.1.3", + "@types/end-of-stream": "^1.4.2", + "@types/fs-extra": "^11.0.2", + "@types/lodash.orderby": "^4.6.7", + "@types/mime-types": "^2.1.2", + "@types/n3": "^1.21.1", + "@types/node": "^18.18.4", + "@types/nodemailer": "^6.4.11", + "@types/oidc-provider": "^8.4.0", + "@types/proper-lockfile": "^4.1.2", + "@types/pump": "^1.1.1", + "@types/punycode": "^2.1.0", + "@types/rdf-validate-shacl": "^0.4.4", + "@types/sparqljs": "^3.1.6", + "@types/url-join": "^4.0.1", + "@types/ws": "^8.5.7", + "@types/yargs": "^17.0.28", + "async-lock": "^1.4.0", + "asynchronous-handlers": "^1.0.2", + "bcryptjs": "^3.0.2", + "componentsjs": "^6.3.0", + "cookie": "^1.0.0", + "cors": "^2.8.5", + "cross-fetch": "^4.0.0", + "ejs": "^3.1.9", + "end-of-stream": "^1.4.4", + "escape-string-regexp": "^4.0.0", + "fetch-sparql-endpoint": "^6.0.0", + "fs-extra": "^11.1.1", + "global-logger-factory": "^1.0.0", + "handlebars": "^4.7.8", + "ioredis": "^5.3.2", + "iso8601-duration": "^2.1.1", + "jose": "^5.1.3", + "jsonld-context-parser": "^3.0.0", + "lodash.orderby": "^4.6.0", + "lru-cache": "^11.0.2", + "marked": "^15.0.6", + "mime-types": "^3.0.1", + "n3": "^1.23.1", + "nodemailer": "^6.9.9", + "oidc-provider": "^8.4.0", + "proper-lockfile": "^4.1.2", + "pump": "^3.0.0", + "punycode": "^2.3.0", + "rdf-dereference": "^4.0.0", + "rdf-parse": "^4.0.0", + "rdf-serialize": "^4.0.1", + "rdf-string": "^2.0.1", + "rdf-terms": "^2.0.0", + "rdf-validate-shacl": "^0.4.5", + "rdf-vocabulary": "^1.0.0", + "sparqlalgebrajs": "^5.0.1", + "sparqljs": "^3.7.1", + "url-join": "^4.0.1", + "winston": "^3.11.0", + "winston-transport": "^4.5.0", + "ws": "^8.14.2", + "yargs": "^17.7.2", + "yup": "^1.3.2" + }, + "bin": { + "community-solid-server": "bin/server.js" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-abstract-mediatyped": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-4.2.0.tgz", + "integrity": "sha512-+7NuPZQAi7iRJ1Cie9qqhbJjBv0/SadA/24+KrDVU4+4QM6n5usCKibA8D84Nqgt257IsrFrb2G7NndTZ6taww==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-abstract-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-4.2.0.tgz", + "integrity": "sha512-WUHr9Bhr3Z7eJ2GtSGnhj1xCXCarKkC82WPorlG+RhuPuryp152GtJYtdyBIR4pEetP2hL4n+VuvHjXY80LWbQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-dereference-fallback": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-fallback/-/actor-dereference-fallback-4.2.0.tgz", + "integrity": "sha512-MtDTZj1zUrzj8zte74+3KnMVaJrQfQm15AquK3g8XwJYwDEPJwT5bDRenb/TXlcG6qio9MamY4iYkgsCRPmPVQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-dereference-file": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-file/-/actor-dereference-file-4.2.0.tgz", + "integrity": "sha512-Dq+y1gmZ/ExEqrEyTTBOg6h4nxNjivF35KjMexmnIS1tLD9+coaa0lOV3H5VyF40i+P/Bo9c0N940yYKoN30CQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-dereference-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-http/-/actor-dereference-http-4.2.0.tgz", + "integrity": "sha512-FKyO0N15QKanXc5mHAdLTaI0BXEhs2A6uxGr0IwcAePaMFt+fjxlG/sz97PeSgVzoW60nLD21a29KVN6cTGbMg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-http": "^4.2.0", + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "relative-to-absolute-iri": "^1.0.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-dereference-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-rdf-parse/-/actor-dereference-rdf-parse-4.2.0.tgz", + "integrity": "sha512-i8Buj5Vlf6C7cA59Y8DqPjVABSDQZtjOgME/dheGrLdGm04xES+MRBwjLIhYnXadBns0Kk/UjIsnSI+k6sEXdw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-dereference-rdf": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-http-fetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-fetch/-/actor-http-fetch-4.2.0.tgz", + "integrity": "sha512-oZMNb01Jpc+e/0/b8+zRjQsNrEndfIiA6UpN0os4hROHw3QBw3ewT05g/GZUp7V+Fo/uSA4akUUqDsLKyZxRaw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-http-proxy": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-proxy/-/actor-http-proxy-4.2.0.tgz", + "integrity": "sha512-aKJEv7mkMJiMJRTxsqPyUfjczoKDT9u/0wIWzSdW215hdW5ITAla08fD+/yIqKAD/Nz9bdZo3CSLwIMrtENmEQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-html": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-4.2.0.tgz", + "integrity": "sha512-g3WBPzZ76AnMqNc9EJ0NYrF/3YYyyv5xz07yLtoRPwseT/ADdXszMLnkqlrNvh0hoz2DV4RVBynW7X/3gcv83A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "htmlparser2": "^10.0.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-html-microdata": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-4.2.0.tgz", + "integrity": "sha512-BcwVDfgtGKbXcdi7FHNzGiwOwZim629obfiHJsCFz/u+/ijQ9uQCbkBYILkvlNDBhJGhV2g+z0WdyJnnrVH6nA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "microdata-rdf-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-html-rdfa": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-4.2.0.tgz", + "integrity": "sha512-frs09nzpFCpGV8w3MRT9SvHiBeeiMWnvVh/aJ1XKgzZh4sXYvUyf1nPMf5eUCa8tv3x4k1Rt+1ryd5nHyPRLOg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "rdfa-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-html-script": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-4.2.0.tgz", + "integrity": "sha512-zbH9NSDPmufxJvbHdsQK3QwDf5Et/ywXElgCG+sPHdtJTqjKG/cuQSF3xwM1xYl++kLXR0KY3bz/EIQGRsq/OA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "readable-stream": "^4.5.2", + "relative-to-absolute-iri": "^1.0.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-jsonld": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-4.2.0.tgz", + "integrity": "sha512-qD+tuwx/E5z+c55hWrjtRWmS+tMw/ZPJgvNmD+DEUYf1LCeJ3WqjMEa3u783eVxNCXTJQ/CguVm5kZGKwG669w==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "jsonld-context-parser": "^2.2.2", + "jsonld-streaming-parser": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-jsonld/node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-jsonld/node_modules/jsonld-context-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", + "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "cross-fetch": "^3.0.6", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-n3": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-4.3.0.tgz", + "integrity": "sha512-kDVTeefCi1PpTuDDm+lLumz2nUofPxvPeeOO531FKtky5tAfT9SZGblptAgM1EgdKqruH00IJ6+KLXFb1XbjDA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "n3": "^1.26.0" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-rdfxml": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-4.2.0.tgz", + "integrity": "sha512-0bhARRt80pEgVRDPb8xmtgKOrXS6ccV/XJMfmXTFEN2y5BCdXPKVazN/QEH7GBIrx/GkgQGXFwnprIvJlRJbag==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "rdfxml-streaming-parser": "^2.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-shaclc": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-shaclc/-/actor-rdf-parse-shaclc-4.2.0.tgz", + "integrity": "sha512-qnTAFZEYofrwuhjGi1ToMs33BuUjvdklixQ9odEUcGTbUhrhCkcI2VqE7etDVkn3RlmEAHLseWHkCWEWWS167Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/types": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "readable-stream": "^4.5.2", + "shaclc-parse": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/actor-rdf-parse-xml-rdfa": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-4.2.0.tgz", + "integrity": "sha512-PMRVpUSGzUieRpW7ffkciaX+x+QkgtlD/2lu2Ru7EPo/NwM5yelshwdv7VDv/lYeWOKwrx01GQgTQSU8dPDeoQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "rdfa-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/bus-dereference": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-4.2.0.tgz", + "integrity": "sha512-KWaGcrW9B0tWbgtG8gDK6nosdl94unyaaX5eCDSjTXqN6ZZA+NEDHbzRWypxcxbzMugAvyNwcAmC28KW+h9KCQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/bus-dereference-rdf": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-4.2.0.tgz", + "integrity": "sha512-RQvj/BMP9QD9v3ZR4vIYLLlRWawAhXDzCOZZ6oJnhmxSOW0NfdL3h5rFI03HVPpDfyWtV4ACKK8FNe6gOIeXZw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/bus-init": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-4.2.0.tgz", + "integrity": "sha512-AxX9fOI0xKjed4nbxz5ADLb5ILbBJPkvDuehvKOtK5i2fto+cUDg3V4QUVJEdSrCoreSwdSzmygG93NBOkqHrg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/bus-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-4.2.0.tgz", + "integrity": "sha512-P92ACuOk2zicOfNDiRc8xAA/u3yw6pHKQDZWRs/XXJJQIyEU+9CAKA6URHcb0+ffnVtxHtiiqI2nsra7MRadIg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/bus-rdf-parse-html": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-4.2.0.tgz", + "integrity": "sha512-pQPHa2IMPPuicQQYQ2IlgFuUa7JBPRohSe3uMhUfcAUv9aGZKcIrlFdXCQPnUc+HLNU/f/06HmcWiXtgS8YujQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/config-query-sparql": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/config-query-sparql/-/config-query-sparql-4.3.0.tgz", + "integrity": "sha512-uFCwe5eSewx1bznciTZSTjMbN+9i4wD8l1KQEFe9b+UOGWJ0JLs4rz4PMYx0k/DQQqz6OyG87G2ikn16DoNzWg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/context-entries/node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/context-entries/node_modules/jsonld-context-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", + "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "cross-fetch": "^3.0.6", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/context-entries/node_modules/rdf-string": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", + "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/context-entries/node_modules/rdf-terms": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.11.0.tgz", + "integrity": "sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "rdf-string": "^1.6.0" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/context-entries/node_modules/sparqlalgebrajs": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-4.3.8.tgz", + "integrity": "sha512-Xo1/5icRtVk2N38BrY9NXN8N/ZPjULlns7sDHv0nlcGOsOediBLWVy8LmV+Q90RHvb3atZZbrFy3VqrM4iXciA==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/sparqljs": "^3.1.3", + "fast-deep-equal": "^3.1.3", + "minimist": "^1.2.6", + "rdf-data-factory": "^1.1.0", + "rdf-isomorphic": "^1.3.0", + "rdf-string": "^1.6.0", + "rdf-terms": "^1.10.0", + "sparqljs": "^3.7.1" + }, + "bin": { + "sparqlalgebrajs": "bin/sparqlalgebrajs.js" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/mediator-combine-pipeline": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-pipeline/-/mediator-combine-pipeline-4.2.0.tgz", + "integrity": "sha512-UYFBKR3bmFqJC+A9sx+kEsvGuILNimt/5yTC0yId56sjdwAaEEQz9iFLI1HqJS2T6weu81S/VXiYUpwp9DGJbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/mediator-combine-union": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-4.2.0.tgz", + "integrity": "sha512-hdqtqmGb0aEW8sIcp3WvzziXAxPfGWYDBgH/QQIk2JVWc7auGWvddut2pQCGHyFrv6MXI0vbjj8g1UIaAMviBQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/mediator-number": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-4.2.0.tgz", + "integrity": "sha512-TYwcukPQLblV3sfkNMsl3oj3AXSzcGmB+tUYy/++kKohQ67xy2r0wfBo1Ij/6G4ZnzlMIuOWzQcXojFrnV9iWQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/mediator-race": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-4.2.0.tgz", + "integrity": "sha512-KHfRVB+Qfaou8tJeXrCrcw1NlTUD+xbi5/7qSwvRqEbbajW2B4cRYbw0VrTJDFUb1tva5IHQQGpMFJ/aHHpH5w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/mediatortype-time": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-4.2.0.tgz", + "integrity": "sha512-t/IVwZPeb4hijIjdQKl/BS14HR7PXDgiv2Djq1f42596mluPjDemUG3suxx8VxBCGhG6Jckupg/WvvLYdW585w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/types/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@solid/community-server/node_modules/@comunica/types/node_modules/rdf-string": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", + "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/types/node_modules/rdf-terms": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.11.0.tgz", + "integrity": "sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "rdf-string": "^1.6.0" + } + }, + "node_modules/@solid/community-server/node_modules/@comunica/types/node_modules/sparqlalgebrajs": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-4.3.8.tgz", + "integrity": "sha512-Xo1/5icRtVk2N38BrY9NXN8N/ZPjULlns7sDHv0nlcGOsOediBLWVy8LmV+Q90RHvb3atZZbrFy3VqrM4iXciA==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/sparqljs": "^3.1.3", + "fast-deep-equal": "^3.1.3", + "minimist": "^1.2.6", + "rdf-data-factory": "^1.1.0", + "rdf-isomorphic": "^1.3.0", + "rdf-string": "^1.6.0", + "rdf-terms": "^1.10.0", + "sparqljs": "^3.7.1" + }, + "bin": { + "sparqlalgebrajs": "bin/sparqlalgebrajs.js" + } + }, + "node_modules/@solid/community-server/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@solid/community-server/node_modules/@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "license": "MIT", + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@solid/community-server/node_modules/@types/node": { + "version": "18.19.100", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.100.tgz", + "integrity": "sha512-ojmMP8SZBKprc3qGrGk8Ujpo80AXkrP7G2tOT4VWr5jlr5DHjsJF+emXJz+Wm0glmy4Js62oKMdZZ6B9Y+tEcA==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@solid/community-server/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@solid/community-server/node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/@solid/community-server/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@solid/community-server/node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@solid/community-server/node_modules/htmlparser2": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/@solid/community-server/node_modules/jsonld-context-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-3.0.0.tgz", + "integrity": "sha512-Kg6TVtBUdIm057ht/8WNhM9BROt+BeYaDGXbzrKaa3xA99csee+CsD8IMCTizRgzoO8PIzvzcxxCoRvpq1xNQw==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/@solid/community-server/node_modules/jsonld-streaming-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-4.0.1.tgz", + "integrity": "sha512-6M4y9YGgADk3nXJebbRrxEdMVBJ9bnz+peAvjTXUievopqaE8sg/qml/I6Sp1ln7rpOKffsNZWSre6B7N76szw==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.0", + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^3.0.0", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@solid/community-server/node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@solid/community-server/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@solid/community-server/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@solid/community-server/node_modules/rdf-dereference": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rdf-dereference/-/rdf-dereference-4.0.0.tgz", + "integrity": "sha512-hv7uqIHTB9M/OnS69hrSwNVBo/4+CFLwdVCL6Lg7z0+KLDJChZmTK5e6CFQ8v0OL1TJTSETGx2/EORhOwuZfFQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-dereference-fallback": "^4.0.1", + "@comunica/actor-dereference-file": "^4.0.1", + "@comunica/actor-dereference-http": "^4.0.1", + "@comunica/actor-dereference-rdf-parse": "^4.0.1", + "@comunica/actor-http-fetch": "^4.0.1", + "@comunica/actor-http-proxy": "^4.0.1", + "@comunica/actor-rdf-parse-html": "^4.0.1", + "@comunica/actor-rdf-parse-html-microdata": "^4.0.1", + "@comunica/actor-rdf-parse-html-rdfa": "^4.0.1", + "@comunica/actor-rdf-parse-html-script": "^4.0.1", + "@comunica/actor-rdf-parse-jsonld": "^4.0.1", + "@comunica/actor-rdf-parse-n3": "^4.0.1", + "@comunica/actor-rdf-parse-rdfxml": "^4.0.1", + "@comunica/actor-rdf-parse-shaclc": "^4.0.1", + "@comunica/actor-rdf-parse-xml-rdfa": "^4.0.1", + "@comunica/bus-dereference": "^4.0.1", + "@comunica/bus-dereference-rdf": "^4.0.1", + "@comunica/bus-http": "^4.0.1", + "@comunica/bus-init": "^4.0.1", + "@comunica/bus-rdf-parse": "^4.0.1", + "@comunica/bus-rdf-parse-html": "^4.0.1", + "@comunica/config-query-sparql": "^4.0.1", + "@comunica/context-entries": "^4.0.1", + "@comunica/core": "^4.0.1", + "@comunica/mediator-combine-pipeline": "^4.0.1", + "@comunica/mediator-combine-union": "^4.0.1", + "@comunica/mediator-number": "^4.0.1", + "@comunica/mediator-race": "^4.0.1", + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.2", + "rdf-string": "^1.6.3", + "stream-to-string": "^1.2.1" + }, + "bin": { + "rdf-dereference": "bin/Runner.js" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@solid/community-server/node_modules/rdf-dereference/node_modules/rdf-string": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", + "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/@solid/community-server/node_modules/rdf-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-2.0.1.tgz", + "integrity": "sha512-SMW4ponnKNrsP9kYpOLyICeM4UJmEXIeS3zri7kPK9gzLFsHD88oiza8LnokNYxd76zW4JoYWD+v4x0g8rJBjw==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@solid/community-server/node_modules/rdf-string/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@solid/community-server/node_modules/rdf-string/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@solid/community-server/node_modules/rdf-terms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-2.0.0.tgz", + "integrity": "sha512-9O+ifVcvY4ZktOr+uXKswoOV6airAsIKeqCr+C47kFZBB8X+NyPSqDRGgI6X+je8It6z2e9jZhWwjJiEZ8Yn5Q==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0", + "rdf-string": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@solid/community-server/node_modules/rdf-terms/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@solid/community-server/node_modules/rdf-terms/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@solid/community-server/node_modules/sparqlalgebrajs": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-5.0.1.tgz", + "integrity": "sha512-eb6Eiq5d/UUPatyTrtIZnT1c3aKfKJpp027cv7w7fxuzCHHYqhdNgOgLa9QbSGXl4X+uxTsTwZZhAPzw5X1odQ==", + "license": "MIT", + "dependencies": { + "@types/sparqljs": "^3.1.3", + "fast-deep-equal": "^3.1.3", + "minimist": "^1.2.6", + "rdf-data-factory": "^2.0.1", + "rdf-isomorphic": "^2.0.0", + "rdf-string": "^2.0.0", + "rdf-terms": "^2.0.0", + "sparqljs": "^3.7.1" + }, + "bin": { + "sparqlalgebrajs": "bin/sparqlalgebrajs.js" + } + }, + "node_modules/@solid/community-server/node_modules/sparqlalgebrajs/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@solid/community-server/node_modules/sparqlalgebrajs/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@solid/community-server/node_modules/sparqlalgebrajs/node_modules/rdf-isomorphic": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-2.0.1.tgz", + "integrity": "sha512-8pfA3PeDs1sVrZ2R3dCR4KRM69m3pQGhzviNQq5Az/+Zch4I+fKstjGxCZ5ADAFPsm9zxHk8zMEQ/BFcqlnLKw==", + "license": "MIT", + "dependencies": { + "imurmurhash": "^0.1.4", + "rdf-string": "^2.0.0", + "rdf-terms": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@solid/community-server/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/@solidlab/policy-engine": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@solidlab/policy-engine/-/policy-engine-0.0.2.tgz", + "integrity": "sha512-kWWNMXwxIVOTkgCOa5EEiO5um98cJZ0hREu6LKe3O/7O0BZ5XkeYfsZWuHbtgwXR+vblkRkQ7EBQffkNAjT/JA==", + "license": "MIT", + "dependencies": { + "@rdfjs/fetch": "^2.1.0", + "@rdfjs/types": "^1.1.0", + "@types/n3": "^1.21.0", + "@types/rdfjs__fetch": "^2.0.3", + "asynchronous-handlers": "^1.0.2", + "global-logger-factory": "^1.0.0", + "n3": "^1.21.1", + "rdf-vocabulary": "^1.0.0" + } + }, + "node_modules/@solidlab/policy-engine/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.5.3.tgz", + "integrity": "sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.3", + "svelte-hmr": "^0.15.3", + "vitefu": "^0.2.4" + }, + "engines": { + "node": "^14.18.0 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0", + "vite": "^4.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", + "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": "^14.18.0 || >= 16" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^2.2.0", + "svelte": "^3.54.0 || ^4.0.0", + "vite": "^4.0.0" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.7.0.tgz", + "integrity": "sha512-RI2e97YZ7MRa+vxP4UUnMuMFL2buSsf0ollxUbTgrbPLKhMn8KVTx7raS6DYjC7v1NDVrioOvaShxsguLNISCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/react": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", + "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/svelte": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@testing-library/svelte/-/svelte-5.2.7.tgz", + "integrity": "sha512-aGhUaFmEXEVost4QOsbHUUbHLwi7ZZRRxAHFDO2Cmr0BZD3/3+XvaYEPq70Rdw0NRNjdqZHdARBEcrCOkPuAqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@testing-library/dom": "^10.0.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "svelte": "^3 || ^4 || ^5 || ^5.0.0-next.0", + "vite": "*", + "vitest": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ts-jison/common": { + "version": "0.4.1-alpha.1", + "resolved": "https://registry.npmjs.org/@ts-jison/common/-/common-0.4.1-alpha.1.tgz", + "integrity": "sha512-SDbHzq+UMD+V3ciKVBHwCEgVqSeyQPTCjOsd/ZNTGySUVg4x3EauR9ZcEfdVFAsYRR38XWgDI+spq5LDY46KvQ==", + "license": "MIT" + }, + "node_modules/@ts-jison/lexer": { + "version": "0.4.1-alpha.1", + "resolved": "https://registry.npmjs.org/@ts-jison/lexer/-/lexer-0.4.1-alpha.1.tgz", + "integrity": "sha512-5C1Wr+wixAzn2MOFtgy7KbT6N6j9mhmbjAtyvOqZKsikKtNOQj22MM5HxT+ooRexG2NbtxnDSXYdhHR1Lg58ow==", + "license": "MIT", + "dependencies": { + "@ts-jison/common": "^0.4.1-alpha.1" + } + }, + "node_modules/@ts-jison/parser": { + "version": "0.4.1-alpha.1", + "resolved": "https://registry.npmjs.org/@ts-jison/parser/-/parser-0.4.1-alpha.1.tgz", + "integrity": "sha512-xNj+qOez/7dju44LlYiTlCjxMzW5oek9EckUAElfln/GBK9vgMSk0swWcnacMr0TYbGjUQuXvL2wEgmDf5WajQ==", + "license": "MIT", + "dependencies": { + "@ts-jison/common": "^0.4.1-alpha.1", + "@ts-jison/lexer": "^0.4.1-alpha.1" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.25.0.tgz", + "integrity": "sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg==", + "license": "MIT", + "dependencies": { + "minimatch": "^9.0.4", + "path-browserify": "^1.0.1", + "tinyglobby": "^0.2.9" + } + }, + "node_modules/@ts-morph/common/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/svelte": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.4.tgz", + "integrity": "sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@types/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/async-lock": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/async-lock/-/async-lock-1.4.2.tgz", + "integrity": "sha512-HlZ6Dcr205BmNhwkdXqrg2vkFMN2PluI7Lgr8In3B3wE5PiQHhjRqtW/lGdVU9gw+sM0JcIDx2AN+cW8oSWIcw==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/bcryptjs": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.6.tgz", + "integrity": "sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==", + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*" + } + }, + "node_modules/@types/child-process-promise": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@types/child-process-promise/-/child-process-promise-2.2.6.tgz", + "integrity": "sha512-g0pOHijr6Trug43D2bV0PLSIsSHa/xHEES2HeX5BAlduq1vW0nZcq27Zeud5lgmNB+kPYYVqiMap32EHGTco/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/clownface": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/clownface/-/clownface-2.0.10.tgz", + "integrity": "sha512-Vz48oQux0YArQ66wfRp54NlxvEmpyTqbFIH435AsgN7C+p4MXao/rjXUisULL6436bxjFk4VluZr7J2HQkBHmQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1", + "@types/rdfjs__environment": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/content-disposition": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", + "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==", + "license": "MIT" + }, + "node_modules/@types/cookie": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz", + "integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==", + "license": "MIT" + }, + "node_modules/@types/cookies": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.0.tgz", + "integrity": "sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.18", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.18.tgz", + "integrity": "sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ejs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", + "license": "MIT" + }, + "node_modules/@types/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@types/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-StWAwZWMI5cK5wBKJHK/0MBJaZKMlN78EeDhBhBz6eEK51StnQzwERHG438/ToRJ/2CGaBW8TpyYxjkB1v9whA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.1.tgz", + "integrity": "sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-assert": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.6.tgz", + "integrity": "sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==", + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/http-link-header": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.7.tgz", + "integrity": "sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@types/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-Zo/QlTiAvOP3pd9nuPOw33k0l/QssLOBrriShWzUE4qhIZByIF3rCoyF8ZTxdyFTUM2mYljYLqMUeLvA3NJUmQ==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jsonld": { + "version": "1.5.15", + "resolved": "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.15.tgz", + "integrity": "sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow==", + "license": "MIT" + }, + "node_modules/@types/keygrip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", + "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==", + "license": "MIT" + }, + "node_modules/@types/koa": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.15.0.tgz", + "integrity": "sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==", + "license": "MIT", + "dependencies": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "node_modules/@types/koa-compose": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", + "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", + "license": "MIT", + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.17.16", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz", + "integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==", + "license": "MIT" + }, + "node_modules/@types/lodash.orderby": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/@types/lodash.orderby/-/lodash.orderby-4.6.9.tgz", + "integrity": "sha512-T9o2wkIJOmxXwVTPTmwJ59W6eTi2FseiLR369fxszG649Po/xe9vqFNhf/MtnvT5jrbDiyWKxPFPZbpSVK0SVQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/mime-types": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "license": "MIT" + }, + "node_modules/@types/n3": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.24.2.tgz", + "integrity": "sha512-clurEPFqgx68kQxCBCrAUppsvZyyj/uVEgbhquYaawTZuDptrRrnFsHIWd4PubwWCfFgyrHBgaB2Tt09TTYLWw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.17.46", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.46.tgz", + "integrity": "sha512-0PQHLhZPWOxGW4auogW0eOQAuNIlCYvibIpG67ja0TOJ6/sehu+1en7sfceUn+QQtx4Rk3GxbLNwPh0Cav7TWw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/nodemailer": { + "version": "6.4.17", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.17.tgz", + "integrity": "sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/oidc-provider": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@types/oidc-provider/-/oidc-provider-8.8.1.tgz", + "integrity": "sha512-Yi/OJ7s0CFJ1AWAQrY2EO/zkV9uppLtiGAzrA07lBDveUOvxtYh7GflnHFXcgufVaPxVAjdykizjTYTMNVhdJw==", + "license": "MIT", + "dependencies": { + "@types/keygrip": "*", + "@types/koa": "*", + "@types/node": "*" + } + }, + "node_modules/@types/prompts": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.4.9.tgz", + "integrity": "sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "kleur": "^3.0.3" + } + }, + "node_modules/@types/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/proper-lockfile": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/proper-lockfile/-/proper-lockfile-4.1.4.tgz", + "integrity": "sha512-uo2ABllncSqg9F1D4nugVl9v93RmjxF6LJzQLMLDdPaXCUIDPeOJ21Gbqi43xNKzBi/WQ0Q0dICqufzQbMjipQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "*" + } + }, + "node_modules/@types/pug": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", + "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/pump": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/pump/-/pump-1.1.3.tgz", + "integrity": "sha512-ZyooTTivmOwPfOwLVaszkF8Zq6mvavgjuHYitZhrIjfQAJDH+kIP3N+MzpG1zDAslsHvVz6Q8ECfivix3qLJaQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/punycode": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/punycode/-/punycode-2.1.4.tgz", + "integrity": "sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/rdf-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rdf-js/-/rdf-js-4.0.1.tgz", + "integrity": "sha512-S+28+3RoFI+3arls7dS813gYnhb2HiyLX+gs00rgIvCzHU93DaYajhx4tyT+XEO8SjtzZw90OF4OVdYXBwbvkQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/rdf-validate-shacl": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@types/rdf-validate-shacl/-/rdf-validate-shacl-0.4.9.tgz", + "integrity": "sha512-mjWwr+/7p2NPmJThB0nS1N7HWTrPAP5MFOVjEChiy2/e9mNH7WxtkMAEro00Ew/prcf6pw5ke1dzq/vkhBh7+A==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/clownface": "*", + "@types/node": "*" + } + }, + "node_modules/@types/rdfjs__dataset": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/rdfjs__dataset/-/rdfjs__dataset-1.0.5.tgz", + "integrity": "sha512-8OBC9Kr/ZSgNoUTe5mHTDPHaPt8Xen4XbYfqcbYv56d+4WdKliHXaFmFc0L4I5vsynE5JGu21Hvg2zWgX1Az6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "rdf-js": "^4.0.2" + } + }, + "node_modules/@types/rdfjs__environment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/rdfjs__environment/-/rdfjs__environment-1.0.0.tgz", + "integrity": "sha512-MDcnv3qfJvbHoEpUQXj5muT8g3e+xz1D8sGevrq3+Q4TzeEvQf5ijGX5l8485XFYrN/OBApgzXkHMZC04/kd5w==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/node": "*" + } + }, + "node_modules/@types/rdfjs__fetch": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/rdfjs__fetch/-/rdfjs__fetch-2.0.3.tgz", + "integrity": "sha512-QP0C7+yQ2Y4Y0tvWCW8J20OwWnbZy1e7XkPA5QzjzvnV5Nx9p0FTUkhZWSbp2ta/Ao8+CB3I2V/xk++cQrO3+A==", + "license": "MIT", + "dependencies": { + "@types/rdfjs__fetch-lite": "*", + "rdf-js": "^4.0.2" + } + }, + "node_modules/@types/rdfjs__fetch-lite": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/rdfjs__fetch-lite/-/rdfjs__fetch-lite-3.0.11.tgz", + "integrity": "sha512-1bHxBn62bmTPq/HY9Jr+iKCdBp8RTEJ4WA0ycihghRF8zWQfw6T7E5CqdPi4nncmgF70LOz7jF/4jeLGdb6H2A==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/node": "*", + "@types/rdfjs__formats": "*" + } + }, + "node_modules/@types/rdfjs__formats": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rdfjs__formats/-/rdfjs__formats-4.0.1.tgz", + "integrity": "sha512-Zj7hQEn5HeCj+pJCWshY2gqBcdBdwyc2j20Ht3PH91pkdRuG2AlGDD3N9PQ1oZ3+J6Q96rAlhxUbjQUp9+s3FQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0", + "@types/node": "*", + "@types/rdfjs__parser-jsonld": "*", + "@types/rdfjs__parser-n3": "*", + "@types/rdfjs__serializer-jsonld": "*", + "@types/rdfjs__serializer-jsonld-ext": "*", + "@types/rdfjs__serializer-ntriples": "*", + "@types/rdfjs__serializer-turtle": "*", + "@types/rdfjs__sink-map": "*", + "rdfxml-streaming-parser": ">=2" + } + }, + "node_modules/@types/rdfjs__parser-jsonld": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/rdfjs__parser-jsonld/-/rdfjs__parser-jsonld-2.1.7.tgz", + "integrity": "sha512-n35K+c1Y95580N202Jxly6xjFE953FF+Y2mwxok6zLfMo4rgIfgMBElnNwpja0IeYXTuzGm1tEz7va3lItGrTg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0", + "@types/jsonld": "*" + } + }, + "node_modules/@types/rdfjs__parser-n3": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/rdfjs__parser-n3/-/rdfjs__parser-n3-2.0.6.tgz", + "integrity": "sha512-VHfdq7BDV6iMCtHkzTFSOuUWnqGlMUmEF0UZyK4+g9SzLWvc6TMcU5TYwQPQIz/e0s7dZ+xomxx6mVtIzsRQ/A==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0" + } + }, + "node_modules/@types/rdfjs__prefix-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@types/rdfjs__prefix-map/-/rdfjs__prefix-map-0.1.5.tgz", + "integrity": "sha512-RAwyS/2dT9X79QwM0F8KLweTfuBoe6xtiAlU7wKPB+/t/sfk6A50LYtAWaDVP5qBjcu50UkKkZT+VR47CiLkfg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*" + } + }, + "node_modules/@types/rdfjs__serializer-jsonld": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-jsonld/-/rdfjs__serializer-jsonld-2.0.5.tgz", + "integrity": "sha512-ubdLD9QgZzAt+65NSPzh2qWCPWcGYlHEWgkP6uRwfm7JC48Xh/QjzwOTG13MTomOkQqcN4R7PIG0j3Ca8iyNWQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0" + } + }, + "node_modules/@types/rdfjs__serializer-jsonld-ext": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-jsonld-ext/-/rdfjs__serializer-jsonld-ext-4.0.1.tgz", + "integrity": "sha512-jgbQ/1kV7nESKG7SY8FJED6K4OFznr6Sz3ybF1ncpBR7TUBTuy3InpZOVRK4Wjpy2zi84iIAzJ1CIIo9NZh2Xw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0", + "@types/jsonld": "*", + "@types/node": "*" + } + }, + "node_modules/@types/rdfjs__serializer-ntriples": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-ntriples/-/rdfjs__serializer-ntriples-2.0.6.tgz", + "integrity": "sha512-Nn3e3eyuymLvbI5MFzI7ODD/X6ZGpbB9fLaWOB00RtFHd2vttk3wQL2fzzsZZQPJ/ihC/xlFE4cNQkO6SoHa7w==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0" + } + }, + "node_modules/@types/rdfjs__serializer-turtle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-turtle/-/rdfjs__serializer-turtle-1.1.0.tgz", + "integrity": "sha512-NGHnbz5985UwS/YS6WL/FkS94B+QiVTdsfvJCqPwLmY3E7UeClw91c2KbiphZUR/uh7uwLwxeKKhV2T1gYgT5Q==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0", + "@types/node": "*", + "@types/rdfjs__prefix-map": "*" + } + }, + "node_modules/@types/rdfjs__sink-map": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/rdfjs__sink-map/-/rdfjs__sink-map-2.0.5.tgz", + "integrity": "sha512-ycUBlOMbp9YpjrBrMwGv3uiqulOWgodess06cinYLxomOTc2ET9rEQklgM5rJqnu5WMsVP8SFG3fFw36/5hADQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*" + } + }, + "node_modules/@types/react": { + "version": "18.3.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.21.tgz", + "integrity": "sha512-gXLBtmlcRJeT09/sI4PxVwyrku6SaNUj/6cMubjE6T6XdY1fDmBL7r0nX0jbSZPU/Xr0KuwLLZh6aOYY5d91Xw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/retry": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", + "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/shexj": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/shexj/-/shexj-2.1.7.tgz", + "integrity": "sha512-pu/0vIZxFTMPVjTlo5MJKFkBL/EbAuFhtCXpmBB7ZdUiyNpc6pt8GxfyRPqdf6q2SsWu71a/vbhvGK2IZN2Eug==", + "license": "MIT" + }, + "node_modules/@types/spark-md5": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/spark-md5/-/spark-md5-3.0.5.tgz", + "integrity": "sha512-lWf05dnD42DLVKQJZrDHtWFidcLrHuip01CtnC2/S6AMhX4t9ZlEUj4iuRlAnts0PQk7KESOqKxeGE/b6sIPGg==", + "license": "MIT" + }, + "node_modules/@types/sparqljs": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/@types/sparqljs/-/sparqljs-3.1.12.tgz", + "integrity": "sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": ">=1.0.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/uritemplate": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@types/uritemplate/-/uritemplate-0.3.6.tgz", + "integrity": "sha512-31BMGZ8GgLxgXxLnqg4KbbyYJjU1flhTTD2+PVQStVUPXSk0IIpK0zt+tH3eLT7ZRwLnzQw6JhYx69qza3U0wg==", + "license": "MIT" + }, + "node_modules/@types/url-join": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.3.tgz", + "integrity": "sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.4.1.tgz", + "integrity": "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.10", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/@vitest/coverage-istanbul": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-3.2.3.tgz", + "integrity": "sha512-kW1n4neEJbMYcAjzk+fS1nKReP+gURgaQ1/KzjAZsDyaUklnUjuWn38tLNbSwoobUBquuvdE6EzljSRxOuDXOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@istanbuljs/schema": "^0.1.3", + "debug": "^4.4.1", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-instrument": "^6.0.3", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magicast": "^0.3.5", + "test-exclude": "^7.0.1", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "3.2.3" + } + }, + "node_modules/@vitest/coverage-istanbul/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@vitest/coverage-istanbul/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vitest/coverage-istanbul/node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vitest/coverage-istanbul/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vitest/coverage-istanbul/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vitest/coverage-istanbul/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@vitest/coverage-istanbul/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vitest/coverage-istanbul/node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.3.tgz", + "integrity": "sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.3", + "@vitest/utils": "3.2.3", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.3.tgz", + "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.3.tgz", + "integrity": "sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.3", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.3.tgz", + "integrity": "sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.3", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.3.tgz", + "integrity": "sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.3.tgz", + "integrity": "sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.3", + "loupe": "^3.1.3", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@volar/language-core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "1.11.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/language-core": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/shared": "^3.3.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@zazuko/node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/@zazuko/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-mrEqq7BJyNBlK5oT7U1S0EfLbFPpVHLXQJswhrN8Mv/3BKmWIBtMBaphK8AXF7XEhgK9vzRs/f3AIG8oHlPdpg==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/@zazuko/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/@zazuko/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/@zazuko/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@zkochan/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk/node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.3.tgz", + "integrity": "sha512-+fksAx9eG3Ab6LDnLs3ZqZa8KVJ/jYnX+D4Qe1azX+LFGFAXqynCQLOdLpNYN/l9e7l6hMWwZbrnctqr6eSQSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrayify-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrayify-stream/-/arrayify-stream-2.0.1.tgz", + "integrity": "sha512-z8fB6PtmnewQpFB53piS2d1KlUi3BPMICH2h7leCOUXpQcwvZ4GbHHSpdKoUrgLMR6b4Qan/uDe1St3Ao3yIHg==", + "license": "MIT" + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/async-lock": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", + "license": "MIT" + }, + "node_modules/asynchronous-handlers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/asynchronous-handlers/-/asynchronous-handlers-1.0.2.tgz", + "integrity": "sha512-Jl5zQuDrq5owcX6Y5SD0Q3ZE73lR6hOaUw9Uwz0jglrrNauKYyczOtak/kfJ+u0rfoqbZa6jG4dtYPq5c6w08w==", + "license": "MIT", + "dependencies": { + "global-logger-factory": "^1.0.0" + } + }, + "node_modules/asynciterator": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/asynciterator/-/asynciterator-3.9.0.tgz", + "integrity": "sha512-bwLLTAnoE6Ap6XdjK/j8vDk2Vi9p3ojk0PFwM0SwktAG1k8pfRJF9ng+mmkaRFKdZCQQlOxcWnvOmX2NQ1HV0g==", + "license": "MIT" + }, + "node_modules/asyncjoin": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/asyncjoin/-/asyncjoin-1.2.4.tgz", + "integrity": "sha512-7/1g5uV2/iTDQteJ/pxqZq6qkO5406V+vNyOCYtHJ+mo6bmvvQHHrZgd7AtU/rx+cnz08NPWlwk8daW61thnlA==", + "license": "MIT", + "dependencies": { + "asynciterator": "^3.9.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcryptjs": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.2.tgz", + "integrity": "sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==", + "license": "BSD-3-Clause", + "bin": { + "bcrypt": "bin/bcrypt" + } + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bignumber.js": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.0.tgz", + "integrity": "sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/byte-size": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", + "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/cacache/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "license": "MIT", + "dependencies": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001717", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz", + "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/cfb": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-0.11.1.tgz", + "integrity": "sha512-1GEqpcO365hTRpP+GzHXNiUF5SB7qmY5aVYwrJm8ISx27HzHpaFlTQhnOCMNhqP0WPkHR0OGE9WDSqtksV4anw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "commander": "" + }, + "bin": { + "cfb": "bin/cfb.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chai": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/chalk/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/child-process-promise": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz", + "integrity": "sha512-Fi4aNdqBsr0mv+jgWxcZ/7rAIC2mgihrptyVI4foh/rrjY/3BNjfP9+oaiFx/fzim+1ZyCNBae0DlyfQhSugog==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^4.0.2", + "node-version": "^1.0.0", + "promise-polyfill": "^6.0.1" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clownface": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/clownface/-/clownface-1.5.1.tgz", + "integrity": "sha512-Ko8N/UFsnhEGmPlyE1bUFhbRhVgDbxqlIjcqxtLysc4dWaY0A7iCdg3savhAxs7Lheb7FCygIyRh7ADYZWVIng==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^1.1.0", + "@rdfjs/namespace": "^1.0.0" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmd-shim": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", + "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-block-writer": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", + "license": "MIT" + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colors-cli": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/colors-cli/-/colors-cli-1.0.33.tgz", + "integrity": "sha512-PWGsmoJFdOB0t+BeHgmtuoRZUQucOLl5ii81NBzOOGVxlgE04muFNHlR5j8i8MKbOPELBl3243AI6lGBTj5ICQ==", + "license": "MIT", + "bin": { + "colors": "bin/colors" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/componentsjs": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/componentsjs/-/componentsjs-6.3.0.tgz", + "integrity": "sha512-psWOXR/jk21yy4RwSi6CnIHqOn17QoECF+D+5LQqF+aGdvH1ZOlSlC/sD5j9xJGPpQ0wG5zE26SO3/t7W5JTrQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/minimist": "^1.2.0", + "@types/node": "^18.0.0", + "@types/semver": "^7.3.4", + "jsonld-context-parser": "^3.0.0", + "minimist": "^1.2.0", + "rdf-data-factory": "^1.1.0", + "rdf-object": "^2.0.0", + "rdf-parse": "^2.0.0", + "rdf-quad": "^1.5.0", + "rdf-string": "^1.6.0", + "rdf-terms": "^1.7.0", + "semver": "^7.3.2", + "winston": "^3.3.3" + }, + "bin": { + "componentsjs-compile-config": "bin/compile-config.js" + } + }, + "node_modules/componentsjs/node_modules/@types/node": { + "version": "18.19.112", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.112.tgz", + "integrity": "sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/componentsjs/node_modules/jsonld-context-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-3.0.0.tgz", + "integrity": "sha512-Kg6TVtBUdIm057ht/8WNhM9BROt+BeYaDGXbzrKaa3xA99csee+CsD8IMCTizRgzoO8PIzvzcxxCoRvpq1xNQw==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/componentsjs/node_modules/rdf-parse": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rdf-parse/-/rdf-parse-2.3.3.tgz", + "integrity": "sha512-N5XEHm+ajFzwo/vVNzB4tDtvqMwBosbVJmZl5DlzplQM9ejlJBlN/43i0ImAb/NMtJJgQPC3jYnkCKGA7wdo/w==", + "license": "MIT", + "dependencies": { + "@comunica/actor-http-fetch": "^2.0.1", + "@comunica/actor-http-proxy": "^2.0.1", + "@comunica/actor-rdf-parse-html": "^2.0.1", + "@comunica/actor-rdf-parse-html-microdata": "^2.0.1", + "@comunica/actor-rdf-parse-html-rdfa": "^2.0.1", + "@comunica/actor-rdf-parse-html-script": "^2.0.1", + "@comunica/actor-rdf-parse-jsonld": "^2.0.1", + "@comunica/actor-rdf-parse-n3": "^2.0.1", + "@comunica/actor-rdf-parse-rdfxml": "^2.0.1", + "@comunica/actor-rdf-parse-shaclc": "^2.6.2", + "@comunica/actor-rdf-parse-xml-rdfa": "^2.0.1", + "@comunica/bus-http": "^2.0.1", + "@comunica/bus-init": "^2.0.1", + "@comunica/bus-rdf-parse": "^2.0.1", + "@comunica/bus-rdf-parse-html": "^2.0.1", + "@comunica/config-query-sparql": "^2.0.1", + "@comunica/core": "^2.0.1", + "@comunica/mediator-combine-pipeline": "^2.0.1", + "@comunica/mediator-combine-union": "^2.0.1", + "@comunica/mediator-number": "^2.0.1", + "@comunica/mediator-race": "^2.0.1", + "@rdfjs/types": "*", + "readable-stream": "^4.3.0", + "stream-to-string": "^1.2.0" + } + }, + "node_modules/componentsjs/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/componentsjs/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concurrently": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.2.tgz", + "integrity": "sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", + "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-parser": "^4.0.0", + "dateformat": "^3.0.3", + "get-pkg-repo": "^4.2.1", + "git-raw-commits": "^3.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^5.0.0", + "normalize-package-data": "^3.0.3", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", + "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", + "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-filter": "^3.0.0", + "dateformat": "^3.0.3", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "meow": "^8.1.2", + "semver": "^7.0.0", + "split": "^1.0.1" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", + "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-commits-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", + "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^3.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "git-raw-commits": "^3.0.0", + "git-semver-tags": "^5.0.0", + "meow": "^8.1.2" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cookies": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", + "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/copyfiles": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", + "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^7.0.5", + "minimatch": "^3.0.3", + "mkdirp": "^1.0.4", + "noms": "0.0.0", + "through2": "^2.0.1", + "untildify": "^4.0.0", + "yargs": "^16.1.0" + }, + "bin": { + "copyfiles": "copyfiles", + "copyup": "copyfiles" + } + }, + "node_modules/copyfiles/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/copyfiles/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/copyfiles/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/copyfiles/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/copyfiles/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/core-js": { + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.43.0.tgz", + "integrity": "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", + "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-env/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-env/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "node_modules/cross-spawn/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/cross-spawn/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "license": "ISC" + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz", + "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.1.2", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true, + "license": "MIT" + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/dts-dom": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/dts-dom/-/dts-dom-3.6.0.tgz", + "integrity": "sha512-on5jxTgt+A6r0Zyyz6ZRHXaAO7J1VPnOd6+AmvI1vH440AlAZZNc5rUHzgPuTjGlrVr1rOWQYNl7ZJK6rDohbw==", + "license": "Apache-2.0" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.151", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.151.tgz", + "integrity": "sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz", + "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-svelte3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-4.0.0.tgz", + "integrity": "sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.0.0", + "svelte": "^3.2.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-3.5.0.tgz", + "integrity": "sha512-e3x3FBvGzeCIHhF+zhK8FZA2vC5uFn6b4HJjegUbIWrDb4mJ7JjTGMJY9VGIbRVpmSwHopNiaJibhjIr+HfLug==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/event-emitter-promisify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/event-emitter-promisify/-/event-emitter-promisify-1.1.0.tgz", + "integrity": "sha512-uyHG8gjwYGDlKoo0Txtx/u1HI1ubj0FK0rVqI4O0s1EymQm4iAEMbrS5B+XFlSaS8SZ3xzoKX+YHRZk8Nk/bXg==", + "license": "MIT" + }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/event-stream/node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/execa/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/expect/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expect/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", + "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.17.0 || >=12.3.0" + }, + "peerDependenciesMeta": { + "domexception": { + "optional": true + } + } + }, + "node_modules/fetch-sparql-endpoint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-6.0.0.tgz", + "integrity": "sha512-gHZxoegKEk5mLMl6VgdQzQOC/ELHzx0VdKs7ouCbJO/1cLBcLfaWupKHkPKY1b35aavBxnioHoXjG+HKijJG1Q==", + "license": "MIT", + "dependencies": { + "@types/n3": "^1.0.0", + "@types/readable-stream": "^4.0.0", + "@types/sparqljs": "^3.0.0", + "is-stream": "^2.0.0", + "n3": "^1.0.0", + "rdf-string": "^2.0.0", + "readable-from-web": "^1.0.0", + "sparqljs": "^3.0.0", + "sparqljson-parse": "^3.0.0", + "sparqlxml-parse": "^3.0.0", + "stream-to-string": "^1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/fetch-sparql-endpoint/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/fetch-sparql-endpoint/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/fetch-sparql-endpoint/node_modules/rdf-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-2.0.1.tgz", + "integrity": "sha512-SMW4ponnKNrsP9kYpOLyICeM4UJmEXIeS3zri7kPK9gzLFsHD88oiza8LnokNYxd76zW4JoYWD+v4x0g8rJBjw==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/frac": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/frac/-/frac-0.3.1.tgz", + "integrity": "sha512-1Lzf2jOjhIkRaa013KlxNOn2D9FemmQNeYUDpEIyPeFXmpLvbZXJOlaayMBT6JKXx+afQFgQ1QJ4kaF7Z07QFQ==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/get-pkg-repo/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/git-raw-commits": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", + "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^7.0.0", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", + "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^8.1.2", + "semver": "^7.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" + } + }, + "node_modules/git-url-parse": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz", + "integrity": "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "git-up": "^7.0.0" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "dev": true, + "license": "BSD", + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-logger-factory": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-logger-factory/-/global-logger-factory-1.0.0.tgz", + "integrity": "sha512-hN39r7dWZfdjhEaiM4r+2Fw/M3hjhmSHVVZmecp/IyQWhrCvpawWDk8imeHcsewGfaaGZWXoXjhjF5786E2biQ==", + "license": "MIT", + "dependencies": { + "winston": "^3.14.2", + "winston-transport": "^4.7.1" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", + "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT" + }, + "node_modules/graphql": { + "version": "15.10.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.10.1.tgz", + "integrity": "sha512-BL/Xd/T9baO6NFzoMpiMD7YUZ62R6viR5tp/MULVEnbYJXZA//kRNW7J0j1w/wXArgL0sCxhDfK5dczSKn3+cg==", + "license": "MIT", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/graphql-to-sparql": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/graphql-to-sparql/-/graphql-to-sparql-4.0.0.tgz", + "integrity": "sha512-H/wIQFdqvNf6CQs84/+eEb5O/w51HsRv1+XPl6d1nJxLqflYAg9yf6D4a46uqUCw/pxiY5E4JjwyBRdMOgtKsw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "graphql": "^15.5.2", + "jsonld-context-parser": "^3.0.0", + "minimist": "^1.2.0", + "rdf-data-factory": "^1.1.0", + "sparqlalgebrajs": "^4.0.0" + }, + "bin": { + "graphql-to-sparql": "bin/graphql-to-sparql.js" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/graphql-to-sparql/node_modules/@types/node": { + "version": "18.19.112", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.112.tgz", + "integrity": "sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/graphql-to-sparql/node_modules/jsonld-context-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-3.0.0.tgz", + "integrity": "sha512-Kg6TVtBUdIm057ht/8WNhM9BROt+BeYaDGXbzrKaa3xA99csee+CsD8IMCTizRgzoO8PIzvzcxxCoRvpq1xNQw==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/graphql-to-sparql/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true, + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hierarchy-closure": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/hierarchy-closure/-/hierarchy-closure-1.2.2.tgz", + "integrity": "sha512-ZqZvsA6HyMqrmm49D3llYA8x8hqdyDDEkaTXcqwyO+fGQlzxoeXws/5ze11M40s4EoTw7GFxdTKIwj5YDOicLQ==", + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "node_modules/http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "license": "MIT", + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-assert/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "license": "MIT", + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-basic/node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/http-basic/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/http-basic/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/http-basic/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-link-header": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "license": "MIT", + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "license": "MIT" + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dev": true, + "license": "MIT", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/init-package-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz", + "integrity": "sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^10.0.0", + "promzard": "^1.0.0", + "read": "^2.0.0", + "read-package-json": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/init-package-json/node_modules/hosted-git-info": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/init-package-json/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/init-package-json/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/init-package-json/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ioredis": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.1.tgz", + "integrity": "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==", + "license": "MIT", + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ssh": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/iso8601-duration": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-2.1.2.tgz", + "integrity": "sha512-yXteYUiKv6x8seaDzyBwnZtPpmx766KfvQuaVNyPifYOjmPdOo3ajd4phDNa7Y5mTQGnXsNEcXFtVun1FjYXxQ==", + "license": "MIT" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-environment-jsdom/node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-rdf": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/jest-rdf/-/jest-rdf-1.8.1.tgz", + "integrity": "sha512-L6XgjUEayTJYgCkM6jkDwkFosdeuv0yRdkf9g9Ewi1DL5ZN2VnNH8v1DeuNZWFijekM8e3dQNS6HPf7yxAqaDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-isomorphic": "^1.3.0", + "rdf-string": "^1.6.0", + "rdf-terms": "^1.9.1" + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true, + "license": "MIT" + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/jose": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", + "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonld": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-5.2.0.tgz", + "integrity": "sha512-JymgT6Xzk5CHEmHuEyvoTNviEPxv6ihLWSPu1gFdtjSAyM6cFqNrv02yS/SIur3BBIkCf0HjizRc24d8/FfQKw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^1.1.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsonld-context-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", + "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "cross-fetch": "^3.0.6", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/jsonld-context-parser/node_modules/@types/node": { + "version": "18.19.100", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.100.tgz", + "integrity": "sha512-ojmMP8SZBKprc3qGrGk8Ujpo80AXkrP7G2tOT4VWr5jlr5DHjsJF+emXJz+Wm0glmy4Js62oKMdZZ6B9Y+tEcA==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/jsonld-context-parser/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/jsonld-streaming-parser": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-3.4.0.tgz", + "integrity": "sha512-897CloyQgQidfkB04dLM5XaAXVX/cN9A2hvgHJo4y4jRhIpvg3KLMBBfcrswepV2N3T8c/Rp2JeFdWfVsbVZ7g==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.0", + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^2.4.0", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/jsonld-streaming-serializer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonld-streaming-serializer/-/jsonld-streaming-serializer-3.0.1.tgz", + "integrity": "sha512-lw5Z785Km53DRZ0ngyEamC3ojGdjFRDKvUt3b7lW5e8sqmTc7GHZxFBBw7IIqbb0Wc2WNksoXewmF13FC9bPNg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "jsonld-context-parser": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/jsonld-streaming-serializer/node_modules/@types/node": { + "version": "18.19.112", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.112.tgz", + "integrity": "sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/jsonld-streaming-serializer/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/jsonld-streaming-serializer/node_modules/jsonld-context-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-3.0.0.tgz", + "integrity": "sha512-Kg6TVtBUdIm057ht/8WNhM9BROt+BeYaDGXbzrKaa3xA99csee+CsD8IMCTizRgzoO8PIzvzcxxCoRvpq1xNQw==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/jsonld-streaming-serializer/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonld/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/jsonld2graphobject": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/jsonld2graphobject/-/jsonld2graphobject-0.0.4.tgz", + "integrity": "sha512-7siWYw9/EaD9lWyMbHr2uLMy8kbNVyOtDlsAWJUlUjVfXpcJcwLN6f0qeNt0ySV4fDoAJOjJXNvo7V/McrubAg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "jsonld-context-parser": "^2.1.5", + "uuid": "^8.3.2" + } + }, + "node_modules/jsonld2graphobject/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/jsonld2graphobject/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "license": "MIT", + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/koa": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.1.tgz", + "integrity": "sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==", + "license": "MIT", + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.9.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^2.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "license": "MIT" + }, + "node_modules/koa-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", + "license": "MIT", + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/koa/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/ky": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", + "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/ky-universal": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", + "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "3.0.0-beta.9" + }, + "engines": { + "node": ">=10.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.17.0", + "web-streams-polyfill": ">=2.0.0" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } + } + }, + "node_modules/ky-universal/node_modules/node-fetch": { + "version": "3.0.0-beta.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", + "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^2.1.1" + }, + "engines": { + "node": "^10.17 || >=12.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "> 0.8" + } + }, + "node_modules/lerna": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-7.4.2.tgz", + "integrity": "sha512-gxavfzHfJ4JL30OvMunmlm4Anw7d7Tq6tdVHzUukLdS9nWnxCN/QB21qR+VJYp5tcyXogHKbdUEGh6qmeyzxSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "7.4.2", + "@lerna/create": "7.4.2", + "@npmcli/run-script": "6.0.2", + "@nx/devkit": ">=16.5.1 < 17", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.11", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.1", + "columnify": "1.6.0", + "conventional-changelog-angular": "7.0.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "^8.2.0", + "dedent": "0.7.0", + "envinfo": "7.8.1", + "execa": "5.0.0", + "fs-extra": "^11.1.1", + "get-port": "5.1.1", + "get-stream": "6.0.0", + "git-url-parse": "13.1.0", + "glob-parent": "5.1.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "import-local": "3.1.0", + "ini": "^1.3.8", + "init-package-json": "5.0.0", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "jest-diff": ">=29.4.3 < 30", + "js-yaml": "4.1.0", + "libnpmaccess": "7.0.2", + "libnpmpublish": "7.3.0", + "load-json-file": "6.2.0", + "lodash": "^4.17.21", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "8.1.1", + "npm-packlist": "5.1.1", + "npm-registry-fetch": "^14.0.5", + "npmlog": "^6.0.2", + "nx": ">=16.5.1 < 17", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-pipe": "3.1.0", + "p-queue": "6.6.2", + "p-reduce": "2.1.0", + "p-waterfall": "2.1.1", + "pacote": "^15.2.0", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "read-package-json": "6.0.4", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.8", + "signal-exit": "3.0.7", + "slash": "3.0.0", + "ssri": "^9.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.1.11", + "temp-dir": "1.0.0", + "typescript": ">=3 < 6", + "upath": "2.0.1", + "uuid": "^9.0.0", + "validate-npm-package-license": "3.0.4", + "validate-npm-package-name": "5.0.0", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4" + }, + "bin": { + "lerna": "dist/cli.js" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/lerna/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/lerna/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/lerna/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lerna/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/lerna/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lerna/node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lerna/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/lerna/node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lerna/node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/lerna/node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/lerna/node_modules/glob/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/lerna/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/lerna/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/lerna/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/lerna/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/lerna/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/lerna/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lerna/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lerna/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lerna/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/lerna/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/lerna/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/lerna/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lerna/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lerna/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/lerna/node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libnpmaccess": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz", + "integrity": "sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmaccess/node_modules/hosted-git-info": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmaccess/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/libnpmaccess/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmaccess/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-7.3.0.tgz", + "integrity": "sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg==", + "dev": true, + "license": "ISC", + "dependencies": { + "ci-info": "^3.6.1", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", + "semver": "^7.3.7", + "sigstore": "^1.4.0", + "ssri": "^10.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish/node_modules/hosted-git-info": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/libnpmpublish/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/libnpmpublish/node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/lines-and-columns": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/loading-cli": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/loading-cli/-/loading-cli-1.1.2.tgz", + "integrity": "sha512-M1ntfXHpdGoQxfaqKBOQPwSrTr9EIoTgj664Q9UVSbSnJvAFdribo+Ij//1jvACgrGHaTvfKoD9PG3NOxGj44g==", + "license": "MIT", + "dependencies": { + "colors-cli": "^1.0.26" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.orderby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz", + "integrity": "sha512-T0rZxKmghOOf5YPnn8EY5iLYeWCpZq8G41FfqoVHH5QDTAFaghJRmAdLiadEDq+ztgM2q5PjA+Z1fOwGrLgmtg==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loglevel-colored-level-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==", + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "loglevel": "^1.4.1" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz", + "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/microdata-rdf-streaming-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-2.0.1.tgz", + "integrity": "sha512-oEEYP3OwPGOtoE4eIyJvX1eJXI7VkGR4gKYqpEufaRXc2ele/Tkid/KMU3Los13wGrOq6woSxLEGOYSHzpRvwA==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "htmlparser2": "^8.0.0", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.1.0", + "relative-to-absolute-iri": "^1.0.2" + } + }, + "node_modules/microdata-rdf-streaming-parser/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", + "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/multimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/multimatch/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, + "node_modules/n3": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/n3/-/n3-1.26.0.tgz", + "integrity": "sha512-SQknS0ua90rN+3RHuk8BeIqeYyqIH/+ecViZxX08jR4j6MugqWRjtONl3uANG/crWXnOM2WIqBJtjIhVYFha+w==", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" + }, + "node_modules/negotiate": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/negotiate/-/negotiate-1.0.1.tgz", + "integrity": "sha512-KBCIM4dAIT9j/pSXLHHQbZG74NmKNXTtxU2zHN0HG6uzzuFE01m1UdGoUmVHmACiBuCAOL7KwfqSW1oUQBj/vg==" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/nextgraph": { + "version": "0.1.1-alpha.7", + "resolved": "https://registry.npmjs.org/nextgraph/-/nextgraph-0.1.1-alpha.7.tgz", + "integrity": "sha512-Dd0Fl18roKVxAHm0Z39k5Ylsgbqkev0JFOveUYnp5fLYwmECm2gUhO/Nb1P8m79V7D/jW6rHEU5edQA5sx0zFg==", + "dev": true, + "license": "MIT/Apache-2.0" + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-cleanup": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", + "integrity": "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-version": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.2.0.tgz", + "integrity": "sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodeify-fetch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nodeify-fetch/-/nodeify-fetch-2.2.2.tgz", + "integrity": "sha512-4b1Jysy9RGyya0wJpseTQyxUgSbx6kw9ocHTY0OFRXWlxa2Uy5PrSo/P/nwoUn59rBR9YKty2kd7g4LKXmsZVA==", + "license": "MIT", + "dependencies": { + "@zazuko/node-fetch": "^2.6.6", + "concat-stream": "^1.6.0", + "cross-fetch": "^3.0.4", + "readable-error": "^1.0.0", + "readable-stream": "^3.5.0" + } + }, + "node_modules/nodeify-fetch/node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/nodeify-fetch/node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/nodeify-fetch/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/nodeify-fetch/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/nodeify-fetch/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/nodemailer": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.1.tgz", + "integrity": "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/noms": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", + "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", + "dev": true, + "license": "ISC", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "~1.0.31" + } + }, + "node_modules/noms/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/noms/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/noms/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true, + "license": "ISC" + }, + "node_modules/npm-package-arg": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", + "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/npm-package-arg/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/npm-packlist": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", + "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-packlist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", + "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-registry-fetch/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-registry-fetch/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nx": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.10.0.tgz", + "integrity": "sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nrwl/tao": "16.10.0", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.5.3", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "16.10.0", + "@nx/nx-darwin-x64": "16.10.0", + "@nx/nx-freebsd-x64": "16.10.0", + "@nx/nx-linux-arm-gnueabihf": "16.10.0", + "@nx/nx-linux-arm64-gnu": "16.10.0", + "@nx/nx-linux-arm64-musl": "16.10.0", + "@nx/nx-linux-x64-gnu": "16.10.0", + "@nx/nx-linux-x64-musl": "16.10.0", + "@nx/nx-win32-arm64-msvc": "16.10.0", + "@nx/nx-win32-x64-msvc": "16.10.0" + }, + "peerDependencies": { + "@swc-node/register": "^1.6.7", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/nx/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nx/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/nx/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/nx/node_modules/dotenv": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", + "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/nx/node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/nx/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/nx/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/nx/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/nx/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/nx/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/nx/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oidc-provider": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/oidc-provider/-/oidc-provider-8.8.1.tgz", + "integrity": "sha512-qVChpayTwojUREJxLkFofUSK8kiSRIdzPrVSsoGibqRHl/YO60ege94OZS8vh7zaK+zxcG/Gu8UMaYB5ulohCQ==", + "license": "MIT", + "dependencies": { + "@koa/cors": "^5.0.0", + "@koa/router": "^13.1.0", + "debug": "^4.4.0", + "eta": "^3.5.0", + "got": "^13.0.0", + "jose": "^5.9.6", + "jsesc": "^3.1.0", + "koa": "^2.15.4", + "nanoid": "^5.0.9", + "object-hash": "^3.0.0", + "oidc-token-hash": "^5.0.3", + "quick-lru": "^7.0.0", + "raw-body": "^3.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/oidc-provider/node_modules/quick-lru": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-7.0.1.tgz", + "integrity": "sha512-kLjThirJMkWKutUKbZ8ViqFc09tDQhlbQo2MNuVeLWbRauqYP96Sm6nzlQ24F0HFjUNZ4i9+AgldJ9H6DZXi7g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/oidc-token-hash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.1.0.tgz", + "integrity": "sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/pacote/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-path": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-path": "^7.0.0" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-eslint": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-16.4.2.tgz", + "integrity": "sha512-vtJAQEkaN8fW5QKl08t7A5KCjlZuDUNeIlr9hgolMS5s3+uzbfRHDwaRnzrdqnY2YpHDmeDS/8zY0MKQHXJtaA==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/parser": "^6.21.0", + "common-tags": "^1.8.2", + "dlv": "^1.1.3", + "eslint": "^8.57.1", + "indent-string": "^4.0.0", + "lodash.merge": "^4.6.2", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^3.5.3", + "pretty-format": "^29.7.0", + "require-relative": "^0.8.7", + "tslib": "^2.8.1", + "vue-eslint-parser": "^9.4.3" + }, + "engines": { + "node": ">=16.10.0" + }, + "funding": { + "url": "https://opencollective.com/prettier-eslint" + }, + "peerDependencies": { + "prettier-plugin-svelte": "^3.0.0", + "svelte-eslint-parser": "*" + }, + "peerDependenciesMeta": { + "prettier-plugin-svelte": { + "optional": true + }, + "svelte-eslint-parser": { + "optional": true + } + } + }, + "node_modules/prettier-eslint/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prettier-eslint/node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-eslint/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-polyfill": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", + "integrity": "sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ==", + "license": "MIT" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/promzard": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", + "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "read": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promzard/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promzard/node_modules/read": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", + "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", + "license": "MIT" + }, + "node_modules/protocols": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "license": "ISC" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rdf-data-factory": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.3.tgz", + "integrity": "sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^1.0.0" + } + }, + "node_modules/rdf-data-factory/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rdf-dereference": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/rdf-dereference/-/rdf-dereference-2.2.0.tgz", + "integrity": "sha512-6geM3CSUlXTK3n4OoKsL95M7XwKXoxiwK7cf4e/+Dj0X/ll77ihFN5j9VhLGXNYbMXDlm30kBg/VU6ymMv6o/Q==", + "license": "MIT", + "dependencies": { + "@comunica/actor-dereference-fallback": "^2.0.2", + "@comunica/actor-dereference-file": "^2.0.2", + "@comunica/actor-dereference-http": "^2.0.2", + "@comunica/actor-dereference-rdf-parse": "^2.6.0", + "@comunica/actor-http-fetch": "^2.0.1", + "@comunica/actor-http-proxy": "^2.0.1", + "@comunica/actor-rdf-parse-html": "^2.0.1", + "@comunica/actor-rdf-parse-html-microdata": "^2.0.1", + "@comunica/actor-rdf-parse-html-rdfa": "^2.0.1", + "@comunica/actor-rdf-parse-html-script": "^2.0.1", + "@comunica/actor-rdf-parse-jsonld": "^2.0.1", + "@comunica/actor-rdf-parse-n3": "^2.0.1", + "@comunica/actor-rdf-parse-rdfxml": "^2.0.1", + "@comunica/actor-rdf-parse-shaclc": "^2.6.0", + "@comunica/actor-rdf-parse-xml-rdfa": "^2.0.1", + "@comunica/bus-dereference": "^2.0.2", + "@comunica/bus-dereference-rdf": "^2.0.2", + "@comunica/bus-http": "^2.0.1", + "@comunica/bus-init": "^2.0.1", + "@comunica/bus-rdf-parse": "^2.0.1", + "@comunica/bus-rdf-parse-html": "^2.0.1", + "@comunica/config-query-sparql": "^2.0.1", + "@comunica/context-entries": "^2.8.1", + "@comunica/core": "^2.0.1", + "@comunica/mediator-combine-pipeline": "^2.0.1", + "@comunica/mediator-combine-union": "^2.0.1", + "@comunica/mediator-number": "^2.0.1", + "@comunica/mediator-race": "^2.0.1", + "@rdfjs/types": "*", + "process": "^0.11.10", + "rdf-string": "^1.6.0", + "stream-to-string": "^1.2.0" + }, + "bin": { + "rdf-dereference": "bin/Runner.js" + } + }, + "node_modules/rdf-dereference-store": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/rdf-dereference-store/-/rdf-dereference-store-1.4.0.tgz", + "integrity": "sha512-VWobImdfxG46vBGzD8V/CJ6+zSC5FPt16Fe0PUyK+jUQG5hYbGDp0+U7fcaeK5Xif8y9kA0mXPUy2k/Qn9PWLg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^1.1.0", + "@types/n3": "^1.16.4", + "asynciterator": "^3.9.0", + "event-emitter-promisify": "^1.1.0", + "n3": "^1.17.3", + "rdf-dereference": "^4.0.0", + "rdf-parse": "^4.0.0", + "readable-stream": "^4.5.2" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-abstract-mediatyped": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-4.2.0.tgz", + "integrity": "sha512-+7NuPZQAi7iRJ1Cie9qqhbJjBv0/SadA/24+KrDVU4+4QM6n5usCKibA8D84Nqgt257IsrFrb2G7NndTZ6taww==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-abstract-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-4.2.0.tgz", + "integrity": "sha512-WUHr9Bhr3Z7eJ2GtSGnhj1xCXCarKkC82WPorlG+RhuPuryp152GtJYtdyBIR4pEetP2hL4n+VuvHjXY80LWbQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-dereference-fallback": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-fallback/-/actor-dereference-fallback-4.2.0.tgz", + "integrity": "sha512-MtDTZj1zUrzj8zte74+3KnMVaJrQfQm15AquK3g8XwJYwDEPJwT5bDRenb/TXlcG6qio9MamY4iYkgsCRPmPVQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-dereference-file": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-file/-/actor-dereference-file-4.2.0.tgz", + "integrity": "sha512-Dq+y1gmZ/ExEqrEyTTBOg6h4nxNjivF35KjMexmnIS1tLD9+coaa0lOV3H5VyF40i+P/Bo9c0N940yYKoN30CQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-dereference-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-http/-/actor-dereference-http-4.2.0.tgz", + "integrity": "sha512-FKyO0N15QKanXc5mHAdLTaI0BXEhs2A6uxGr0IwcAePaMFt+fjxlG/sz97PeSgVzoW60nLD21a29KVN6cTGbMg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-http": "^4.2.0", + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "relative-to-absolute-iri": "^1.0.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-dereference-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-rdf-parse/-/actor-dereference-rdf-parse-4.2.0.tgz", + "integrity": "sha512-i8Buj5Vlf6C7cA59Y8DqPjVABSDQZtjOgME/dheGrLdGm04xES+MRBwjLIhYnXadBns0Kk/UjIsnSI+k6sEXdw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-dereference-rdf": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-http-fetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-fetch/-/actor-http-fetch-4.2.0.tgz", + "integrity": "sha512-oZMNb01Jpc+e/0/b8+zRjQsNrEndfIiA6UpN0os4hROHw3QBw3ewT05g/GZUp7V+Fo/uSA4akUUqDsLKyZxRaw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-http-proxy": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-proxy/-/actor-http-proxy-4.2.0.tgz", + "integrity": "sha512-aKJEv7mkMJiMJRTxsqPyUfjczoKDT9u/0wIWzSdW215hdW5ITAla08fD+/yIqKAD/Nz9bdZo3CSLwIMrtENmEQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-rdf-parse-html": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-4.2.0.tgz", + "integrity": "sha512-g3WBPzZ76AnMqNc9EJ0NYrF/3YYyyv5xz07yLtoRPwseT/ADdXszMLnkqlrNvh0hoz2DV4RVBynW7X/3gcv83A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "htmlparser2": "^10.0.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-rdf-parse-html-microdata": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-4.2.0.tgz", + "integrity": "sha512-BcwVDfgtGKbXcdi7FHNzGiwOwZim629obfiHJsCFz/u+/ijQ9uQCbkBYILkvlNDBhJGhV2g+z0WdyJnnrVH6nA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "microdata-rdf-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-rdf-parse-html-rdfa": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-4.2.0.tgz", + "integrity": "sha512-frs09nzpFCpGV8w3MRT9SvHiBeeiMWnvVh/aJ1XKgzZh4sXYvUyf1nPMf5eUCa8tv3x4k1Rt+1ryd5nHyPRLOg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "rdfa-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-rdf-parse-html-script": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-4.2.0.tgz", + "integrity": "sha512-zbH9NSDPmufxJvbHdsQK3QwDf5Et/ywXElgCG+sPHdtJTqjKG/cuQSF3xwM1xYl++kLXR0KY3bz/EIQGRsq/OA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "readable-stream": "^4.5.2", + "relative-to-absolute-iri": "^1.0.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-rdf-parse-jsonld": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-4.2.0.tgz", + "integrity": "sha512-qD+tuwx/E5z+c55hWrjtRWmS+tMw/ZPJgvNmD+DEUYf1LCeJ3WqjMEa3u783eVxNCXTJQ/CguVm5kZGKwG669w==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "jsonld-context-parser": "^2.2.2", + "jsonld-streaming-parser": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-rdf-parse-n3": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-4.3.0.tgz", + "integrity": "sha512-kDVTeefCi1PpTuDDm+lLumz2nUofPxvPeeOO531FKtky5tAfT9SZGblptAgM1EgdKqruH00IJ6+KLXFb1XbjDA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "n3": "^1.26.0" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-rdf-parse-rdfxml": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-4.2.0.tgz", + "integrity": "sha512-0bhARRt80pEgVRDPb8xmtgKOrXS6ccV/XJMfmXTFEN2y5BCdXPKVazN/QEH7GBIrx/GkgQGXFwnprIvJlRJbag==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "rdfxml-streaming-parser": "^2.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-rdf-parse-shaclc": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-shaclc/-/actor-rdf-parse-shaclc-4.2.0.tgz", + "integrity": "sha512-qnTAFZEYofrwuhjGi1ToMs33BuUjvdklixQ9odEUcGTbUhrhCkcI2VqE7etDVkn3RlmEAHLseWHkCWEWWS167Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/types": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "readable-stream": "^4.5.2", + "shaclc-parse": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/actor-rdf-parse-xml-rdfa": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-4.2.0.tgz", + "integrity": "sha512-PMRVpUSGzUieRpW7ffkciaX+x+QkgtlD/2lu2Ru7EPo/NwM5yelshwdv7VDv/lYeWOKwrx01GQgTQSU8dPDeoQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "rdfa-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/bus-dereference": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-4.2.0.tgz", + "integrity": "sha512-KWaGcrW9B0tWbgtG8gDK6nosdl94unyaaX5eCDSjTXqN6ZZA+NEDHbzRWypxcxbzMugAvyNwcAmC28KW+h9KCQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/bus-dereference-rdf": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-4.2.0.tgz", + "integrity": "sha512-RQvj/BMP9QD9v3ZR4vIYLLlRWawAhXDzCOZZ6oJnhmxSOW0NfdL3h5rFI03HVPpDfyWtV4ACKK8FNe6gOIeXZw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-dereference": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/bus-init": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-4.2.0.tgz", + "integrity": "sha512-AxX9fOI0xKjed4nbxz5ADLb5ILbBJPkvDuehvKOtK5i2fto+cUDg3V4QUVJEdSrCoreSwdSzmygG93NBOkqHrg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/bus-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-4.2.0.tgz", + "integrity": "sha512-P92ACuOk2zicOfNDiRc8xAA/u3yw6pHKQDZWRs/XXJJQIyEU+9CAKA6URHcb0+ffnVtxHtiiqI2nsra7MRadIg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/bus-rdf-parse-html": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-4.2.0.tgz", + "integrity": "sha512-pQPHa2IMPPuicQQYQ2IlgFuUa7JBPRohSe3uMhUfcAUv9aGZKcIrlFdXCQPnUc+HLNU/f/06HmcWiXtgS8YujQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/config-query-sparql": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/config-query-sparql/-/config-query-sparql-4.3.0.tgz", + "integrity": "sha512-uFCwe5eSewx1bznciTZSTjMbN+9i4wD8l1KQEFe9b+UOGWJ0JLs4rz4PMYx0k/DQQqz6OyG87G2ikn16DoNzWg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/mediator-combine-pipeline": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-pipeline/-/mediator-combine-pipeline-4.2.0.tgz", + "integrity": "sha512-UYFBKR3bmFqJC+A9sx+kEsvGuILNimt/5yTC0yId56sjdwAaEEQz9iFLI1HqJS2T6weu81S/VXiYUpwp9DGJbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/mediator-combine-union": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-4.2.0.tgz", + "integrity": "sha512-hdqtqmGb0aEW8sIcp3WvzziXAxPfGWYDBgH/QQIk2JVWc7auGWvddut2pQCGHyFrv6MXI0vbjj8g1UIaAMviBQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/mediator-number": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-4.2.0.tgz", + "integrity": "sha512-TYwcukPQLblV3sfkNMsl3oj3AXSzcGmB+tUYy/++kKohQ67xy2r0wfBo1Ij/6G4ZnzlMIuOWzQcXojFrnV9iWQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/mediator-race": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-4.2.0.tgz", + "integrity": "sha512-KHfRVB+Qfaou8tJeXrCrcw1NlTUD+xbi5/7qSwvRqEbbajW2B4cRYbw0VrTJDFUb1tva5IHQQGpMFJ/aHHpH5w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/mediatortype-time": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-4.2.0.tgz", + "integrity": "sha512-t/IVwZPeb4hijIjdQKl/BS14HR7PXDgiv2Djq1f42596mluPjDemUG3suxx8VxBCGhG6Jckupg/WvvLYdW585w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-dereference-store/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rdf-dereference-store/node_modules/@types/node": { + "version": "18.19.112", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.112.tgz", + "integrity": "sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/rdf-dereference-store/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rdf-dereference-store/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/rdf-dereference-store/node_modules/htmlparser2": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/rdf-dereference-store/node_modules/jsonld-streaming-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-4.0.1.tgz", + "integrity": "sha512-6M4y9YGgADk3nXJebbRrxEdMVBJ9bnz+peAvjTXUievopqaE8sg/qml/I6Sp1ln7rpOKffsNZWSre6B7N76szw==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.0", + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^3.0.0", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-dereference-store/node_modules/jsonld-streaming-parser/node_modules/jsonld-context-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-3.0.0.tgz", + "integrity": "sha512-Kg6TVtBUdIm057ht/8WNhM9BROt+BeYaDGXbzrKaa3xA99csee+CsD8IMCTizRgzoO8PIzvzcxxCoRvpq1xNQw==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/rdf-dereference-store/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/rdf-dereference-store/node_modules/rdf-dereference": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rdf-dereference/-/rdf-dereference-4.0.0.tgz", + "integrity": "sha512-hv7uqIHTB9M/OnS69hrSwNVBo/4+CFLwdVCL6Lg7z0+KLDJChZmTK5e6CFQ8v0OL1TJTSETGx2/EORhOwuZfFQ==", + "license": "MIT", + "dependencies": { + "@comunica/actor-dereference-fallback": "^4.0.1", + "@comunica/actor-dereference-file": "^4.0.1", + "@comunica/actor-dereference-http": "^4.0.1", + "@comunica/actor-dereference-rdf-parse": "^4.0.1", + "@comunica/actor-http-fetch": "^4.0.1", + "@comunica/actor-http-proxy": "^4.0.1", + "@comunica/actor-rdf-parse-html": "^4.0.1", + "@comunica/actor-rdf-parse-html-microdata": "^4.0.1", + "@comunica/actor-rdf-parse-html-rdfa": "^4.0.1", + "@comunica/actor-rdf-parse-html-script": "^4.0.1", + "@comunica/actor-rdf-parse-jsonld": "^4.0.1", + "@comunica/actor-rdf-parse-n3": "^4.0.1", + "@comunica/actor-rdf-parse-rdfxml": "^4.0.1", + "@comunica/actor-rdf-parse-shaclc": "^4.0.1", + "@comunica/actor-rdf-parse-xml-rdfa": "^4.0.1", + "@comunica/bus-dereference": "^4.0.1", + "@comunica/bus-dereference-rdf": "^4.0.1", + "@comunica/bus-http": "^4.0.1", + "@comunica/bus-init": "^4.0.1", + "@comunica/bus-rdf-parse": "^4.0.1", + "@comunica/bus-rdf-parse-html": "^4.0.1", + "@comunica/config-query-sparql": "^4.0.1", + "@comunica/context-entries": "^4.0.1", + "@comunica/core": "^4.0.1", + "@comunica/mediator-combine-pipeline": "^4.0.1", + "@comunica/mediator-combine-union": "^4.0.1", + "@comunica/mediator-number": "^4.0.1", + "@comunica/mediator-race": "^4.0.1", + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.2", + "rdf-string": "^1.6.3", + "stream-to-string": "^1.2.1" + }, + "bin": { + "rdf-dereference": "bin/Runner.js" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-dereference-store/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/rdf-isomorphic": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz", + "integrity": "sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "hash.js": "^1.1.7", + "rdf-string": "^1.6.0", + "rdf-terms": "^1.7.0" + } + }, + "node_modules/rdf-js": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rdf-js/-/rdf-js-4.0.2.tgz", + "integrity": "sha512-ApvlFa/WsQh8LpPK/6hctQwG06Z9ztQQGWVtrcrf9L6+sejHNXLPOqL+w7q3hF+iL0C4sv3AX1PUtGkLNzyZ0Q==", + "deprecated": "Use @types/rdf-js instead. See https://github.com/rdfjs/types?tab=readme-ov-file#what-about-typesrdf-js", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*" + } + }, + "node_modules/rdf-literal": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-1.3.2.tgz", + "integrity": "sha512-79Stlu3sXy0kq9/decHFLf3xNPuY6sfhFPhd/diWErgaFr0Ekyg38Vh9bnVcqDYu48CFRi0t+hrFii49n92Hbw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/rdf-namespaces": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/rdf-namespaces/-/rdf-namespaces-1.13.1.tgz", + "integrity": "sha512-JQoK2qqORJfoyqTAFQR0xW8LtEgLt24ZQq4rC+SzOIokivIfN21uvur5kEogls36mCsONK5IKwPUXD8vXw3orQ==", + "license": "MIT" + }, + "node_modules/rdf-object": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rdf-object/-/rdf-object-2.0.0.tgz", + "integrity": "sha512-QeSaNt/I0DfYvOC3/EBbZ9aYb1wX1fqc0JUKMAR2gpIE99eWn7+N8dE8Z7a7kIM5tr/w7zvrO710gYs9yvaM9A==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "jsonld-context-parser": "^3.0.0", + "rdf-data-factory": "^1.1.0", + "rdf-string": "^1.6.0", + "streamify-array": "^1.0.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-object/node_modules/@types/node": { + "version": "18.19.112", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.112.tgz", + "integrity": "sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/rdf-object/node_modules/jsonld-context-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-3.0.0.tgz", + "integrity": "sha512-Kg6TVtBUdIm057ht/8WNhM9BROt+BeYaDGXbzrKaa3xA99csee+CsD8IMCTizRgzoO8PIzvzcxxCoRvpq1xNQw==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/rdf-object/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/rdf-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rdf-parse/-/rdf-parse-4.0.0.tgz", + "integrity": "sha512-lNVuUKPVAdX9lJYYrJFhdQHFulYjk95BYvuNsE+eUs/M93sdsovH/Ga8bTAxagmpsoQ4LzMPa2YqeHX8ysltOA==", + "license": "MIT", + "dependencies": { + "@comunica/actor-http-fetch": "^4.0.1", + "@comunica/actor-http-proxy": "^4.0.1", + "@comunica/actor-rdf-parse-html": "^4.0.1", + "@comunica/actor-rdf-parse-html-microdata": "^4.0.1", + "@comunica/actor-rdf-parse-html-rdfa": "^4.0.1", + "@comunica/actor-rdf-parse-html-script": "^4.0.1", + "@comunica/actor-rdf-parse-jsonld": "^4.0.1", + "@comunica/actor-rdf-parse-n3": "^4.0.1", + "@comunica/actor-rdf-parse-rdfxml": "^4.0.1", + "@comunica/actor-rdf-parse-shaclc": "^4.0.1", + "@comunica/actor-rdf-parse-xml-rdfa": "^4.0.1", + "@comunica/bus-http": "^4.0.1", + "@comunica/bus-init": "^4.0.1", + "@comunica/bus-rdf-parse": "^4.0.1", + "@comunica/bus-rdf-parse-html": "^4.0.1", + "@comunica/config-query-sparql": "^4.0.1", + "@comunica/context-entries": "^4.0.1", + "@comunica/core": "^4.0.1", + "@comunica/mediator-combine-pipeline": "^4.0.1", + "@comunica/mediator-combine-union": "^4.0.1", + "@comunica/mediator-number": "^4.0.1", + "@comunica/mediator-race": "^4.0.1", + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.2", + "readable-stream": "^4.5.2", + "stream-to-string": "^1.2.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-abstract-mediatyped": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-4.2.0.tgz", + "integrity": "sha512-+7NuPZQAi7iRJ1Cie9qqhbJjBv0/SadA/24+KrDVU4+4QM6n5usCKibA8D84Nqgt257IsrFrb2G7NndTZ6taww==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-abstract-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-4.2.0.tgz", + "integrity": "sha512-WUHr9Bhr3Z7eJ2GtSGnhj1xCXCarKkC82WPorlG+RhuPuryp152GtJYtdyBIR4pEetP2hL4n+VuvHjXY80LWbQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-http-fetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-fetch/-/actor-http-fetch-4.2.0.tgz", + "integrity": "sha512-oZMNb01Jpc+e/0/b8+zRjQsNrEndfIiA6UpN0os4hROHw3QBw3ewT05g/GZUp7V+Fo/uSA4akUUqDsLKyZxRaw==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-http-proxy": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-proxy/-/actor-http-proxy-4.2.0.tgz", + "integrity": "sha512-aKJEv7mkMJiMJRTxsqPyUfjczoKDT9u/0wIWzSdW215hdW5ITAla08fD+/yIqKAD/Nz9bdZo3CSLwIMrtENmEQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/mediatortype-time": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-rdf-parse-html": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-4.2.0.tgz", + "integrity": "sha512-g3WBPzZ76AnMqNc9EJ0NYrF/3YYyyv5xz07yLtoRPwseT/ADdXszMLnkqlrNvh0hoz2DV4RVBynW7X/3gcv83A==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "htmlparser2": "^10.0.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-rdf-parse-html-microdata": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-4.2.0.tgz", + "integrity": "sha512-BcwVDfgtGKbXcdi7FHNzGiwOwZim629obfiHJsCFz/u+/ijQ9uQCbkBYILkvlNDBhJGhV2g+z0WdyJnnrVH6nA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "microdata-rdf-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-rdf-parse-html-rdfa": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-4.2.0.tgz", + "integrity": "sha512-frs09nzpFCpGV8w3MRT9SvHiBeeiMWnvVh/aJ1XKgzZh4sXYvUyf1nPMf5eUCa8tv3x4k1Rt+1ryd5nHyPRLOg==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "rdfa-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-rdf-parse-html-script": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-4.2.0.tgz", + "integrity": "sha512-zbH9NSDPmufxJvbHdsQK3QwDf5Et/ywXElgCG+sPHdtJTqjKG/cuQSF3xwM1xYl++kLXR0KY3bz/EIQGRsq/OA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/bus-rdf-parse-html": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "readable-stream": "^4.5.2", + "relative-to-absolute-iri": "^1.0.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-rdf-parse-jsonld": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-4.2.0.tgz", + "integrity": "sha512-qD+tuwx/E5z+c55hWrjtRWmS+tMw/ZPJgvNmD+DEUYf1LCeJ3WqjMEa3u783eVxNCXTJQ/CguVm5kZGKwG669w==", + "license": "MIT", + "dependencies": { + "@comunica/bus-http": "^4.2.0", + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "jsonld-context-parser": "^2.2.2", + "jsonld-streaming-parser": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-rdf-parse-n3": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-4.3.0.tgz", + "integrity": "sha512-kDVTeefCi1PpTuDDm+lLumz2nUofPxvPeeOO531FKtky5tAfT9SZGblptAgM1EgdKqruH00IJ6+KLXFb1XbjDA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "n3": "^1.26.0" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-rdf-parse-rdfxml": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-4.2.0.tgz", + "integrity": "sha512-0bhARRt80pEgVRDPb8xmtgKOrXS6ccV/XJMfmXTFEN2y5BCdXPKVazN/QEH7GBIrx/GkgQGXFwnprIvJlRJbag==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "rdfxml-streaming-parser": "^2.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-rdf-parse-shaclc": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-shaclc/-/actor-rdf-parse-shaclc-4.2.0.tgz", + "integrity": "sha512-qnTAFZEYofrwuhjGi1ToMs33BuUjvdklixQ9odEUcGTbUhrhCkcI2VqE7etDVkn3RlmEAHLseWHkCWEWWS167Q==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/types": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "@rdfjs/types": "*", + "asynciterator": "^3.9.0", + "readable-stream": "^4.5.2", + "shaclc-parse": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/actor-rdf-parse-xml-rdfa": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-4.2.0.tgz", + "integrity": "sha512-PMRVpUSGzUieRpW7ffkciaX+x+QkgtlD/2lu2Ru7EPo/NwM5yelshwdv7VDv/lYeWOKwrx01GQgTQSU8dPDeoQ==", + "license": "MIT", + "dependencies": { + "@comunica/bus-rdf-parse": "^4.2.0", + "@comunica/context-entries": "^4.2.0", + "@comunica/types": "^4.2.0", + "rdfa-streaming-parser": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/bus-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-4.2.0.tgz", + "integrity": "sha512-ZCtufwu+xMFUlE8FvI1CrNncW6Npa44wWN+RMGu+X0qhP0DIu9DyUZlKJgwy1KcMfhqwbEQpsWf9kWlyW2IpCQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@jeswr/stream-to-string": "^2.0.0", + "is-stream": "^2.0.1", + "readable-from-web": "^1.0.0", + "readable-stream-node-to-web": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/bus-init": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-4.2.0.tgz", + "integrity": "sha512-AxX9fOI0xKjed4nbxz5ADLb5ILbBJPkvDuehvKOtK5i2fto+cUDg3V4QUVJEdSrCoreSwdSzmygG93NBOkqHrg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/bus-rdf-parse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-4.2.0.tgz", + "integrity": "sha512-P92ACuOk2zicOfNDiRc8xAA/u3yw6pHKQDZWRs/XXJJQIyEU+9CAKA6URHcb0+ffnVtxHtiiqI2nsra7MRadIg==", + "license": "MIT", + "dependencies": { + "@comunica/actor-abstract-mediatyped": "^4.2.0", + "@comunica/actor-abstract-parse": "^4.2.0", + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/bus-rdf-parse-html": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-4.2.0.tgz", + "integrity": "sha512-pQPHa2IMPPuicQQYQ2IlgFuUa7JBPRohSe3uMhUfcAUv9aGZKcIrlFdXCQPnUc+HLNU/f/06HmcWiXtgS8YujQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@rdfjs/types": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/config-query-sparql": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/config-query-sparql/-/config-query-sparql-4.3.0.tgz", + "integrity": "sha512-uFCwe5eSewx1bznciTZSTjMbN+9i4wD8l1KQEFe9b+UOGWJ0JLs4rz4PMYx0k/DQQqz6OyG87G2ikn16DoNzWg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/context-entries": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-4.2.0.tgz", + "integrity": "sha512-F9FDSHXUP9TT9urSC+oXo6oNJYV6Q7lDRVQPi4DL81M9S34iNgOBnTdOlHxExiEwVnRfKdTKkRii/qe4Zk7Gbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0", + "@rdfjs/types": "*", + "jsonld-context-parser": "^2.2.2", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/mediator-combine-pipeline": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-pipeline/-/mediator-combine-pipeline-4.2.0.tgz", + "integrity": "sha512-UYFBKR3bmFqJC+A9sx+kEsvGuILNimt/5yTC0yId56sjdwAaEEQz9iFLI1HqJS2T6weu81S/VXiYUpwp9DGJbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/mediator-combine-union": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-4.2.0.tgz", + "integrity": "sha512-hdqtqmGb0aEW8sIcp3WvzziXAxPfGWYDBgH/QQIk2JVWc7auGWvddut2pQCGHyFrv6MXI0vbjj8g1UIaAMviBQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/mediator-number": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-4.2.0.tgz", + "integrity": "sha512-TYwcukPQLblV3sfkNMsl3oj3AXSzcGmB+tUYy/++kKohQ67xy2r0wfBo1Ij/6G4ZnzlMIuOWzQcXojFrnV9iWQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/mediator-race": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-4.2.0.tgz", + "integrity": "sha512-KHfRVB+Qfaou8tJeXrCrcw1NlTUD+xbi5/7qSwvRqEbbajW2B4cRYbw0VrTJDFUb1tva5IHQQGpMFJ/aHHpH5w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/mediatortype-time": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-4.2.0.tgz", + "integrity": "sha512-t/IVwZPeb4hijIjdQKl/BS14HR7PXDgiv2Djq1f42596mluPjDemUG3suxx8VxBCGhG6Jckupg/WvvLYdW585w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-parse/node_modules/@types/node": { + "version": "18.19.112", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.112.tgz", + "integrity": "sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/rdf-parse/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rdf-parse/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/rdf-parse/node_modules/htmlparser2": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/rdf-parse/node_modules/jsonld-streaming-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-4.0.1.tgz", + "integrity": "sha512-6M4y9YGgADk3nXJebbRrxEdMVBJ9bnz+peAvjTXUievopqaE8sg/qml/I6Sp1ln7rpOKffsNZWSre6B7N76szw==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.0", + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^3.0.0", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-parse/node_modules/jsonld-streaming-parser/node_modules/jsonld-context-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-3.0.0.tgz", + "integrity": "sha512-Kg6TVtBUdIm057ht/8WNhM9BROt+BeYaDGXbzrKaa3xA99csee+CsD8IMCTizRgzoO8PIzvzcxxCoRvpq1xNQw==", + "license": "MIT", + "dependencies": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "bin": { + "jsonld-context-parse": "bin/jsonld-context-parse.js" + } + }, + "node_modules/rdf-parse/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/rdf-parse/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/rdf-quad": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rdf-quad/-/rdf-quad-1.5.0.tgz", + "integrity": "sha512-LnCYx8XbRVW1wr6UiZPSy2Tv7bXAtEwuyck/68dANhFu8VMnGS+QfUNP3b9YI6p4Bfd/fyDx5E3x81IxGV6BzA==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^1.0.1", + "rdf-literal": "^1.2.0", + "rdf-string": "^1.5.0" + } + }, + "node_modules/rdf-serialize": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rdf-serialize/-/rdf-serialize-4.0.1.tgz", + "integrity": "sha512-iPeyp8WWdyuZvDBRgIaTJCeRSalI3+qOaHIrvrXIAAfRpI4iMgpPpJJgDKVYd1PiedxGtpdjh3tA0VlxAhzqNw==", + "license": "MIT", + "dependencies": { + "@comunica/actor-rdf-serialize-jsonld": "^4.0.1", + "@comunica/actor-rdf-serialize-n3": "^4.0.1", + "@comunica/actor-rdf-serialize-shaclc": "^4.0.1", + "@comunica/bus-init": "^4.0.1", + "@comunica/bus-rdf-serialize": "^4.0.1", + "@comunica/config-query-sparql": "^4.0.1", + "@comunica/core": "^4.0.1", + "@comunica/mediator-combine-pipeline": "^4.0.1", + "@comunica/mediator-combine-union": "^4.0.1", + "@comunica/mediator-race": "^4.0.1", + "@rdfjs/types": "*", + "readable-stream": "^4.5.2", + "stream-to-string": "^1.1.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-serialize/node_modules/@comunica/bus-init": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-4.2.0.tgz", + "integrity": "sha512-AxX9fOI0xKjed4nbxz5ADLb5ILbBJPkvDuehvKOtK5i2fto+cUDg3V4QUVJEdSrCoreSwdSzmygG93NBOkqHrg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-serialize/node_modules/@comunica/config-query-sparql": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@comunica/config-query-sparql/-/config-query-sparql-4.3.0.tgz", + "integrity": "sha512-uFCwe5eSewx1bznciTZSTjMbN+9i4wD8l1KQEFe9b+UOGWJ0JLs4rz4PMYx0k/DQQqz6OyG87G2ikn16DoNzWg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-serialize/node_modules/@comunica/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-4.2.0.tgz", + "integrity": "sha512-E4TfsxmBYgan9xPSCAom6B231EonTFxM/hEdFbRmVhuCv+Ids7d4UhGt3MENJDXH+UhURjqKpfzYySvAqYqVOA==", + "license": "MIT", + "dependencies": { + "@comunica/types": "^4.2.0", + "immutable": "^4.3.7" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-serialize/node_modules/@comunica/mediator-combine-pipeline": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-pipeline/-/mediator-combine-pipeline-4.2.0.tgz", + "integrity": "sha512-UYFBKR3bmFqJC+A9sx+kEsvGuILNimt/5yTC0yId56sjdwAaEEQz9iFLI1HqJS2T6weu81S/VXiYUpwp9DGJbg==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0", + "@comunica/types": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-serialize/node_modules/@comunica/mediator-combine-union": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-4.2.0.tgz", + "integrity": "sha512-hdqtqmGb0aEW8sIcp3WvzziXAxPfGWYDBgH/QQIk2JVWc7auGWvddut2pQCGHyFrv6MXI0vbjj8g1UIaAMviBQ==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-serialize/node_modules/@comunica/mediator-race": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-4.2.0.tgz", + "integrity": "sha512-KHfRVB+Qfaou8tJeXrCrcw1NlTUD+xbi5/7qSwvRqEbbajW2B4cRYbw0VrTJDFUb1tva5IHQQGpMFJ/aHHpH5w==", + "license": "MIT", + "dependencies": { + "@comunica/core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-serialize/node_modules/@comunica/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-4.2.0.tgz", + "integrity": "sha512-3Vf3FOUB/i7tdlghovHsgjoZbdqIgB0m01UGwpxCBHI/swbxcqhQzmKFjU9T3gNxurmsdqafF8Unoh9ZCwNuRw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/yargs": "^17.0.24", + "asynciterator": "^3.9.0", + "lru-cache": "^10.0.1", + "sparqlalgebrajs": "^4.3.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/comunica-association" + } + }, + "node_modules/rdf-serialize/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/rdf-store-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rdf-store-stream/-/rdf-store-stream-3.0.0.tgz", + "integrity": "sha512-y30MHEyEnS1SjMzPhioZRvZ9yz4e6FL96TFq6YcMCUSDvT8zONotAfz28kMbOUAcKCncmrCJiukjP7Q1bJT4aw==", + "license": "MIT", + "dependencies": { + "rdf-stores": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-stores": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/rdf-stores/-/rdf-stores-2.1.1.tgz", + "integrity": "sha512-wYovM7q+12K+dV3AsPbBiAY63Dy1eoOBJ69XoL757Pqwimz2LLCrSwrjMyqc4AB+/wPgDwPeNiQA7IzD6zeAZg==", + "license": "MIT", + "dependencies": { + "asynciterator": "^3.8.0", + "rdf-data-factory": "^2.0.1", + "rdf-string": "^2.0.0", + "rdf-terms": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-stores/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-stores/node_modules/rdf-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-2.0.1.tgz", + "integrity": "sha512-SMW4ponnKNrsP9kYpOLyICeM4UJmEXIeS3zri7kPK9gzLFsHD88oiza8LnokNYxd76zW4JoYWD+v4x0g8rJBjw==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-stores/node_modules/rdf-terms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-2.0.0.tgz", + "integrity": "sha512-9O+ifVcvY4ZktOr+uXKswoOV6airAsIKeqCr+C47kFZBB8X+NyPSqDRGgI6X+je8It6z2e9jZhWwjJiEZ8Yn5Q==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0", + "rdf-string": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-streaming-store": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/rdf-streaming-store/-/rdf-streaming-store-2.1.1.tgz", + "integrity": "sha512-hw9n1WdsSI74d89EDGQv5dYb5PaFXjjm4BqdSwJ7JMa5Cx27pwtv5qbXZvSXZmle90/myI2At+TIpdLJQmujBg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/n3": "^1.10.4", + "@types/readable-stream": "^4.0.15", + "n3": "^1.16.3", + "rdf-string": "^2.0.0", + "rdf-terms": "^2.0.0", + "readable-stream": "^4.3.0" + } + }, + "node_modules/rdf-streaming-store/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rdf-streaming-store/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-streaming-store/node_modules/rdf-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-2.0.1.tgz", + "integrity": "sha512-SMW4ponnKNrsP9kYpOLyICeM4UJmEXIeS3zri7kPK9gzLFsHD88oiza8LnokNYxd76zW4JoYWD+v4x0g8rJBjw==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-streaming-store/node_modules/rdf-terms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-2.0.0.tgz", + "integrity": "sha512-9O+ifVcvY4ZktOr+uXKswoOV6airAsIKeqCr+C47kFZBB8X+NyPSqDRGgI6X+je8It6z2e9jZhWwjJiEZ8Yn5Q==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0", + "rdf-string": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-string": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", + "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/rdf-string-ttl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rdf-string-ttl/-/rdf-string-ttl-1.3.2.tgz", + "integrity": "sha512-yqolaVoUvTaSC5aaQuMcB4BL54G/pCGsV4jQH87f0TvAx8zHZG0koh7XWrjva/IPGcVb1QTtaeEdfda5mcddJg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } + }, + "node_modules/rdf-terms": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.11.0.tgz", + "integrity": "sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "rdf-string": "^1.6.0" + } + }, + "node_modules/rdf-validate-datatype": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/rdf-validate-datatype/-/rdf-validate-datatype-0.1.5.tgz", + "integrity": "sha512-gU+cD+AT1LpFwbemuEmTDjwLyFwJDiw21XHyIofKhFnEpXODjShBuxhgDGnZqW3qIEwu/vECjOecuD60e5ngiQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/namespace": "^1.1.0", + "@rdfjs/to-ntriples": "^2.0.0" + }, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/rdf-validate-shacl": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/rdf-validate-shacl/-/rdf-validate-shacl-0.4.5.tgz", + "integrity": "sha512-tGYnssuPzmsPua1dju4hEtGkT1zouvwzVTNrFhNiqj2aZFO5pQ7lvLd9Cv9H9vKAlpIdC/x0zL6btxG3PCss0w==", + "license": "MIT", + "dependencies": { + "@rdfjs/dataset": "^1.1.1", + "@rdfjs/namespace": "^1.0.0", + "@rdfjs/term-set": "^1.1.0", + "clownface": "^1.4.0", + "debug": "^4.3.2", + "rdf-literal": "^1.3.0", + "rdf-validate-datatype": "^0.1.5" + } + }, + "node_modules/rdf-vocabulary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rdf-vocabulary/-/rdf-vocabulary-1.0.1.tgz", + "integrity": "sha512-0I7osG03qJ/7O/cEY/1wDLWnx+JBPoxPa9Iz/8856W7Ci7XNLBj8ZSWZCqVCOi/v5P6nenw5V9gkmPkg5TGZkg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*" + } + }, + "node_modules/rdfa-streaming-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdfa-streaming-parser/-/rdfa-streaming-parser-2.0.1.tgz", + "integrity": "sha512-7Yyaj030LO7iQ38Wh/RNLVeYrVFJeyx3dpCK7C1nvX55eIN/gE4HWfbg4BYI9X7Bd+eUIUMVeiKYLmYjV6apow==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "htmlparser2": "^8.0.0", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0", + "relative-to-absolute-iri": "^1.0.2" + } + }, + "node_modules/rdfa-streaming-parser/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/rdfxml-streaming-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-2.4.0.tgz", + "integrity": "sha512-f+tdI1wxOiPzMbFWRtOwinwPsqac0WIN80668yFKcVdFCSTGOWTM70ucQGUSdDZZo7pce/UvZgV0C3LDj0P7tg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.4.2", + "relative-to-absolute-iri": "^1.0.0", + "validate-iri": "^1.0.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read/-/read-2.1.0.tgz", + "integrity": "sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/hosted-git-info": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/read-package-json/node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readable-error": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/readable-error/-/readable-error-1.0.0.tgz", + "integrity": "sha512-CLnInu5bUphmFiZ3pD/BC6+Cg4/BzK6ZMvWfd0b2QMzYo159Z/f/nVFQ9L5IeMrqUxy0EFsp3XJ+BRfLfY13IQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.3" + } + }, + "node_modules/readable-error/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/readable-error/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-error/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readable-from-web": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/readable-from-web/-/readable-from-web-1.0.0.tgz", + "integrity": "sha512-tei03fQhxqLEklpIvocFUR9hO42hiyYvdhwoNHAjJztPAQ8QS1NqF2AhLwzGxIGidPBJ4MCqB48wn7OAFCfhsQ==", + "license": "MIT", + "dependencies": { + "@types/readable-stream": "^4.0.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/readable-from-web/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readable-stream-node-to-web": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz", + "integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ==", + "license": "MIT" + }, + "node_modules/readable-to-readable": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/readable-to-readable/-/readable-to-readable-0.1.3.tgz", + "integrity": "sha512-G+0kz01xJM/uTuItKcqC73cifW8S6CZ7tp77NLN87lE5mrSU+GC8geoSAlfmp0NocmXckQ7W8s8ns73HYsIA3w==", + "deprecated": "This package is no longer maintained", + "license": "MIT", + "dependencies": { + "readable-stream": "^3.6.0" + } + }, + "node_modules/readable-to-readable/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/relative-to-absolute-iri": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz", + "integrity": "sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q==", + "license": "MIT" + }, + "node_modules/relativize-url": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/relativize-url/-/relativize-url-0.1.0.tgz", + "integrity": "sha512-YXet4a9wQP96Ru9MQSfoRUzsCaeboLPXj+rVG1ulH4t54zqFHiNmW6FPl7V2dTxk9uHlW3yb9+1jWO44AdWisw==", + "license": "ISC" + }, + "node_modules/remove-dist": { + "resolved": "packages/solid-react/rimraf dist", + "link": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", + "license": "MIT" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/rollup": { + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, + "node_modules/sander/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/sander/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shaclc-parse": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/shaclc-parse/-/shaclc-parse-1.4.1.tgz", + "integrity": "sha512-ku4oOa/0BRb5k3SyOgIDhvBQtayQXkMupbJs8C6dR1wjmflI/0pu6E5rnYxP/GKtEEzMczVakqclgsP+JDa6JA==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0", + "n3": "^1.16.3" + } + }, + "node_modules/shaclc-write": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/shaclc-write/-/shaclc-write-1.4.3.tgz", + "integrity": "sha512-dtJ6LokIluzQuHRWCFvNnmGyh07FxBK2L4utkOQn/wYD9eNamUUCt7sDBcuFDyD3jAGv0Ipmv0EitTyKcM1f/w==", + "license": "MIT", + "dependencies": { + "@jeswr/prefixcc": "^1.2.1", + "n3": "^1.16.3", + "rdf-string-ttl": "^1.3.2" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shex-test": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/shex-test/-/shex-test-0.5.8.tgz", + "integrity": "sha512-wfrhu/lb2zrr4MANpoGbqLbPaoL0yOoDTJp6n/Ewtk2iEeVQD8RLYXVCMLYdmo6ccue/I/yubcIqv4p2uarCbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "n3": "^0.4.5", + "xlsx": "^0.8.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shex-test/node_modules/n3": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/n3/-/n3-0.4.5.tgz", + "integrity": "sha512-sv4bFeqVTTj9hT/OAdndpHpECxlkmpHxdnHUkhNgx3P3Tnw2WqpTUzMEeY+ELEoeW1q6Xqq9LNO0lu/zqogIZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shiki": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sigstore/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sigstore/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sigstore/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/sigstore/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sigstore/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sigstore/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sigstore/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sorcery": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.1.tgz", + "integrity": "sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.14", + "buffer-crc32": "^1.0.0", + "minimist": "^1.2.0", + "sander": "^0.5.0" + }, + "bin": { + "sorcery": "bin/sorcery" + } + }, + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/sparqlalgebrajs": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-4.3.8.tgz", + "integrity": "sha512-Xo1/5icRtVk2N38BrY9NXN8N/ZPjULlns7sDHv0nlcGOsOediBLWVy8LmV+Q90RHvb3atZZbrFy3VqrM4iXciA==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@types/sparqljs": "^3.1.3", + "fast-deep-equal": "^3.1.3", + "minimist": "^1.2.6", + "rdf-data-factory": "^1.1.0", + "rdf-isomorphic": "^1.3.0", + "rdf-string": "^1.6.0", + "rdf-terms": "^1.10.0", + "sparqljs": "^3.7.1" + }, + "bin": { + "sparqlalgebrajs": "bin/sparqlalgebrajs.js" + } + }, + "node_modules/sparqljs": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/sparqljs/-/sparqljs-3.7.3.tgz", + "integrity": "sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^1.1.2" + }, + "bin": { + "sparqljs": "bin/sparql-to-json" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/sparqljson-parse": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-3.1.0.tgz", + "integrity": "sha512-uxw7dSalFFrBuDuuRHnqZWb655ioxsqYA9Cwa3vjunyQpkzklfGi+Bu/fktnCRqb4TUvYv8DcJdyVW2zjkRg8Q==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.1", + "@types/readable-stream": "^4.0.0", + "rdf-data-factory": "^2.0.0", + "readable-stream": "^4.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/sparqljson-parse/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/sparqljson-parse/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/sparqljson-to-tree": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sparqljson-to-tree/-/sparqljson-to-tree-3.0.2.tgz", + "integrity": "sha512-8h/ZEPPBhBlMbgMX1TOumJQku2mLYYdwd/octsDa/bdqdNcMeAcB7S2Qh4SEZ+0pPNed9CBk1d5TEUpwJlcdmw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-literal": "^1.3.2", + "sparqljson-parse": "^2.0.0" + } + }, + "node_modules/sparqljson-to-tree/node_modules/sparqljson-parse": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.2.0.tgz", + "integrity": "sha512-2TfvNvUsaJyWfCrq3ExdDdbF9LBLzIUCricg+D1YCYbbmyTzscgCtRk4KcIyJF178DtfCt4BkKzbKl8IXMHp8w==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.1", + "@rdfjs/types": "*", + "@types/readable-stream": "^2.3.13", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/sparqlxml-parse": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-3.1.0.tgz", + "integrity": "sha512-uarr+VmblgP+tHWBq1rCsU5SBfyAVQdJX7eo9Cv9h3de/I7O/T/qRrWFSzq4ZbOc1U/C2B5unvPGPjCpYu21/A==", + "license": "MIT", + "dependencies": { + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "rdf-data-factory": "^2.0.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/sparqlxml-parse/node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/sparqlxml-parse/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/split2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssf": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.8.2.tgz", + "integrity": "sha512-+ZkFDAG+ImJ48DcZvabx6YTrZ67DKkM0kbyOOtH73mbUEvNhQWWgRZrHC8+k7GuGKWQnACYLi7bj0eCt1jmosQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "colors": "0.6.2", + "frac": "0.3.1", + "voc": "" + }, + "bin": { + "ssf": "bin/ssf.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "license": "MIT" + }, + "node_modules/start-server-and-test": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.11.tgz", + "integrity": "sha512-TN39gLzPhHAflxyOkE/oMfQGj+pj3JgF6qVicFH/JrXt7xXktidKXwqfRga+ve7lVA8+RgPZVc25VrEPRScaDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "arg": "^5.0.2", + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.4.0", + "execa": "5.1.1", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "8.0.3" + }, + "bin": { + "server-test": "src/bin/start.js", + "start-server-and-test": "src/bin/start.js", + "start-test": "src/bin/start.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "node_modules/stream-to-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/stream-to-string/-/stream-to-string-1.2.1.tgz", + "integrity": "sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA==", + "license": "MIT", + "dependencies": { + "promise-polyfill": "^1.1.6" + } + }, + "node_modules/stream-to-string/node_modules/promise-polyfill": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz", + "integrity": "sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==", + "license": "MIT" + }, + "node_modules/streamify-array": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/streamify-array/-/streamify-array-1.0.1.tgz", + "integrity": "sha512-ZnswaBcC6B1bhPLSQOlC6CdaDUSzU0wr2lvvHpbHNms8V7+DLd8uEAzDAWpsjxbFkijBHhuObFO/qqu52DZUMA==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "3.59.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.2.tgz", + "integrity": "sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/svelte-hmr": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, + "node_modules/svelte-jester": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/svelte-jester/-/svelte-jester-5.0.0.tgz", + "integrity": "sha512-12UnqprvUClFZHmx8O9exOK5ncHdESMIVG7FM9wRCEBzHbtigsklwKB+Q3AyKPsCrrOS920f9ZbYFk4PO0sEnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18", + "pnpm": "^8.0.0" + }, + "peerDependencies": { + "jest": ">= 27", + "svelte": ">= 3" + } + }, + "node_modules/svelte-preprocess": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz", + "integrity": "sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@types/pug": "^2.0.6", + "detect-indent": "^6.1.0", + "magic-string": "^0.30.5", + "sorcery": "^0.11.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">= 16.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "license": "MIT", + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "license": "MIT", + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/sync-rpc/node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/synckit": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", + "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "license": "MIT", + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "license": "MIT" + }, + "node_modules/then-request/node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz", + "integrity": "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/then-request/node_modules/form-data/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/then-request/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/then-request/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/then-request/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-guards": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/ts-guards/-/ts-guards-0.5.1.tgz", + "integrity": "sha512-Y6P/VJnwARiPMfxO7rvaYaz5tGQ5TQ0Wnb2cWIxMpFOioYkhsT8XaCrJX6wYPNFACa4UOrN5SPqhwpM8NolAhQ==", + "license": "MIT" + }, + "node_modules/ts-jest": { + "version": "29.3.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz", + "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.1", + "type-fest": "^4.39.1", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-morph": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-24.0.0.tgz", + "integrity": "sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==", + "license": "MIT", + "dependencies": { + "@ts-morph/common": "~0.25.0", + "code-block-writer": "^13.0.3" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tsc-watch": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-6.2.1.tgz", + "integrity": "sha512-GLwdz5Dy9K3sVm3RzgkLcyDpl5cvU9HEcE1A3gf5rqEwlUe7gDLxNCgcuNEw3zoKOiegMo3LnbF1t6HLqxhrSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "node-cleanup": "^2.1.2", + "ps-tree": "^1.2.0", + "string-argv": "^0.3.1" + }, + "bin": { + "tsc-watch": "dist/lib/tsc-watch.js" + }, + "engines": { + "node": ">=12.12.0" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/tsc-watch/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tsc-watch/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "license": "MIT", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tuf-js/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tuf-js/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tuf-js/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", + "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "rxjs": "*" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uritemplate": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/uritemplate/-/uritemplate-0.3.4.tgz", + "integrity": "sha512-enADBvHfhjrwxFMTVWeIIYz51SZ91uC6o2MR/NQTVljJB6HTZ8eQL3Q7JBj3RxNISA14MOwJaU3vpf5R6dyxHA==" + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-iri": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/validate-iri/-/validate-iri-1.0.1.tgz", + "integrity": "sha512-gLXi7351CoyVVQw8XE5sgpYawRKatxE7kj/xmCxXOZS1kMdtcqC0ILIqLuVEVnAUQSL/evOGG3eQ+8VgbdnstA==", + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/validator": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.0.tgz", + "integrity": "sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.5.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz", + "integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.3.tgz", + "integrity": "sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-node/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite-node/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "node_modules/vite-node/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite-node/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vite-node/node_modules/rollup": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz", + "integrity": "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.43.0", + "@rollup/rollup-android-arm64": "4.43.0", + "@rollup/rollup-darwin-arm64": "4.43.0", + "@rollup/rollup-darwin-x64": "4.43.0", + "@rollup/rollup-freebsd-arm64": "4.43.0", + "@rollup/rollup-freebsd-x64": "4.43.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.43.0", + "@rollup/rollup-linux-arm-musleabihf": "4.43.0", + "@rollup/rollup-linux-arm64-gnu": "4.43.0", + "@rollup/rollup-linux-arm64-musl": "4.43.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.43.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-musl": "4.43.0", + "@rollup/rollup-linux-s390x-gnu": "4.43.0", + "@rollup/rollup-linux-x64-gnu": "4.43.0", + "@rollup/rollup-linux-x64-musl": "4.43.0", + "@rollup/rollup-win32-arm64-msvc": "4.43.0", + "@rollup/rollup-win32-ia32-msvc": "4.43.0", + "@rollup/rollup-win32-x64-msvc": "4.43.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/vite-node/node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-dts": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-3.9.1.tgz", + "integrity": "sha512-rVp2KM9Ue22NGWB8dNtWEr+KekN3rIgz1tWD050QnRGlriUCmaDwa7qA5zDEjbXg5lAXhYMSBJtx3q3hQIJZSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/api-extractor": "7.43.0", + "@rollup/pluginutils": "^5.1.0", + "@vue/language-core": "^1.8.27", + "debug": "^4.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.8", + "vue-tsc": "^1.8.27" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "typescript": "*", + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.3.tgz", + "integrity": "sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.3", + "@vitest/mocker": "3.2.3", + "@vitest/pretty-format": "^3.2.3", + "@vitest/runner": "3.2.3", + "@vitest/snapshot": "3.2.3", + "@vitest/spy": "3.2.3", + "@vitest/utils": "3.2.3", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.0", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.3", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.3", + "@vitest/ui": "3.2.3", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.3.tgz", + "integrity": "sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.3", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "node_modules/vitest/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/vitest/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vitest/node_modules/rollup": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz", + "integrity": "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.43.0", + "@rollup/rollup-android-arm64": "4.43.0", + "@rollup/rollup-darwin-arm64": "4.43.0", + "@rollup/rollup-darwin-x64": "4.43.0", + "@rollup/rollup-freebsd-arm64": "4.43.0", + "@rollup/rollup-freebsd-x64": "4.43.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.43.0", + "@rollup/rollup-linux-arm-musleabihf": "4.43.0", + "@rollup/rollup-linux-arm64-gnu": "4.43.0", + "@rollup/rollup-linux-arm64-musl": "4.43.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.43.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-musl": "4.43.0", + "@rollup/rollup-linux-s390x-gnu": "4.43.0", + "@rollup/rollup-linux-x64-gnu": "4.43.0", + "@rollup/rollup-linux-x64-musl": "4.43.0", + "@rollup/rollup-win32-arm64-msvc": "4.43.0", + "@rollup/rollup-win32-ia32-msvc": "4.43.0", + "@rollup/rollup-win32-x64-msvc": "4.43.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/vitest/node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/voc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/voc/-/voc-1.2.0.tgz", + "integrity": "sha512-BOuDjFFYvJdZO6e/N65AlaDItXo2TgyLjeyRYcqgAPkXpp5yTJcvkL2n+syO1r9Qc5g96tfBD2tuiMhYDmaGcA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "voc": "voc.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "~1.11.1", + "@vue/language-core": "1.8.27", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/vue-tsc/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/wait-on": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.3.tgz", + "integrity": "sha512-nQFqAFzZDeRxsu7S3C7LbuxslHhk+gnJZHyethuGKAn2IVleIbTB9I3vJSQiSR+DifUqmdzfPMoMPJfLqMF2vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^1.8.2", + "joi": "^17.13.3", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.2" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-ponyfill": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz", + "integrity": "sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA==", + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/winston": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/write-json-file/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=6" + } + }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xlsx": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.8.8.tgz", + "integrity": "sha512-aNxJqlXJgzZtjxd4Qx+gCXeg/o3jNVPjHq7aQuhe2s8fmN8Z6Rqk4egQVQS7jX9L3u97X9LVWDmp9hq7zwoUeQ==", + "deprecated": "this version is no longer supported. More info at https://cdn.sheetjs.com/xlsx/", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "adler-32": "", + "cfb": "~0.11.0", + "codepage": "", + "commander": "", + "crc-32": "", + "exit-on-epipe": "", + "ssf": "~0.8.1" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/ylru": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", + "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yup": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.6.1.tgz", + "integrity": "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==", + "license": "MIT", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/yup/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } + }, + "packages/cli": { + "name": "@ldo/cli", + "version": "1.0.0-alpha.32", + "license": "MIT", + "dependencies": { + "@jeswr/shacl2shex": "^1.1.0", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/schema-converter-shex": "^1.0.0-alpha.32", + "@shexjs/parser": "^1.0.0-alpha.24", + "child-process-promise": "^2.2.1", + "commander": "^9.3.0", + "ejs": "^3.1.8", + "fs-extra": "^10.1.0", + "loading-cli": "^1.1.0", + "prettier": "^3.0.3", + "prompts": "^2.4.2", + "rdf-dereference-store": "^1.4.0", + "rdf-namespaces": "^1.13.1", + "ts-morph": "^24.0.0", + "type-fest": "^2.19.0" + }, + "bin": { + "ldo": "dist/index.js" + }, + "devDependencies": { + "@types/child-process-promise": "^2.2.2", + "@types/ejs": "^3.1.1", + "@types/fs-extra": "^9.0.13", + "@types/jsonld": "^1.5.15", + "@types/prompts": "^2.4.9", + "@types/shexj": "^2.1.4", + "copyfiles": "^2.4.1", + "rimraf": "^3.0.2" + } + }, + "packages/cli/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/cli/node_modules/type-fest": { + "version": "2.19.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/connected": { + "name": "@ldo/connected", + "version": "1.0.0-alpha.32", + "license": "MIT", + "dependencies": { + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/rdf-utils": "^1.0.0-alpha.30" + }, + "devDependencies": { + "@ldo/test-solid-server": "^1.0.0-alpha.28", + "@rdfjs/types": "^1.0.1", + "cross-env": "^7.0.3", + "jest-rdf": "^1.8.0", + "rimraf": "^6.0.1", + "ts-jest": "^29.3.2", + "ts-node": "^10.9.1", + "typed-emitter": "^2.1.0", + "typedoc": "^0.25.4", + "typedoc-plugin-markdown": "^3.17.1", + "uuid": "^11.1.0" + } + }, + "packages/connected-nextgraph": { + "name": "@ldo/connected-nextgraph", + "version": "1.0.0-alpha.32", + "license": "MIT", + "dependencies": { + "@ldo/connected": "^1.0.0-alpha.32", + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@solid-notifications/subscription": "^0.1.2", + "cross-fetch": "^3.1.6", + "ws": "^8.18.0" + }, + "devDependencies": { + "@inrupt/solid-client-authn-core": "^3.0.0", + "@ldo/cli": "^1.0.0-alpha.32", + "@rdfjs/types": "^1.0.1", + "@solid-notifications/types": "^0.1.2", + "@solid/community-server": "8.0.0-alpha.0", + "cross-env": "^7.0.3", + "dotenv": "^16.3.1", + "jest-rdf": "^1.8.0", + "nextgraph": "^0.1.1-alpha.7", + "start-server-and-test": "^2.0.11", + "ts-node": "^10.9.1", + "typed-emitter": "^2.1.0", + "typedoc": "^0.25.4", + "typedoc-plugin-markdown": "^3.17.1" + } + }, + "packages/connected-nextgraph/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/connected-nextgraph/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "packages/connected-nextgraph/node_modules/typedoc": { + "version": "0.25.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", + "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + } + }, + "packages/connected-nextgraph/node_modules/typedoc-plugin-markdown": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz", + "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.24.0" + } + }, + "packages/connected-nextgraph/node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "packages/connected-solid": { + "name": "@ldo/connected-solid", + "version": "1.0.0-alpha.32", + "license": "MIT", + "dependencies": { + "@ldo/connected": "^1.0.0-alpha.32", + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@solid-notifications/subscription": "^0.1.2", + "cross-fetch": "^3.1.6", + "http-link-header": "^1.1.1", + "ws": "^8.18.0" + }, + "devDependencies": { + "@inrupt/solid-client-authn-core": "^3.0.0", + "@ldo/cli": "^1.0.0-alpha.32", + "@ldo/test-solid-server": "^1.0.0-alpha.28", + "@rdfjs/types": "^1.0.1", + "@solid-notifications/types": "^0.1.2", + "@solid/community-server": "8.0.0-alpha.0", + "cross-env": "^7.0.3", + "ts-node": "^10.9.1", + "typed-emitter": "^2.1.0", + "typedoc": "^0.25.4", + "typedoc-plugin-markdown": "^3.17.1" + } + }, + "packages/connected-solid/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/connected-solid/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "packages/connected-solid/node_modules/typedoc": { + "version": "0.25.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", + "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + } + }, + "packages/connected-solid/node_modules/typedoc-plugin-markdown": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz", + "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.24.0" + } + }, + "packages/connected-solid/node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "packages/connected/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/connected/node_modules/glob": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", + "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/connected/node_modules/glob/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/connected/node_modules/jackspeak": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", + "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/connected/node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "packages/connected/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "packages/connected/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "packages/connected/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/connected/node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/connected/node_modules/typedoc": { + "version": "0.25.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", + "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + } + }, + "packages/connected/node_modules/typedoc-plugin-markdown": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz", + "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.24.0" + } + }, + "packages/connected/node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "packages/dataset": { + "name": "@ldo/dataset", + "version": "1.0.0-alpha.30", + "license": "MIT", + "dependencies": { + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@rdfjs/dataset": "^1.1.0", + "buffer": "^6.0.3", + "readable-stream": "^4.2.0" + }, + "devDependencies": { + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "@types/rdfjs__dataset": "^1.0.4", + "@types/readable-stream": "^2.3.13", + "cross-env": "^7.0.3", + "ts-node": "^9.1.1" + } + }, + "packages/dataset/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/dataset/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "packages/dataset/node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "packages/dataset/node_modules/ts-node": { + "version": "9.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "packages/jsonld-dataset-proxy": { + "name": "@ldo/jsonld-dataset-proxy", + "version": "1.0.0-alpha.32", + "license": "MIT", + "dependencies": { + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@ldo/subscribable-dataset": "^1.0.0-alpha.32", + "jsonld2graphobject": "^0.0.4" + }, + "devDependencies": { + "@rdfjs/types": "^1.1.0", + "@types/jsonld": "^1.5.6", + "@types/n3": "^1.10.4", + "@types/rdfjs__dataset": "^1.0.5", + "@types/shexj": "2.1.4", + "shex-test": "^0.5.5", + "ts-node": "^10.4.0", + "tsc-watch": "^6.0.0" + } + }, + "packages/jsonld-dataset-proxy/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/jsonld-dataset-proxy/node_modules/@types/shexj": { + "version": "2.1.4", + "dev": true, + "license": "MIT" + }, + "packages/ldo": { + "name": "@ldo/ldo", + "version": "1.0.0-alpha.32", + "license": "MIT", + "dependencies": { + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.32", + "@ldo/subscribable-dataset": "^1.0.0-alpha.32", + "buffer": "^6.0.3", + "readable-stream": "^4.3.0" + }, + "devDependencies": { + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "@types/n3": "^1.10.4", + "@types/readable-stream": "^2.3.13", + "@types/shexj": "2.1.4", + "cross-fetch": "^3.1.5", + "typedoc": "^0.25.4", + "typedoc-plugin-markdown": "^3.17.1" + } + }, + "packages/ldo/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/ldo/node_modules/@types/shexj": { + "version": "2.1.4", + "dev": true, + "license": "MIT" + }, + "packages/ldo/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "packages/ldo/node_modules/typedoc": { + "version": "0.25.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", + "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + } + }, + "packages/ldo/node_modules/typedoc-plugin-markdown": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz", + "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.24.0" + } + }, + "packages/ldo/node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "packages/rdf-utils": { + "name": "@ldo/rdf-utils", + "version": "1.0.0-alpha.30", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^1.2.0", + "n3": "^1.17.1", + "rdf-string": "^1.6.3" + }, + "devDependencies": { + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.9" + } + }, + "packages/rdf-utils/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/react": { + "name": "@ldo/react", + "version": "1.0.0-alpha.33", + "license": "MIT", + "dependencies": { + "@ldo/connected": "^1.0.0-alpha.32", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.32", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@ldo/subscribable-dataset": "^1.0.0-alpha.32", + "cross-fetch": "^3.1.6" + }, + "devDependencies": { + "@rdfjs/types": "^1.0.1", + "@testing-library/jest-dom": "^6.7.0", + "@testing-library/react": "^14.3.1", + "@testing-library/user-event": "^14.6.1", + "jsdom": "^26.1.0", + "vitest": "^3.2.4" + } + }, + "packages/react/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/android-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/android-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/android-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/darwin-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/linux-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/linux-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/linux-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/linux-loong64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/linux-s390x": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/sunos-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/win32-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/win32-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@esbuild/win32-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/react/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/react/node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", + "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "packages/react/node_modules/@rollup/rollup-android-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", + "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "packages/react/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", + "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "packages/react/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", + "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "packages/react/node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", + "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "packages/react/node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", + "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "packages/react/node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", + "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "packages/react/node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", + "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "packages/react/node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", + "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "packages/react/node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", + "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "packages/react/node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", + "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "packages/react/node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", + "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "packages/react/node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", + "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "packages/react/node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", + "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "packages/react/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", + "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "packages/react/node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", + "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "packages/react/node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", + "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "packages/react/node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", + "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "packages/react/node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", + "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "packages/react/node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "packages/react/node_modules/@testing-library/react": { + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz", + "integrity": "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "packages/react/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "packages/react/node_modules/@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/react/node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "packages/react/node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/react/node_modules/@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/react/node_modules/@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/react/node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/react/node_modules/@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "packages/react/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/react/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "packages/react/node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/react/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "packages/react/node_modules/esbuild": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "packages/react/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "packages/react/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "packages/react/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "packages/react/node_modules/rollup": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", + "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.46.2", + "@rollup/rollup-android-arm64": "4.46.2", + "@rollup/rollup-darwin-arm64": "4.46.2", + "@rollup/rollup-darwin-x64": "4.46.2", + "@rollup/rollup-freebsd-arm64": "4.46.2", + "@rollup/rollup-freebsd-x64": "4.46.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", + "@rollup/rollup-linux-arm-musleabihf": "4.46.2", + "@rollup/rollup-linux-arm64-gnu": "4.46.2", + "@rollup/rollup-linux-arm64-musl": "4.46.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", + "@rollup/rollup-linux-ppc64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-musl": "4.46.2", + "@rollup/rollup-linux-s390x-gnu": "4.46.2", + "@rollup/rollup-linux-x64-gnu": "4.46.2", + "@rollup/rollup-linux-x64-musl": "4.46.2", + "@rollup/rollup-win32-arm64-msvc": "4.46.2", + "@rollup/rollup-win32-ia32-msvc": "4.46.2", + "@rollup/rollup-win32-x64-msvc": "4.46.2", + "fsevents": "~2.3.2" + } + }, + "packages/react/node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "packages/react/node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/react/node_modules/vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "packages/schema-converter-shex": { + "name": "@ldo/schema-converter-shex", + "version": "1.0.0-alpha.32", + "license": "MIT", + "dependencies": { + "@ldo/traverser-shexj": "^1.0.0-alpha.28", + "dts-dom": "~3.6.0", + "jsonld2graphobject": "^0.0.5" + }, + "devDependencies": { + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.32", + "@shexjs/parser": "^1.0.0-alpha.24", + "@types/jsonld": "^1.5.6", + "@types/shexj": "^2.1.3", + "jsonld": "^5.2.0", + "shex-test": "^2.1.0" + } + }, + "packages/schema-converter-shex/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/schema-converter-shex/node_modules/jsonld2graphobject": { + "version": "0.0.5", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "jsonld-context-parser": "^2.1.5", + "uuid": "^8.3.2" + } + }, + "packages/schema-converter-shex/node_modules/n3": { + "version": "0.4.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/schema-converter-shex/node_modules/shex-test": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "n3": "^0.4.5", + "xlsx": "^0.8.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/schema-converter-shex/node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "packages/solid-react": { + "name": "@ldo/solid-react", + "version": "1.0.0-alpha.33", + "license": "MIT", + "dependencies": { + "@inrupt/solid-client-authn-browser": "^3.0.0", + "@ldo/connected": "^1.0.0-alpha.32", + "@ldo/connected-solid": "^1.0.0-alpha.32", + "@ldo/react": "^1.0.0-alpha.33", + "cross-fetch": "^3.1.6" + }, + "devDependencies": { + "@babel/core": "^7.26.10", + "@babel/preset-env": "^7.26.9", + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@rdfjs/types": "^1.0.1", + "@testing-library/react": "^14.1.2", + "remove-dist": "rimraf dist/", + "start-server-and-test": "^2.0.3", + "whatwg-fetch": "^3.6.20" + } + }, + "packages/solid-react/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/solid-react/node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "packages/solid-react/node_modules/@testing-library/react": { + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz", + "integrity": "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "packages/solid-react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "packages/solid-react/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/solid-react/node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/solid-react/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "packages/solid-react/rimraf dist": { + "dev": true + }, + "packages/solid-react/rimraf dist/ && rimraf node_modules": { + "extraneous": true + }, + "packages/solid-type-index": { + "name": "@ldo/solid-type-index", + "version": "1.0.0-alpha.33", + "license": "MIT", + "dependencies": { + "@ldo/connected-solid": "^1.0.0-alpha.32", + "@ldo/solid-react": "^1.0.0-alpha.33" + }, + "devDependencies": { + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@ldo/test-solid-server": "^1.0.0-alpha.28", + "@rdfjs/types": "^1.0.1", + "@testing-library/react": "^14.1.2", + "jest-environment-jsdom": "^29.7.0", + "start-server-and-test": "^2.0.3", + "ts-node": "^10.9.2" + } + }, + "packages/solid-type-index/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/solid-type-index/node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "packages/solid-type-index/node_modules/@testing-library/react": { + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz", + "integrity": "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "packages/solid-type-index/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "packages/solid-type-index/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/solid-type-index/node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/solid-type-index/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "packages/subscribable-dataset": { + "name": "@ldo/subscribable-dataset", + "version": "1.0.0-alpha.32", + "license": "MIT", + "dependencies": { + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "uuid": "^11.1.0" + }, + "devDependencies": { + "@rdfjs/dataset": "^1.1.0", + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "@types/rdfjs__dataset": "^1.0.4", + "@types/uuid": "^10.0.0", + "ts-node": "^9.1.1" + } + }, + "packages/subscribable-dataset/node_modules/@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/subscribable-dataset/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "packages/subscribable-dataset/node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "packages/subscribable-dataset/node_modules/ts-node": { + "version": "9.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "packages/svelte": { + "name": "@ldo/svelte", + "version": "1.0.0-alpha.32", + "license": "MIT", + "dependencies": { + "@ldo/connected": "^1.0.0-alpha.32", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.32", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@ldo/subscribable-dataset": "^1.0.0-alpha.32", + "tsx": "^4.19.4" + }, + "devDependencies": { + "@ldo/test-solid-server": "^1.0.0-alpha.28", + "@sveltejs/vite-plugin-svelte": "^2.5.3", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/svelte": "^5.2.7", + "@tsconfig/svelte": "^5.0.4", + "@types/jest": "^29.5.14", + "concurrently": "^9.1.2", + "eslint-plugin-svelte3": "^4.0.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "rimraf": "^5.0.10", + "svelte": "^3.59.2", + "svelte-jester": "^5.0.0", + "svelte-preprocess": "^5.1.4", + "ts-jest": "^29.3.2", + "tslib": "^2.8.1", + "typescript": "^5.8.3", + "vite": "^4.5.0", + "vite-node": "^3.1.4", + "vite-plugin-dts": "^3.8.1" + }, + "peerDependencies": { + "svelte": "^3.50.0" + } + }, + "packages/svelte/node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "packages/svelte/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/svelte/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/svelte/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "packages/test-solid-server": { + "name": "@ldo/test-solid-server", + "version": "1.0.0-alpha.28", + "license": "MIT", + "dependencies": { + "@inrupt/solid-client-authn-core": "3.0.0", + "@solid/community-server": "8.0.0-alpha.0", + "cross-env": "^7.0.3" + } + }, + "packages/traverser-shexj": { + "name": "@ldo/traverser-shexj", + "version": "1.0.0-alpha.28", + "license": "MIT", + "dependencies": { + "@ldo/type-traverser": "^1.0.0-alpha.28" + } + }, + "packages/type-traverser": { + "name": "@ldo/type-traverser", + "version": "1.0.0-alpha.28", + "license": "MIT", + "dependencies": { + "uuid": "^8.3.2" + }, + "devDependencies": { + "@types/uuid": "^8.3.4", + "rimraf": "^6.0.1", + "ts-node": "^10.4.0" + } + }, + "packages/type-traverser/node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true, + "license": "MIT" + }, + "packages/type-traverser/node_modules/glob": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", + "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/type-traverser/node_modules/jackspeak": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", + "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/type-traverser/node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "packages/type-traverser/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/type-traverser/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "packages/type-traverser/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/type-traverser/node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/type-traverser/node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + } + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/package.json b/sdk/ng-sdk-js/ng-ldo-compact/package.json new file mode 100644 index 0000000..e7a6cd0 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/package.json @@ -0,0 +1,39 @@ +{ + "name": "@nextgraph-monorepo/ng-ldo-compact", + "private": true, + "workspaces": [ + "packages/*" + ], + "scripts": { + "test": "lerna run test", + "build": "lerna run build", + "lint": "lerna run lint", + "clean": "lerna clean --yes && lerna run remove-dist && rimraf node_modules", + "publish": "lerna publish --no-private" + }, + "devDependencies": { + "@babel/preset-env": "^7.26.9", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", + "@types/jest": "^27.5.2", + "@types/node": "^20.5.7", + "@typescript-eslint/eslint-plugin": "^6.5.0", + "@typescript-eslint/parser": "^6.5.0", + "@vitejs/plugin-react": "^4.4.1", + "@vitest/coverage-istanbul": "^3.2.3", + "eslint": "^8.48.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-react": "^7.33.2", + "jest": "^29.7.0", + "jsdom": "^26.1.0", + "lerna": "^7.2.0", + "prettier": "3.0.3", + "ts-jest": "^29.3.0", + "typescript": "^5.2.2", + "vitest": "^3.1.3" + }, + "dependencies": { + "prettier-eslint": "^16.4.2" + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/.gitignore b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/.gitignore new file mode 100644 index 0000000..138f9c6 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/.gitignore @@ -0,0 +1,2 @@ +example-create +example-init \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/README.md b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/README.md new file mode 100644 index 0000000..c3c59f2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/README.md @@ -0,0 +1,83 @@ +# @ldo/cli + +The `@ldo/cli` is a command line interface for initializing LDO and building ShapeTypes. + +## Setup + +### Automatic Setup +To setup LDO, `cd` into your typescript project and run `npx @ldo/cli init`. + +```bash +cd my-typescript-project +npx @ldo/cli init +``` + +
+ +Manual Setup + +The following is handled by the __automatic setup__: + +Install the LDO dependencies. +```bash +npm install @ldo/ldo +npm install @ldo/cli --save-dev +``` + +Create a folder to store your ShEx shapes: +```bash +mkdir shapes +``` + +Create a script to build ShEx shapes and convert them into Linked Data Objects. You can put this script in `package.json` +```json +{ + ... + scripts: { + ... + "build:ldo": "ldo build --input ./shapes --output ./ldo" + ... + } + ... +} +``` +
+ +## Generating a ShapeType + +@ldo/cli generates shape types using the `*.shex` files in the "input" folder. If you followed the instructions above, run the following command: + +```bash +npm run build:ldo +``` + +This will generate five files: + - `./ldo/foafProfile.shapeTypes.ts` <-- This is the important file + - `./ldo/foafProfile.typings.ts` + - `./ldo/foafProfile.schema.ts` + - `./ldo/foafProfile.context.ts` + +## Creating a new project to distribure shapes + +Sometimes, you might want to distribute shapes to others. The easiest way to do that is to deploy them to NPM. The LDO CLI has an easy-to-use command for generating a standalone project just for your shapes. + +```bash +npx @ldo/cli create ./my-project +``` + +This script will generate a project with a place to put your shapes. Running `npm publish` will build the shapes and push to project to NPM for you. + +## API Details + - [`init` command](https://ldo.js.org/latest/api/cli/init/) + - [`build` command](https://ldo.js.org/latest/api/cli/build/) + - [`create` command](https://ldo.js.org/latest/api/cli/create/) + + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/example-init-placeholder/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/example-init-placeholder/package.json new file mode 100644 index 0000000..f41a7f6 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/example-init-placeholder/package.json @@ -0,0 +1,11 @@ +{ + "name": "example-init", + "version": "1.0.0", + "description": "", + "keywords": [ + "" + ], + "author": "", + "license": "MIT", + "main": "./index.js" +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/example-init-placeholder/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/example-init-placeholder/src/index.ts new file mode 100644 index 0000000..702f428 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/example-init-placeholder/src/index.ts @@ -0,0 +1 @@ +console.log("hello"); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/jest.config.cjs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/jest.config.cjs new file mode 100644 index 0000000..c651e3b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/jest.config.cjs @@ -0,0 +1,6 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const sharedConfig = require("../../jest.config.js"); +module.exports = { + ...sharedConfig, + rootDir: "./", +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/package.json new file mode 100644 index 0000000..0d626ba --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/package.json @@ -0,0 +1,67 @@ +{ + "name": "@ldo/cli", + "version": "1.0.0-alpha.32", + "description": "A Command Line Interface for Linked Data Objects", + "main": "./dist/index.js", + "type": "module", + "bin": { + "ldo": "./dist/index.js" + }, + "scripts": { + "build": "npm run remove-dist && npm run build:ts && npm run copy-files && npm run update-permission", + "build:ts": "tsc --project tsconfig.cjs.json", + "remove-dist": "rimraf dist/", + "copy-files": "copyfiles -u 1 \"./src/**/*.ejs\" dist/", + "update-permission": "chmod +x ./dist/index.js", + "test": "jest --coverage", + "prepublishOnly": " npm run build", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "test:init": "rm -rf ./example-init && cp -R ./example-init-placeholder ./example-init && cd ./example-init && ../dist/index.js init", + "test:create": "rm -rf ./example-create && ./dist/index.js create ./example-create" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/cli#readme", + "devDependencies": { + "@types/child-process-promise": "^2.2.2", + "@types/ejs": "^3.1.1", + "@types/fs-extra": "^9.0.13", + "@types/jsonld": "^1.5.15", + "@types/prompts": "^2.4.9", + "@types/shexj": "^2.1.4", + "copyfiles": "^2.4.1", + "rimraf": "^3.0.2" + }, + "dependencies": { + "@jeswr/shacl2shex": "^1.1.0", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/schema-converter-shex": "^1.0.0-alpha.32", + "@shexjs/parser": "^1.0.0-alpha.24", + "child-process-promise": "^2.2.1", + "commander": "^9.3.0", + "ejs": "^3.1.8", + "fs-extra": "^10.1.0", + "loading-cli": "^1.1.0", + "prettier": "^3.0.3", + "prompts": "^2.4.2", + "rdf-dereference-store": "^1.4.0", + "rdf-namespaces": "^1.13.1", + "ts-morph": "^24.0.0", + "type-fest": "^2.19.0" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "gitHead": "840910c56ec3f61416f031cc76771a5673af6757" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/build.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/build.ts new file mode 100644 index 0000000..e1ae9c7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/build.ts @@ -0,0 +1,96 @@ +import fs from "fs-extra"; +import path from "path"; +import type { Schema } from "@ldo/traverser-shexj"; +import parser from "@shexjs/parser"; +import schemaConverterShex from "@ldo/schema-converter-shex"; +import { renderFile } from "ejs"; +import prettier from "prettier"; +import loading from "loading-cli"; +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { forAllShapes } from "./util/forAllShapes.js"; +import { annotateReadablePredicates } from "@ldo/schema-converter-shex"; + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +const __dirname = dirname(fileURLToPath(import.meta.url)); + +interface BuildOptions { + input: string; + output: string; + format?: "ldo" | "compact"; +} + +export async function build(options: BuildOptions) { + const load = loading("Preparing Environment"); + load.start(); + // Prepare new folder by clearing/and/or creating it + if (fs.existsSync(options.output)) { + await fs.promises.rm(options.output, { recursive: true }); + } + await fs.promises.mkdir(options.output); + + const format = options.format || "ldo"; + const fileTemplates: string[] = []; + + if (format === "compact") { + // Pre-annotate schema with readablePredicate to unify naming across outputs + fileTemplates.push("schema.compact", "typings", "shapeTypes.compact"); + } else { + fileTemplates.push("schema", "typings", "shapeTypes", "context"); + } + + load.text = "Generating LDO Documents"; + await forAllShapes(options.input, async (fileName, shexC) => { + // Convert to ShexJ + let schema: Schema; + try { + // @ts-expect-error ... + schema = parser.construct("https://ldo.js.org/").parse(shexC); + } catch (err) { + const errMessage = + err instanceof Error + ? err.message + : typeof err === "string" + ? err + : "Unknown Error"; + console.error(`Error processing ${fileName}: ${errMessage}`); + return; + } + + // Add readable predicates to schema as the single source of truth. + if (format === "compact") { + // @ts-expect-error ... + annotateReadablePredicates(schema); + } + + const [typings, context, compactSchema] = await schemaConverterShex( + schema, + { + format, + }, + ); + + await Promise.all( + fileTemplates.map(async (templateName) => { + const finalContent = await renderFile( + path.join(__dirname, "./templates", `${templateName}.ejs`), + { + typings: typings.typings, + fileName, + schema: JSON.stringify(schema, null, 2), + context: JSON.stringify(context, null, 2), + compactSchema: JSON.stringify(compactSchema, null, 2), + format, + }, + ); + await fs.promises.writeFile( + path.join(options.output, `${fileName}.${templateName}.ts`), + await prettier.format(finalContent, { parser: "typescript" }), + ); + }), + ); + }); + + load.stop(); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/create.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/create.ts new file mode 100644 index 0000000..a9e3e6a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/create.ts @@ -0,0 +1,119 @@ +import { init } from "./init.js"; +import { + modifyPackageJson, + savePackageJson, +} from "./util/modifyPackageJson.js"; +import { generateReadme } from "./generateReadme.js"; +import path from "path"; +import prompts from "prompts"; +import type { PackageJson } from "type-fest"; +import loading from "loading-cli"; +import { promises as fs } from "fs"; +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +const __dirname = dirname(fileURLToPath(import.meta.url)); + +export async function create(directory: string) { + // Init the NPM Package + const responses = await prompts([ + { + type: "text", + name: "name", + message: "Package name:", + initial: path.basename(directory), + }, + { + type: "text", + name: "version", + message: "Version:", + initial: "1.0.0", + }, + { + type: "text", + name: "description", + message: "Description:", + }, + { + type: "list", + name: "keywords", + message: "Keywords (comma separated):", + separator: ",", + }, + { + type: "text", + name: "author", + message: "Author:", + }, + { + type: "text", + name: "license", + message: "License:", + initial: "MIT", + }, + { + type: "text", + name: "repository", + message: "Git repository (optional):", + }, + ]); + + const load = loading("Generating package.json"); + + const packageJson: PackageJson = { + name: responses.name, + version: responses.version, + description: responses.description, + keywords: responses.keywords, + author: responses.author, + license: responses.license, + main: "./index.js", + }; + + if (responses.repository) { + packageJson.repository = { + type: "git", + url: responses.repository, + }; + packageJson.bugs = { + url: `${responses.repository.replace(/\.git$/, "")}/issues`, + }; + packageJson.homepage = `${responses.repository.replace( + /\.git$/, + "", + )}#readme`; + } + + await savePackageJson(directory, packageJson); + + // Init LDO + load.text = "Initializing LDO"; + await init(directory); + + // Add prepublish script + await modifyPackageJson(directory, async (packageJson) => { + if (!packageJson.scripts) packageJson.scripts = {}; + packageJson.scripts.prepublish = + "npm run build:ldo && npm run generate-readme"; + packageJson.scripts[ + "generate-readme" + ] = `ldo generate-readme --project ./ --shapes ./.shapes --ldo ./.ldo`; + return packageJson; + }); + + // Generate ReadMe + load.text = "Generating README"; + await generateReadme({ + project: directory, + shapes: path.join(directory, ".shapes"), + ldo: path.join(directory, ".ldo"), + }); + + // Create .gitignore + load.text = "Create .gitignore"; + await fs.writeFile(path.join(directory, ".gitignore"), "node_modules"); + + load.stop(); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/generateReadme.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/generateReadme.ts new file mode 100644 index 0000000..aaa9501 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/generateReadme.ts @@ -0,0 +1,107 @@ +import { getPackageJson } from "./util/modifyPackageJson.js"; +import { forAllShapes } from "./util/forAllShapes.js"; +import { promises as fs } from "fs"; +import path from "path"; +import { Project } from "ts-morph"; +import { renderFile } from "ejs"; +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +const __dirname = dirname(fileURLToPath(import.meta.url)); + +interface GenerateReadmeOptions { + project: string; + shapes: string; + ldo: string; +} + +interface ReadmeEjsOptions { + projectName: string; + projectDescription: string; + shapes: { + name: string; + types: { + typeName: string; + shapeTypeName: string; + }[]; + shex: string; + typescript: string; + }[]; +} + +export async function generateReadme(options: GenerateReadmeOptions) { + const packageJson = await getPackageJson(options.project); + const projectName = packageJson.name!; + const projectDescription = packageJson.description!; + const shapes: ReadmeEjsOptions["shapes"] = []; + + await forAllShapes(options.shapes, async (fileName, shexC) => { + const typeFilePath = path.join(options.ldo, `${fileName}.typings.ts`); + + const typesRaw = await fs.readFile(typeFilePath, "utf8"); + + const shape: ReadmeEjsOptions["shapes"][0] = { + name: fileName, + shex: shexC, + typescript: typesRaw, + types: [], + }; + + listInterfaces(typeFilePath).forEach((interfaceName) => { + shape.types.push({ + typeName: interfaceName, + shapeTypeName: `${interfaceName}ShapeType`, + }); + }); + + shapes.push(shape); + }); + + const readmeEjsOptions: ReadmeEjsOptions = { + projectName, + projectDescription, + shapes, + }; + + // Save Readme + const finalContent = await renderFile( + path.join(__dirname, "./templates/readme/", "main.ejs"), + readmeEjsOptions, + ); + // Save readme to document + await fs.writeFile(path.join(options.project, "README.md"), finalContent); + + await generateIndex({ project: options.project }); +} + +/** + * Helper Function that lists all the interfaces in a typescript file + */ +function listInterfaces(filePath: string): string[] { + const project = new Project(); + const sourceFile = project.addSourceFileAtPath(filePath); + + // Get all interfaces in the file + const interfaces = sourceFile.getInterfaces().map((iface) => iface.getName()); + return interfaces; +} + +/** + * Generate Index + */ +interface GenerateIndexOptions { + project: string; +} + +export async function generateIndex(options: GenerateIndexOptions) { + const ldoDir = await fs.readdir(path.join(options.project, "./.ldo"), { + withFileTypes: true, + }); + const indexText = await renderFile( + path.join(__dirname, "./templates/readme/projectIndex.ejs"), + { fileNames: ldoDir.map((file) => file.name) }, + ); + await fs.writeFile(path.join(options.project, "index.js"), indexText); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/index.ts new file mode 100644 index 0000000..4f44a12 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/index.ts @@ -0,0 +1,58 @@ +#!/usr/bin/env node + +import { program } from "commander"; +import { build } from "./build.js"; +import { init } from "./init.js"; +import { create } from "./create.js"; +import { generateReadme } from "./generateReadme.js"; + +program + .name("LDO-CLI") + .description("CLI to some JavaScript string utilities") + .version("3.0.1"); + +program + .command("build") + .description("Build contents of a shex folder into Shape Types") + .option("-i, --input ", "Provide the input path", "./.shapes") + .option("-o, --output ", "Provide the output path", "./.ldo") + .option( + "-f, --format ", + 'Typings format: "compact" (default) or "ldo"', + "compact" + ) + .action(build); + +program + .command("init") + .argument("[directory]", "A parent directory for ldo files") + .description("Initializes a project for LDO.") + .action(init); + +program + .command("create") + .argument("", "The package's directory") + .description("Creates a standalone package for shapes to publish to NPM.") + .action(create); + +program + .command("generate-readme") + .description("Create a ReadMe from the shapes and generated code.") + .requiredOption( + "-p, --project ", + "Provide the path to the root project", + "./" + ) + .requiredOption( + "-s, --shapes ", + "Provide the path to the shapes folder", + "./.shapes" + ) + .requiredOption( + "-s, --ldo ", + "Provide the path to the ldo folder", + "./.ldo" + ) + .action(generateReadme); + +program.parse(); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/init.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/init.ts new file mode 100644 index 0000000..db783b0 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/init.ts @@ -0,0 +1,78 @@ +import { exec } from "child-process-promise"; +import fs from "fs-extra"; +import path from "path"; +import { renderFile } from "ejs"; +import { modifyPackageJson } from "./util/modifyPackageJson.js"; +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const DEFAULT_SHAPES_FOLDER = "./.shapes"; +const DEFAULT_LDO_FOLDER = "./.ldo"; +const POTENTIAL_PARENT_DIRECTORIES = ["src", "lib", "bin"]; + +export async function init(directory?: string) { + // Find folder to save to + const projectDirectory = directory ?? "./"; + + // Get the parent directory for the ldo files + let parentDirectory = projectDirectory; + parentDirectory = "./"; + const allDirectories = ( + await fs.promises.readdir("./", { + withFileTypes: true, + }) + ).filter((file) => file.isDirectory()); + for (let i = 0; i < POTENTIAL_PARENT_DIRECTORIES.length; i++) { + if ( + allDirectories.some((dir) => dir.name === POTENTIAL_PARENT_DIRECTORIES[i]) + ) { + parentDirectory = POTENTIAL_PARENT_DIRECTORIES[i]; + break; + } + } + + // Install dependencies + await exec(`cd ${projectDirectory} && npm install @ldo/ldo --save`); + await exec( + `cd ${projectDirectory} && npm install @ldo/cli @types/shexj @types/jsonld --save-dev`, + ); + + // Create "shapes" folder + const shapesFolderPath = path.join(parentDirectory, DEFAULT_SHAPES_FOLDER); + await fs.promises.mkdir(shapesFolderPath); + const defaultShapePaths = await fs.promises.readdir( + path.join(__dirname, "./templates/defaultShapes"), + ); + await Promise.all( + defaultShapePaths.map(async (shapePath) => { + const shapeContent = await renderFile( + path.join(__dirname, "./templates/defaultShapes", shapePath), + {}, + ); + await fs.promises.writeFile( + path.join(shapesFolderPath, `${path.parse(shapePath).name}.shex`), + shapeContent, + ); + }), + ); + + // Add build script + await modifyPackageJson("./", async (packageJson) => { + if (!packageJson.scripts) { + packageJson.scripts = {}; + } + const ldoFolder = path.join(parentDirectory, DEFAULT_LDO_FOLDER); + packageJson.scripts["build:ldo"] = `ldo build --input ${path.relative( + projectDirectory, + shapesFolderPath, + )} --output ${path.relative(projectDirectory, ldoFolder)}`; + return packageJson; + }); + + // Build LDO + await exec(`cd ${projectDirectory} && npm run build:ldo`); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/context.ejs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/context.ejs new file mode 100644 index 0000000..4f9ccf2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/context.ejs @@ -0,0 +1,8 @@ +import { LdoJsonldContext } from "@ldo/ldo"; + +/** + * ============================================================================= + * <%- fileName %>Context: JSONLD Context for <%- fileName %> + * ============================================================================= + */ +export const <%- fileName %>Context: LdoJsonldContext = <%- context %>; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/defaultShapes/foafProfile.ejs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/defaultShapes/foafProfile.ejs new file mode 100644 index 0000000..dff09d1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/defaultShapes/foafProfile.ejs @@ -0,0 +1,19 @@ +# This shape is provided by default as an example +# You can create your own shape to fit your needs using ShEx (https://shex.io) +# Also check out https://shaperepo.com for examples of more shapes. + +PREFIX ex: +PREFIX foaf: +PREFIX rdfs: +PREFIX xsd: + +ex:FoafProfile EXTRA a { + a [ foaf:Person ] + // rdfs:comment "Defines the node as a Person (from foaf)" ; + foaf:name xsd:string ? + // rdfs:comment "Define a person's name." ; + foaf:img xsd:string ? + // rdfs:comment "Photo link but in string form" ; + foaf:knows @ex:FoafProfile * + // rdfs:comment "A list of WebIds for all the people this user knows." ; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/readme/main.ejs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/readme/main.ejs new file mode 100644 index 0000000..1ce6681 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/readme/main.ejs @@ -0,0 +1,15 @@ +# <%= projectName %> + +<%- projectDescription %> + +This project includes shapes and generated files for [LDO](https://ldo.js.org). + +## Installation + +```bash +npm i <%= projectName %> +``` + +<% shapes.forEach(function(shape) { %> +<%- include('shape', { shape: shape, projectName: projectName }) %> +<% }); %> \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/readme/projectIndex.ejs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/readme/projectIndex.ejs new file mode 100644 index 0000000..4f844eb --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/readme/projectIndex.ejs @@ -0,0 +1,2 @@ +<% fileNames.forEach((fileName) => { %>export * from "./.ldo/<%- fileName %>"; +<% }); %> \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/readme/shape.ejs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/readme/shape.ejs new file mode 100644 index 0000000..9973581 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/readme/shape.ejs @@ -0,0 +1,27 @@ +## <%= shape.name %> + +### Usage with LDO + +```typescript +import { createLdoDataset } from "@ldo/ldo"; +import { <%= shape.types.map((type) => type.shapeTypeName).join(", ") %> } from "<%= projectName %>"; +import type { <%= shape.types.map((type) => type.typeName).join(", ") %> } from "<%= projectName %>"; +const ldoDataset = createLdoDataset(); +<% shape.types.forEach(function(type, index) { %> +const example<%= index %>: <%= type.typeName %> = ldoDataset + .usingType(<%= type.shapeTypeName %>) + .fromSubject("http://example.com/example<%= index %>"); +<% }); %> +``` + +### ShEx Typings + +```shex +<%- shape.shex %> +``` + +### TypeScript Typings + +```typescript +<%- shape.typescript %> +``` diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/schema.compact.ejs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/schema.compact.ejs new file mode 100644 index 0000000..e592a31 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/schema.compact.ejs @@ -0,0 +1,8 @@ +import type { CompactSchema } from "@ldo/ldo"; + +/** + * ============================================================================= + * <%- fileName %>Schema: Compact Schema for <%- fileName %> + * ============================================================================= + */ +export const <%- fileName %>Schema: CompactSchema = <%- compactSchema %>; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/schema.ejs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/schema.ejs new file mode 100644 index 0000000..aae8686 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/schema.ejs @@ -0,0 +1,8 @@ +import type { Schema } from "shexj"; + +/** + * ============================================================================= + * <%- fileName %>Schema: ShexJ Schema for <%- fileName %> + * ============================================================================= + */ +export const <%- fileName %>Schema: Schema = <%- schema %>; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/shapeTypes.compact.ejs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/shapeTypes.compact.ejs new file mode 100644 index 0000000..e10e503 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/shapeTypes.compact.ejs @@ -0,0 +1,14 @@ +import type { CompactShapeType } from "@ldo/ldo"; +import { <%- fileName %>Schema } from "./<%- fileName %>.schema"; + import type { + <% typings.forEach((typing)=> { if (!/Id$/.test(typing.dts.name)) { -%> + <%- typing.dts.name %>, + <% } }); -%>} from "./<%- fileName %>.typings"; + + // Compact ShapeTypes for <%- fileName %> + <% typings.forEach((typing)=> { if (!/Id$/.test(typing.dts.name)) { -%> + export const <%- typing.dts.name %>ShapeType: CompactShapeType<<%- typing.dts.name %>> = { + schema: <%- fileName %>Schema, + shape: "<%- typing.dts.shapeId %>", + }; + <% } }); -%> \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/shapeTypes.ejs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/shapeTypes.ejs new file mode 100644 index 0000000..568e22b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/shapeTypes.ejs @@ -0,0 +1,16 @@ +import { ShapeType } from "@ldo/ldo"; +import { <%- fileName %>Schema } from "./<%- fileName %>.schema"; + import { <%- fileName %>Context } from "./<%- fileName %>.context"; + import { + <% typings.forEach((typing)=> { if (!/Id$/.test(typing.dts.name)) { -%> + <%- typing.dts.name %>, + <% } }); -%>} from "./<%- fileName %>.typings"; + + // LDO ShapeTypes for <%- fileName %> + <% typings.forEach((typing)=> { if (!/Id$/.test(typing.dts.name)) { -%> + export const <%- typing.dts.name %>ShapeType: ShapeType<<%- typing.dts.name %>> = { + schema: <%- fileName %>Schema, + shape: "<%- typing.dts.shapeId %>", + context: <%- fileName %>Context, + }; + <% } }); -%> \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/typings.ejs b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/typings.ejs new file mode 100644 index 0000000..a88a453 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/templates/typings.ejs @@ -0,0 +1,18 @@ +<% if (format==='ldo' ) { -%> + import { LdoJsonldContext, LdSet } from "@ldo/ldo"; + <% } else { -%> + export type IRI = string; + <% } -%> + + /** + * ============================================================================= + * Typescript Typings for <%- fileName %> + * ============================================================================= + */ + + <% typings.forEach((typing)=> { -%> + /** + * <%- typing.dts.name %> Type + */ + export <%- typing.typingString -%> + <% }); -%> \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/util/forAllShapes.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/util/forAllShapes.ts new file mode 100644 index 0000000..b1adf32 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/util/forAllShapes.ts @@ -0,0 +1,78 @@ +import fs from "fs"; +import path from "path"; +import { shaclStoreToShexSchema, writeShexSchema } from "@jeswr/shacl2shex"; +import { dereferenceToStore } from "rdf-dereference-store"; +import type { Store } from "n3"; +import { DataFactory as DF } from "n3"; +import { rdf } from "rdf-namespaces"; + +function hasMatch(store: Store, predicate: string, object: string) { + for (const _ in store.match( + null, + DF.namedNode(predicate), + DF.namedNode(object), + DF.defaultGraph(), + )) { + return true; + } + return false; +} + +export async function forAllShapes( + shapePath: string, + callback: (filename: string, shape: string) => Promise, +): Promise { + const shapeDir = await fs.promises.readdir(shapePath, { + withFileTypes: true, + }); + // Filter out non-shex documents + const shexFiles = shapeDir.filter( + (file) => file.isFile() && file.name.endsWith(".shex"), + ); + const shexPromise = Promise.all( + shexFiles.map(async (file) => { + const fileName = path.parse(file.name).name; + // Get the content of each document + const shexC = await fs.promises.readFile( + path.join(shapePath, file.name), + "utf8", + ); + await callback(fileName, shexC); + }), + ); + + const shaclPromise = Promise.all( + shapeDir.map(async (file) => { + if (file.isFile()) { + let store: Awaited>; + try { + store = await dereferenceToStore(path.join(shapePath, file.name), { + localFiles: true, + }); + } catch (e) { + return; + } + // Make sure the RDF file contains a SHACL shape + if ( + hasMatch( + store.store, + rdf.type, + "http://www.w3.org/ns/shacl#NodeShape", + ) || + hasMatch( + store.store, + rdf.type, + "http://www.w3.org/ns/shacl#PropertyShape", + ) + ) { + const shex = await writeShexSchema( + await shaclStoreToShexSchema(store.store), + store.prefixes, + ); + await callback(path.parse(file.name).name, shex); + } + } + }), + ); + await Promise.all([shexPromise, shaclPromise]); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/util/modifyPackageJson.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/util/modifyPackageJson.ts new file mode 100644 index 0000000..2bc0d54 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/src/util/modifyPackageJson.ts @@ -0,0 +1,33 @@ +import type { PackageJson } from "type-fest"; +import fs from "fs-extra"; +import path from "path"; + +export async function getPackageJson( + projectFolder: string, +): Promise { + return JSON.parse( + ( + await fs.promises.readFile(path.join(projectFolder, "./package.json")) + ).toString(), + ); +} + +export async function savePackageJson( + projectFolder: string, + packageJson: PackageJson, +): Promise { + await fs.promises.mkdir(projectFolder, { recursive: true }); + await fs.promises.writeFile( + path.join(projectFolder, "./package.json"), + JSON.stringify(packageJson, null, 2), + ); +} + +export async function modifyPackageJson( + projectFolder: string, + modifyCallback: (packageJson: PackageJson) => Promise, +): Promise { + const packageJson: PackageJson = await getPackageJson(projectFolder); + const newPackageJson = await modifyCallback(packageJson); + await savePackageJson(projectFolder, newPackageJson); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/test/trivial.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/test/trivial.test.ts new file mode 100644 index 0000000..5abb258 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/test/trivial.test.ts @@ -0,0 +1,5 @@ +describe("cli", () => { + it("trivial", () => { + expect(true).toBe(true); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/tsconfig.cjs.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/tsconfig.cjs.json new file mode 100644 index 0000000..962a545 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/cli/tsconfig.cjs.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "node", + "outDir": "./dist" + }, + "include": ["./src"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/.gitignore b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/.gitignore new file mode 100644 index 0000000..869539a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/.gitignore @@ -0,0 +1,2 @@ +test/data +node_modules \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/README.md b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/README.md new file mode 100644 index 0000000..9592ecd --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/README.md @@ -0,0 +1,186 @@ +# `@ldo/connected-nextgraph` + +The `@ldo/connected-nextgraph` library allows you to integrate [NextGraph](https://nextgraph.org) with the [LDO](https://ldo.js.org) ecosystem. It provides a `ConnectedLdoDataset` that manages RDF data across decentralized NextGraph resources with real-time synchronization and read/write capabilities. + +## Installation + +First, install the required libraries: + +```bash +npm install @ldo/connected-nextgraph +``` + +Also install a version of next-graph you wish to use + +```bash +# For applications on NodeJS +npm install nextgraph +# For applications running in the web browser +npm install nextgraphweb +``` + +## Usage: + +### 1. Setup: Create a ConnectedLdoDataset + +```ts +import { createNextGraphLdoDataset } from "@ldo/connected-nextgraph"; + +// Create the dataset +const ldoDataset = createNextGraphLdoDataset(); +``` + +### 2. Connect to a NextGraph Wallet Session + +Before you can create or access resources, you need an active session: + +```ts +import ng from "nextgraph" // or `import ng from "nextgraphweb"` for the browser + +// Open your nextgraph wallet +const openedWallet = await ng.wallet_open_with_mnemonic_words( + walletBinary, + mnemonic, + [1, 2, 3, 4] +); + +// Start a session +const session = await ng.session_in_memory_start( + openedWallet.V0.wallet_id, + openedWallet.V0.personal_site +); +``` + +--- + +### 3. Link Your Dataset to the NextGraph Session +```ts +ldoDataset.setContext("nextgraph", { + ng, + sessionId: session.session_id +}); +``` + +### 4. Create a Resource + +To create a new resource in your store: + +```ts +const resource = await ldoDataset.createResource("nextgraph"); +if (!resource.isError) { + console.log("Created resource:", resource.uri); +} +``` + +### 5. Read and Monitor a Resource** + +#### Read Existing Resource + +```ts +const resource = ldoDataset.getResource(existingUri); +const readResult = await resource.read(); + +if (!readResult.isError) { + console.log("Resource loaded!", readResult.type); +} +``` + +#### Read Only If Unfetched + +Avoid redundant fetches: + +```ts +const readResult = await resource.readIfUnfetched(); +``` + +#### Subscribe to Notifications + +```ts +const unsubscribeId = await resource.subscribeToNotifications(); +await resource.unsubscribeFromNotification(unsubscribeId); +await resource.unsubscribeFromAllNotifications(); +``` + +--- + +### 6. Write Data to a Resource + +You can write RDF data to a resource using `update()`: + +```ts +import { parseRdf } from "@ldo/ldo"; + +const ttlData = ` +@prefix foaf: . +<#spiderman> a foaf:Person ; foaf:name "Spiderman" . +`; + +const triples = await parseRdf(ttlData); + +await resource.update({ + added: triples, + removed: undefined +}); +``` + +## Using NextGraph with React + +You can also use the `@ldo/react` library with `@ldo/connected-nextgraph`. + +### 1. Create the react methods + +First, we initialize some methods to use with the `@ldo/connected-nextgraph` and +`@ldo/react` libraries. + +```typescript +// ./reactMethods.ts +import { nextGraphConnectedPlugin } from "@ldo/connected-nextgraph"; +import { createLdoReactMethods } from "@ldo/react"; +import ng from "nextgraphweb"; + +export const { + dataset, + useLdo, + useMatchObject, + useMatchSubject, + useResource, + useSubject, + useSubscribeToResource, +} = createLdoReactMethods([nextGraphConnectedPlugin]); + +// Set NG on the data. When the sessionId is retrieved, `setContext` can be +// called at any time to set that as well. +dataset.setContext("nextgraph", { + ng, + sessionId: "SOME_ID" +}); +``` + +### 2. Use the methods in your React components + +From there, you can import these created methods in your React component and use +them as you would use any of the methods in the [@ldo/react-solid](https://ldo.js.org/latest/guides/solid_react/) +library. + +```typescript +import { FunctionComponent } from "react"; +import { PostShShapeType } from "./.ldo/post.shapeTypes.js"; +import { useResource, useSubject } from "./reactMethods.js"; + +export const UseSubjectTest: FunctionComponent = () => { + useResource("did:ng:SOME_URI"); + const post = useSubject(PostShShapeType, `SomeOtherUri`); + + return

{post.articleBody}

; +}; +``` + + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/package.json new file mode 100644 index 0000000..c9117e3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/package.json @@ -0,0 +1,73 @@ +{ + "name": "@ldo/connected-nextgraph", + "version": "1.0.0-alpha.32", + "description": "A plugin for @ldo/connected to work with the Solid ecosystem.", + "type": "module", + "main": "./dist/cjs/index.cjs", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.cjs" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "rimraf dist && npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --project tsconfig.cjs.json && node ../../scripts/rename-to-cjs.js", + "build:esm": "tsc --project tsconfig.esm.json", + "test": "[ \"$CI\" = \"true\" ] && echo 'Skipping integration tests in CI.' || npm run test:integration", + "prepublishOnly": " npm run build", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "docs": "typedoc --plugin typedoc-plugin-markdown", + "start-test-server": "./test/ngd -vv --save-key -l 14400 --base ./test/nextgraph-data", + "start-integration-test": "vitest run --coverage", + "test:integration": "start-server-and-test start-test-server http-get://localhost:14400 start-integration-test", + "remove-dist": "rimraf dist/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/solid#readme", + "devDependencies": { + "@inrupt/solid-client-authn-core": "^3.0.0", + "@ldo/cli": "^1.0.0-alpha.32", + "@rdfjs/types": "^1.0.1", + "@solid-notifications/types": "^0.1.2", + "@solid/community-server": "8.0.0-alpha.0", + "cross-env": "^7.0.3", + "dotenv": "^16.3.1", + "jest-rdf": "^1.8.0", + "nextgraph": "^0.1.1-alpha.7", + "start-server-and-test": "^2.0.11", + "ts-node": "^10.9.1", + "typed-emitter": "^2.1.0", + "typedoc": "^0.25.4", + "typedoc-plugin-markdown": "^3.17.1" + }, + "dependencies": { + "@ldo/connected": "^1.0.0-alpha.32", + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@solid-notifications/subscription": "^0.1.2", + "cross-fetch": "^3.1.6", + "ws": "^8.18.0" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "gitHead": "840910c56ec3f61416f031cc76771a5673af6757" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/NextGraphConnectedPlugin.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/NextGraphConnectedPlugin.ts new file mode 100644 index 0000000..7d82e82 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/NextGraphConnectedPlugin.ts @@ -0,0 +1,87 @@ +import type { ConnectedContext, ConnectedPlugin } from "@ldo/connected"; +import type { NextGraphUri } from "./types.js"; +import { NextGraphResource } from "./resources/NextGraphResource.js"; +import { isNextGraphUri } from "./util/isNextGraphUri.js"; + +export interface NextGraphConnectedContext { + // NG does not have a type definition + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ng?: any; + sessionId?: string; + protectedStoreId?: string; + privateStoreId?: string; + publicStoreId?: string; +} + +export interface NextGraphCreateResourceOptions { + storeType?: "public" | "protected" | "private" | "group" | "dialog"; + storeRepo?: string; + primaryClass?: string; +} + +export interface NextGraphConnectedPlugin + extends ConnectedPlugin< + "nextgraph", + NextGraphUri, + NextGraphResource, + NextGraphConnectedContext, + NextGraphCreateResourceOptions + > { + name: "nextgraph"; + getResource: ( + uri: NextGraphUri, + context: ConnectedContext, + ) => NextGraphResource; + createResource(context: ConnectedContext): Promise; +} + +export const nextGraphConnectedPlugin: NextGraphConnectedPlugin = { + name: "nextgraph", + + getResource: function ( + uri: NextGraphUri, + context: ConnectedContext, + ): NextGraphResource { + return new NextGraphResource(uri, context); + }, + + createResource: async function ( + context: ConnectedContext, + options?: NextGraphCreateResourceOptions, + ): Promise { + const storeType = options?.storeType; + const storeRepo = + options?.storeRepo ?? + (storeType === "protected" + ? context.nextgraph.protectedStoreId + : storeType === "public" + ? context.nextgraph.publicStoreId + : storeType === "private" + ? context.nextgraph.privateStoreId + : undefined); + const primaryClass = options?.primaryClass ?? "data:graph"; + + const nuri: NextGraphUri = await context.nextgraph.ng.doc_create( + context.nextgraph.sessionId, + "Graph", + primaryClass, + "store", + storeType, + storeRepo, + ); + const newResource = new NextGraphResource(nuri, context); + await newResource.read(); + return newResource; + }, + + isUriValid: function (uri: string): uri is NextGraphUri { + return isNextGraphUri(uri); + }, + + initialContext: { + sessionId: undefined, + }, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore "Types" only exists for the typing system + types: {}, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/createNextGraphLdoDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/createNextGraphLdoDataset.ts new file mode 100644 index 0000000..4ee1c19 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/createNextGraphLdoDataset.ts @@ -0,0 +1,13 @@ +import { ConnectedLdoDataset } from "@ldo/connected"; +import { nextGraphConnectedPlugin } from "./NextGraphConnectedPlugin.js"; +import { createDatasetFactory } from "@ldo/dataset"; +import { createTransactionDatasetFactory } from "@ldo/subscribable-dataset"; + +export function createNextGraphLdoDataset() { + const nextGraphLdoDataset = new ConnectedLdoDataset( + [nextGraphConnectedPlugin], + createDatasetFactory(), + createTransactionDatasetFactory(), + ); + return nextGraphLdoDataset; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/index.ts new file mode 100644 index 0000000..cbebb35 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/index.ts @@ -0,0 +1,10 @@ +export * from "./types.js"; +export * from "./NextGraphConnectedPlugin.js"; + +export * from "./resources/NextGraphResource.js"; + +export * from "./util/isNextGraphUri.js"; + +export * from "./results/NextGraphReadSuccess.js"; + +export * from "./createNextGraphLdoDataset.js"; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/notifications/NextGraphNotificationMessage.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/notifications/NextGraphNotificationMessage.ts new file mode 100644 index 0000000..972cde6 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/notifications/NextGraphNotificationMessage.ts @@ -0,0 +1,15 @@ +export interface NextGraphNotificationMessage { + V0: { + State?: { + graph: { + triples: AllowSharedBufferSource; + }; + }; + Patch?: { + graph: { + inserts: AllowSharedBufferSource; + removes: AllowSharedBufferSource; + }; + }; + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/notifications/NextGraphNotificationSubscription.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/notifications/NextGraphNotificationSubscription.ts new file mode 100644 index 0000000..22fc561 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/notifications/NextGraphNotificationSubscription.ts @@ -0,0 +1,23 @@ +import { NotificationSubscription } from "@ldo/connected"; +import type { NextGraphConnectedPlugin } from "../NextGraphConnectedPlugin.js"; +import type { NextGraphNotificationMessage } from "./NextGraphNotificationMessage.js"; + +export class NextGraphNotificationSubscription extends NotificationSubscription< + NextGraphConnectedPlugin, + NextGraphNotificationMessage +> { + private unsub: (() => void) | undefined; + + protected async open(): Promise { + this.unsub = await this.context.nextgraph.ng.doc_subscribe( + this.resource.uri, + this.context.nextgraph.sessionId, + this.onNotification.bind(this), + ); + } + + protected async close(): Promise { + this.unsub?.(); + this.unsub = undefined; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/resources/NextGraphResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/resources/NextGraphResource.ts new file mode 100644 index 0000000..a6304ea --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/resources/NextGraphResource.ts @@ -0,0 +1,270 @@ +import type { + ConnectedContext, + NotificationSubscription, + SubscriptionCallbacks, +} from "@ldo/connected"; +import { UnexpectedResourceError, UpdateSuccess } from "@ldo/connected"; +import { + Unfetched, + type ConnectedResult, + type Resource, + type ResourceEventEmitter, +} from "@ldo/connected"; +import type { NextGraphUri } from "../types.js"; +import EventEmitter from "events"; +import type { NextGraphConnectedPlugin } from "../NextGraphConnectedPlugin.js"; +import { changesToSparqlUpdate, type DatasetChanges } from "@ldo/rdf-utils"; +import type { NextGraphNotificationMessage } from "../notifications/NextGraphNotificationMessage.js"; +import type { Dataset, Quad } from "@rdfjs/types"; +import { namedNode, quad as createQuad } from "@ldo/rdf-utils"; +import { NextGraphReadSuccess } from "../results/NextGraphReadSuccess.js"; +import { NextGraphNotificationSubscription } from "../notifications/NextGraphNotificationSubscription.js"; +import { parseRdf } from "@ldo/ldo"; +import type { LdoDataset } from "@ldo/ldo"; +import { createDataset } from "@ldo/dataset"; +export class NextGraphResource + extends (EventEmitter as new () => ResourceEventEmitter) + implements Resource +{ + public readonly uri: NextGraphUri; + public readonly type = "NextGraphResource" as const; + public readonly isError = false as const; + public status: ConnectedResult; + protected context: ConnectedContext; + + private fetched: boolean = false; + private loading: boolean = false; + private present: boolean | undefined = undefined; + + /** + * @internal + * Handles notification subscriptions + */ + protected notificationSubscription: NotificationSubscription< + NextGraphConnectedPlugin, + NextGraphNotificationMessage + >; + + constructor( + uri: NextGraphUri, + context: ConnectedContext, + ) { + super(); + this.uri = uri; + this.status = new Unfetched(this); + this.context = context; + this.notificationSubscription = new NextGraphNotificationSubscription( + this, + this.onNotification.bind(this), + this.context, + ); + } + + isLoading(): boolean { + return this.loading; + } + + isFetched(): boolean { + return this.fetched; + } + + isUnfetched(): boolean { + return !this.fetched; + } + + isDoingInitialFetch(): boolean { + return this.loading && !this.fetched; + } + + isPresent(): boolean | undefined { + return this.present; + } + + isAbsent(): boolean | undefined { + return !this.present; + } + + isSubscribedToNotifications(): boolean { + return this.notificationSubscription.isSubscribedToNotifications(); + } + + private handleThrownError( + err: unknown, + ): UnexpectedResourceError { + const error = UnexpectedResourceError.fromThrown(this, err); + this.loading = false; + this.status = error; + this.emit("update"); + return error; + } + + private overwriteQuads(quads: Quad[] | Dataset) { + const dataset = this.context.dataset; + const graphNode = namedNode(this.uri); + dataset.deleteMatches(undefined, undefined, undefined, graphNode); + dataset.addAll( + quads.map((ngQuad) => { + return createQuad( + ngQuad.subject, + ngQuad.predicate, + ngQuad.object, + graphNode, + ); + }), + ); + } + + async read(): Promise< + NextGraphReadSuccess | UnexpectedResourceError + > { + try { + this.loading = true; + this.emit("update"); + + // Fetch the data once using construct + const sparqlResult = await this.context.nextgraph.ng.sparql_query( + this.context.nextgraph.sessionId, + `CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <${this.uri}> { ?s ?p ?o } }`, + undefined, + this.uri, + ); + // Update the dataset + this.overwriteQuads(sparqlResult); + + // Update statuses + const result = new NextGraphReadSuccess(this, false); + this.loading = false; + this.fetched = true; + this.present = true; + this.status = result; + this.emit("update"); + return result; + } catch (err) { + if (err === "RepoNotFound") { + const result = new NextGraphReadSuccess(this, false); + this.loading = false; + this.fetched = true; + this.present = false; + this.status = result; + this.emit("update"); + return result; + } + return this.handleThrownError(err); + } + } + + async readIfUnfetched(): Promise< + NextGraphReadSuccess | UnexpectedResourceError + > { + if (this.isFetched()) { + return new NextGraphReadSuccess(this, true); + } + return this.read(); + } + + async update( + datasetChanges: DatasetChanges, + ): Promise< + | UpdateSuccess + | UnexpectedResourceError + > { + this.loading = true; + this.emit("update"); + + // Optimistically apply updates + this.context.dataset.bulk(datasetChanges); + + try { + // Perform Update with remote + await this.context.nextgraph.ng.sparql_update( + this.context.nextgraph.sessionId, + await changesToSparqlUpdate(datasetChanges), + this.uri, + ); + return new UpdateSuccess(this); + } catch (err) { + // Revert data on error + this.context.dataset.bulk({ + added: datasetChanges.removed, + removed: datasetChanges.added, + }); + return this.handleThrownError(err); + } + } + + private async notificationToQuads( + notificationString: string, + ): Promise> { + const rawTriples = JSON.parse(notificationString); + const triples = ( + await Promise.all( + rawTriples.map(async (rawTriple) => + parseRdf(`${rawTriple}.`, { baseIRI: this.uri }), + ), + ) + ).reduce((agg, ldoDataset) => { + ldoDataset.forEach((quad) => { + agg.add( + createQuad( + quad.subject, + quad.predicate, + quad.object, + namedNode(this.uri), + ), + ); + }); + return agg; + }, createDataset()); + return triples; + } + + protected async onNotification(response: NextGraphNotificationMessage) { + if (response.V0.State) { + if (!response.V0.State.graph) { + this.overwriteQuads([]); + return; + } + const json_str = new TextDecoder().decode( + response.V0.State.graph.triples, + ); + const triples = await this.notificationToQuads(json_str); + this.overwriteQuads(triples); + } else if (response.V0.Patch?.graph) { + const insertsString = new TextDecoder().decode( + response.V0.Patch.graph.inserts, + ); + const removesString = new TextDecoder().decode( + response.V0.Patch.graph.removes, + ); + + const [added, removed] = await Promise.all( + [insertsString, removesString].map(async (str) => { + return this.notificationToQuads(str); + }), + ); + + this.context.dataset.bulk({ + added, + removed, + }); + } + } + + async subscribeToNotifications( + callbacks?: SubscriptionCallbacks, + ): Promise { + return await this.notificationSubscription.subscribeToNotifications( + callbacks, + ); + } + + unsubscribeFromNotifications(subscriptionId: string): Promise { + return this.notificationSubscription.unsubscribeFromNotification( + subscriptionId, + ); + } + + unsubscribeFromAllNotifications(): Promise { + return this.notificationSubscription.unsubscribeFromAllNotifications(); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/results/NextGraphReadSuccess.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/results/NextGraphReadSuccess.ts new file mode 100644 index 0000000..1d47168 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/results/NextGraphReadSuccess.ts @@ -0,0 +1,6 @@ +import { ReadSuccess } from "@ldo/connected"; +import type { NextGraphResource } from "../resources/NextGraphResource.js"; + +export class NextGraphReadSuccess extends ReadSuccess { + type = "nextGraphReadSuccess" as const; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/types.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/types.ts new file mode 100644 index 0000000..844cb60 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/types.ts @@ -0,0 +1,8 @@ +export type NextGraphUriPrefix = `did:ng`; + +/** + * A NextGraph is a URI that is valid in the NextGraph ecosystem + */ +// The & {} allows for alias preservation +// eslint-disable-next-line @typescript-eslint/ban-types +export type NextGraphUri = `${NextGraphUriPrefix}${string}` & {}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/util/NextGraphNotificationMessage.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/util/NextGraphNotificationMessage.ts new file mode 100644 index 0000000..ab25a75 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/util/NextGraphNotificationMessage.ts @@ -0,0 +1,15 @@ +export interface NextGraphNotificationMessage { + V0: { + State: { + graph: { + triples: AllowSharedBufferSource; + }; + }; + Patch: { + graph: { + inserts: AllowSharedBufferSource; + removes: AllowSharedBufferSource; + }; + }; + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/util/isNextGraphUri.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/util/isNextGraphUri.ts new file mode 100644 index 0000000..cc075b0 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/src/util/isNextGraphUri.ts @@ -0,0 +1,10 @@ +import type { NextGraphUri } from "../types.js"; + +/** + * Checks if a provided string is a leaf URI + * @param uri - the string to check + * @returns true if the string is a leaf URI + */ +export function isNextGraphUri(uri: string): uri is NextGraphUri { + return uri.startsWith("did:ng"); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/integration.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/integration.test.ts new file mode 100644 index 0000000..f99a769 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/integration.test.ts @@ -0,0 +1,162 @@ +import type { ConnectedLdoDataset } from "@ldo/connected"; +import ng from "nextgraph"; +import type { + NextGraphConnectedPlugin, + NextGraphResource, + NextGraphUri, +} from "../src/index.js"; +import { createNextGraphLdoDataset } from "../src/createNextGraphLdoDataset.js"; +import { parseRdf } from "@ldo/ldo"; +import { namedNode } from "@ldo/rdf-utils"; +import type { NextGraphReadSuccess } from "../src/results/NextGraphReadSuccess.js"; +import { rm, cp } from "fs/promises"; +import path from "path"; +import { describe, it, expect, beforeEach, afterAll } from "vitest"; + +const SAMPLE_TTL = `@base . +@prefix rdf: . +@prefix rdfs: . +@prefix foaf: . +@prefix rel: . + +<#green-goblin> + rel:enemyOf <#spiderman> ; + a foaf:Person ; # in the context of the Marvel universe + foaf:name "Green Goblin" . + +<#spiderman> + rel:enemyOf <#green-goblin> ; + a foaf:Person ; + foaf:name "Spiderman", "Человек-паук"@ru .`; + +describe("NextGraph Plugin", () => { + let nextgraphLdoDataset: ConnectedLdoDataset; + + beforeEach(async () => { + // Generate a wallet + const [wallet, mnemonic] = await ng.gen_wallet_for_test( + "lL2mo9Jtgz8yWN5PSaEMMftDGXyKJNbv9atQOygmeTcA", + ); + const openedWallet = await ng.wallet_open_with_mnemonic_words( + wallet.wallet, + mnemonic, + [1, 2, 1, 2], + ); + const userId = openedWallet.V0.personal_site; + const walletName = openedWallet.V0.wallet_id; + const session = await ng.session_in_memory_start(walletName, userId); + const sessionId = session.session_id; + const protectedStoreId = session.protected_store_id.substring(2, 46); + const publicStoreId = session.protected_store_id.substring(2, 46); + const privateStoreId = session.protected_store_id.substring(2, 46); + + // Get SessionId for that wallet + nextgraphLdoDataset = createNextGraphLdoDataset(); + nextgraphLdoDataset.setContext("nextgraph", { + ng, + sessionId, + protectedStoreId, + publicStoreId, + privateStoreId, + }); + }); + + afterAll(async () => { + const dataDir = path.resolve(__dirname, "./nextgraph-data"); + const backupDir = path.resolve(__dirname, "./nextgraph-data-backup"); + // Remove the existing data directory + await rm(dataDir, { recursive: true, force: true }); + // Copy the entire backup directory to data directory + await cp(backupDir, dataDir, { recursive: true }); + }); + + describe("createResource", () => { + it("creates a resource by assuming the protected store", async () => { + const resource = await nextgraphLdoDataset.createResource("nextgraph"); + expect(resource.isError).toBe(false); + const resourceAsR = resource as NextGraphResource; + expect(resourceAsR.uri).toBeDefined(); + expect(resourceAsR.isFetched()).toBe(true); + expect(resourceAsR.isPresent()).toBe(true); + }); + }); + + describe("read and subscribe", () => { + let populatedResourceUri: NextGraphUri; + beforeEach(async () => { + const resource = (await nextgraphLdoDataset.createResource( + "nextgraph", + )) as NextGraphResource; + await resource.update({ + added: await parseRdf(SAMPLE_TTL), + }); + nextgraphLdoDataset.forgetAllResources(); + nextgraphLdoDataset.deleteMatches( + undefined, + undefined, + undefined, + undefined, + ); + populatedResourceUri = resource.uri; + }); + + it("reads a resource that exists", async () => { + expect(nextgraphLdoDataset.size).toBe(0); + const resource = nextgraphLdoDataset.getResource(populatedResourceUri); + const result = await resource.read(); + expect(result.isError).toBe(false); + expect(result.type).toBe("nextGraphReadSuccess"); + expect(resource.isAbsent()).toBe(false); + expect(resource.isPresent()).toBe(true); + expect(resource.isLoading()).toBe(false); + expect(nextgraphLdoDataset.size).toBe(7); + expect( + nextgraphLdoDataset.match( + namedNode("http://example.org/#spiderman"), + namedNode("http://www.perceive.net/schemas/relationship/enemyOf"), + namedNode("http://example.org/#green-goblin"), + namedNode(resource.uri), + ).size, + ).toBe(1); + }); + + it("reads a resource that is absent", async () => { + const nuri = + "did:ng:o:W6GCQRfQkNTLtSS_2-QhKPJPkhEtLVh-B5lzpWMjGNEA:v:h8ViqyhCYMS2I6IKwPrY6UZi4ougUm1gpM4QnxlmNMQA"; + const resource = nextgraphLdoDataset.getResource(nuri); + const readResult = await resource.read(); + expect(resource.uri).toBe(nuri); + expect(readResult.type).toBe("nextGraphReadSuccess"); + expect(nextgraphLdoDataset.size).toBe(0); + expect(resource.isLoading()).toBe(false); + expect(resource.isAbsent()).toBe(true); + }); + + it("Reads a resource from memory.", async () => { + const resource = nextgraphLdoDataset.getResource(populatedResourceUri); + await resource.read(); + const result2 = await resource.readIfUnfetched(); + expect(result2.isError).toBe(false); + const result = result2 as NextGraphReadSuccess; + expect(result.type).toBe("nextGraphReadSuccess"); + expect(result.recalledFromMemory).toBe(true); + }); + + it("Subscribes to a resource", async () => { + const resource = nextgraphLdoDataset.getResource(populatedResourceUri); + await resource.subscribeToNotifications(); + // Wait for subscription + await new Promise((resolve) => setTimeout(resolve, 200)); + expect(nextgraphLdoDataset.size).toBe(7); + expect( + nextgraphLdoDataset.match( + namedNode("http://example.org/#spiderman"), + namedNode("http://www.perceive.net/schemas/relationship/enemyOf"), + namedNode("http://example.org/#green-goblin"), + namedNode(resource.uri), + ).size, + ).toBe(1); + await resource.unsubscribeFromAllNotifications(); + }); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/key b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/key new file mode 100644 index 0000000..b91b13d --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/key @@ -0,0 +1 @@ +NP0BsJO-Cc861xaBhxag9WJp7X3ja6dt-pmve5db4IoA \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/peer b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/peer new file mode 100644 index 0000000..b776068 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/peer @@ -0,0 +1 @@ +2ka-XkEYZauc2eLFUMZnZbqt41KWGZm19BVymq6RqzoA \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000004.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000004.log new file mode 100644 index 0000000..f81b713 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000004.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000010.sst b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000010.sst new file mode 100644 index 0000000..35a7c36 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000010.sst differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000011.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000011.log new file mode 100644 index 0000000..be0df8e Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000011.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000017.sst b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000017.sst new file mode 100644 index 0000000..8d8f30f Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000017.sst differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000018.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000018.log new file mode 100644 index 0000000..e215681 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000018.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000024.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000024.log new file mode 100644 index 0000000..6f98161 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/000024.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/CURRENT b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/CURRENT new file mode 100644 index 0000000..e612f13 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/CURRENT differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/IDENTITY b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/IDENTITY new file mode 100644 index 0000000..92be995 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/IDENTITY differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOCK b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG new file mode 100644 index 0000000..18bd92e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG @@ -0,0 +1,343 @@ +2025/03/30-11:04:47.344345 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:47.344366 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:47.344367 8029035584 DB SUMMARY +2025/03/30-11:04:47.344367 8029035584 DB Session ID: 5WJ1J1MXYEBJX1PPHEZ3 +2025/03/30-11:04:47.344401 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:47.344402 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:47.344404 8029035584 MANIFEST file: MANIFEST-000019 size: 391 Bytes +2025/03/30-11:04:47.344405 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts dir, Total Num: 2, files: 000010.sst 000017.sst +2025/03/30-11:04:47.344406 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts: 000004.log size: 113 ; 000011.log size: 114 ; 000018.log size: 0 ; +2025/03/30-11:04:47.344407 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:47.344407 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:47.344407 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:47.344408 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:47.344408 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:47.344409 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:47.344409 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:47.344409 8029035584 Options.env: 0x600000b74300 +2025/03/30-11:04:47.344410 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:47.344410 8029035584 Options.info_log: 0x11f707ea8 +2025/03/30-11:04:47.344411 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:47.344411 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:47.344412 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:47.344412 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:47.344412 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:47.344413 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:47.344413 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:47.344414 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:47.344414 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:47.344414 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:47.344415 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:47.344415 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:47.344416 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:47.344416 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:47.344416 8029035584 Options.db_log_dir: +2025/03/30-11:04:47.344417 8029035584 Options.wal_dir: +2025/03/30-11:04:47.344417 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:47.344418 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:47.344418 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:47.344418 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:47.344419 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:47.344419 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:47.344420 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:47.344420 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:47.344420 8029035584 Options.write_buffer_manager: 0x600001474340 +2025/03/30-11:04:47.344421 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:47.344421 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:47.344422 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:47.344422 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:47.344423 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:47.344423 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:47.344423 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:47.344424 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:47.344424 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:47.344425 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:47.344425 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:47.344425 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:47.344426 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:47.344426 8029035584 Options.row_cache: None +2025/03/30-11:04:47.344427 8029035584 Options.wal_filter: None +2025/03/30-11:04:47.344427 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:47.344427 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:47.344428 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:47.344428 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:47.344429 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:47.344429 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:47.344429 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:47.344430 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:47.344430 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:47.344431 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:47.344431 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:47.344431 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:47.344432 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:47.344432 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:47.344433 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:47.344433 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:47.344434 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:47.344434 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:47.344434 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:47.344435 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:47.344435 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:47.344436 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:47.344436 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:47.344436 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:47.344437 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:47.344437 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:47.344438 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:47.344438 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:47.344439 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:47.344439 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:47.344439 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:47.344440 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:47.344440 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:47.344441 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:47.344441 8029035584 Compression algorithms supported: +2025/03/30-11:04:47.344441 8029035584 kZSTD supported: 0 +2025/03/30-11:04:47.344442 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:47.344442 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:47.344443 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:47.344443 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:47.344444 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:47.344444 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:47.344445 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:47.344447 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:47.344448 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:47.344517 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts/MANIFEST-000019 +2025/03/30-11:04:47.344548 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:47.344549 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:47.344550 8029035584 Options.merge_operator: None +2025/03/30-11:04:47.344550 8029035584 Options.compaction_filter: None +2025/03/30-11:04:47.344551 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:47.344551 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:47.344552 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:47.344552 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:47.344558 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600002f4c100) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600001a70798 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:47.344559 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:47.344559 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:47.344560 8029035584 Options.compression: NoCompression +2025/03/30-11:04:47.344560 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:47.344561 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:47.344561 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:47.344562 8029035584 Options.num_levels: 7 +2025/03/30-11:04:47.344562 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:47.344563 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:47.344563 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:47.344563 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:47.344564 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:47.344564 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:47.344565 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.344565 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.344565 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.344566 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:47.344566 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.344567 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.344567 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:47.344568 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:47.344568 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:47.344568 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.344569 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.344569 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.344570 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.344570 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:47.344570 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.344571 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.344571 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.344572 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.344572 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:47.344572 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:47.344573 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.344573 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:47.344574 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.344574 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:47.344575 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:47.344575 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:47.344575 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:47.344576 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:47.344576 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:47.344577 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:47.344577 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.344577 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.344578 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.344578 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:47.344579 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.344579 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.344580 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:47.344580 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:47.344581 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:47.344581 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:47.344581 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:47.344583 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:47.344583 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:47.344583 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:47.344584 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:47.344584 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:47.344585 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:47.344585 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:47.344586 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:47.344586 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:47.344587 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:47.344587 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.344587 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:47.344588 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:47.344588 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:47.344589 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:47.344589 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:47.344589 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:47.344590 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:47.344590 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:47.344591 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:47.344591 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:47.344591 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:47.344592 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:47.344592 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:47.344593 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:47.344593 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:47.344594 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:47.344594 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.344594 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.344595 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.344595 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:47.344596 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.344596 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:47.344749 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts/MANIFEST-000019 succeeded,manifest_file_number is 19, next_file_number is 23, last_sequence is 3, log_number is 12,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:47.344750 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 12 +2025/03/30-11:04:47.344781 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 0e17eec6-49fd-4260-b9f6-242cf4d59760 +2025/03/30-11:04:47.344826 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087344824, "job": 1, "event": "recovery_started", "wal_files": [4, 11, 18]} +2025/03/30-11:04:47.344827 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:47.344847 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #11 mode 2 +2025/03/30-11:04:47.344868 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #18 mode 2 +2025/03/30-11:04:47.344921 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087344919, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:47.344965 8029035584 [db/version_set.cc:5369] Creating manifest 25 +2025/03/30-11:04:47.345761 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x11f708000 +2025/03/30-11:04:47.345780 8029035584 DB pointer 0x120020200 +2025/03/30-11:04:47.345788 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:47.346387 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:47.346388 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:47.346389 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:47.346389 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:47.346390 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:47.346390 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:47.346391 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:47.346391 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.346392 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:47.346392 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:47.346393 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:47.346393 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:47.346393 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:47.346394 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.346394 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.346395 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.346395 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.346396 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.346396 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.346397 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.346397 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:47.346397 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:47.346398 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.346398 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.346399 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:47.346399 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:47.346400 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:47.346401 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.346401 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:47.346401 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:47.346402 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:47.346402 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:47.346403 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.346403 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:47.346403 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:47.346404 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:47.346404 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:47.346405 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:47.346405 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:47.346406 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:47.346406 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:47.346407 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:47.346407 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:47.346407 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:47.346408 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:47.346408 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:47.346409 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:47.346409 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:47.346410 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.346410 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.346411 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.346411 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:47.346411 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:47.346412 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-11:04:50.347335 6198161408 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-11:04:50.347389 6198161408 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 3.0 total, 3.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 2/0 2.52 KB 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Sum 2/0 2.52 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 3.0 total, 3.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x600001a70798#98197 capacity: 64.00 MB seed: 152519891 usage: 0.88 KB table_size: 1024 occupancy: 5 collections: 1 last_copies: 0 last_secs: 0.000203 secs_since: 0 +Block cache entry stats(count,size,portion): FilterBlock(2,0.20 KB,0.000301003%) IndexBlock(2,0.26 KB,0.000399351%) Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG.old.1743346494643102 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG.old.1743346494643102 new file mode 100644 index 0000000..8ccb913 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG.old.1743346494643102 @@ -0,0 +1,300 @@ +2025/03/30-10:54:54.640132 8029035584 RocksDB version: 8.6.0 +2025/03/30-10:54:54.640157 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-10:54:54.640158 8029035584 DB SUMMARY +2025/03/30-10:54:54.640158 8029035584 DB Session ID: KY92ZR8LCBK63UYA6SDJ +2025/03/30-10:54:54.640183 8029035584 SST files in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts dir, Total Num: 0, files: +2025/03/30-10:54:54.640183 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts: +2025/03/30-10:54:54.640184 8029035584 Options.error_if_exists: 0 +2025/03/30-10:54:54.640185 8029035584 Options.create_if_missing: 1 +2025/03/30-10:54:54.640185 8029035584 Options.paranoid_checks: 1 +2025/03/30-10:54:54.640186 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-10:54:54.640186 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-10:54:54.640186 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-10:54:54.640187 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-10:54:54.640187 8029035584 Options.env: 0x6000035a8120 +2025/03/30-10:54:54.640188 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-10:54:54.640188 8029035584 Options.info_log: 0x12e705298 +2025/03/30-10:54:54.640189 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-10:54:54.640189 8029035584 Options.statistics: 0x0 +2025/03/30-10:54:54.640190 8029035584 Options.use_fsync: 0 +2025/03/30-10:54:54.640190 8029035584 Options.max_log_file_size: 0 +2025/03/30-10:54:54.640191 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-10:54:54.640191 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-10:54:54.640192 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-10:54:54.640192 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-10:54:54.640193 8029035584 Options.allow_fallocate: 1 +2025/03/30-10:54:54.640193 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-10:54:54.640194 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-10:54:54.640194 8029035584 Options.use_direct_reads: 0 +2025/03/30-10:54:54.640195 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-10:54:54.640195 8029035584 Options.create_missing_column_families: 1 +2025/03/30-10:54:54.640196 8029035584 Options.db_log_dir: +2025/03/30-10:54:54.640196 8029035584 Options.wal_dir: +2025/03/30-10:54:54.640197 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-10:54:54.640197 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-10:54:54.640198 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-10:54:54.640198 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-10:54:54.640198 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-10:54:54.640199 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-10:54:54.640199 8029035584 Options.advise_random_on_open: 1 +2025/03/30-10:54:54.640200 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-10:54:54.640200 8029035584 Options.write_buffer_manager: 0x600002ab9ba0 +2025/03/30-10:54:54.640201 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-10:54:54.640201 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-10:54:54.640202 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-10:54:54.640202 8029035584 Options.rate_limiter: 0x0 +2025/03/30-10:54:54.640203 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-10:54:54.640203 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-10:54:54.640204 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-10:54:54.640204 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-10:54:54.640205 8029035584 Options.unordered_write: 0 +2025/03/30-10:54:54.640205 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-10:54:54.640206 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-10:54:54.640206 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-10:54:54.640207 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-10:54:54.640207 8029035584 Options.row_cache: None +2025/03/30-10:54:54.640208 8029035584 Options.wal_filter: None +2025/03/30-10:54:54.640208 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-10:54:54.640209 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-10:54:54.640209 8029035584 Options.two_write_queues: 0 +2025/03/30-10:54:54.640210 8029035584 Options.manual_wal_flush: 0 +2025/03/30-10:54:54.640210 8029035584 Options.wal_compression: 0 +2025/03/30-10:54:54.640211 8029035584 Options.atomic_flush: 0 +2025/03/30-10:54:54.640211 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-10:54:54.640212 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-10:54:54.640212 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-10:54:54.640212 8029035584 Options.log_readahead_size: 0 +2025/03/30-10:54:54.640213 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-10:54:54.640214 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-10:54:54.640214 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-10:54:54.640215 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-10:54:54.640215 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-10:54:54.640215 8029035584 Options.db_host_id: __hostname__ +2025/03/30-10:54:54.640216 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-10:54:54.640216 8029035584 Options.max_background_jobs: 12 +2025/03/30-10:54:54.640217 8029035584 Options.max_background_compactions: -1 +2025/03/30-10:54:54.640217 8029035584 Options.max_subcompactions: 1 +2025/03/30-10:54:54.640218 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-10:54:54.640218 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-10:54:54.640219 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-10:54:54.640219 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-10:54:54.640220 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-10:54:54.640220 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-10:54:54.640221 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-10:54:54.640221 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-10:54:54.640222 8029035584 Options.max_open_files: -1 +2025/03/30-10:54:54.640222 8029035584 Options.bytes_per_sync: 0 +2025/03/30-10:54:54.640223 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-10:54:54.640223 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-10:54:54.640224 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-10:54:54.640224 8029035584 Options.max_background_flushes: -1 +2025/03/30-10:54:54.640225 8029035584 Compression algorithms supported: +2025/03/30-10:54:54.640225 8029035584 kZSTD supported: 0 +2025/03/30-10:54:54.640226 8029035584 kZlibCompression supported: 0 +2025/03/30-10:54:54.640226 8029035584 kXpressCompression supported: 0 +2025/03/30-10:54:54.640227 8029035584 kSnappyCompression supported: 0 +2025/03/30-10:54:54.640227 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-10:54:54.640228 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-10:54:54.640228 8029035584 kLZ4Compression supported: 0 +2025/03/30-10:54:54.640229 8029035584 kBZip2Compression supported: 0 +2025/03/30-10:54:54.640232 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-10:54:54.640233 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-10:54:54.640459 8029035584 [db/db_impl/db_impl_open.cc:319] Creating manifest 1 +2025/03/30-10:54:54.640757 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts/MANIFEST-000001 +2025/03/30-10:54:54.640779 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-10:54:54.640779 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-10:54:54.640780 8029035584 Options.merge_operator: None +2025/03/30-10:54:54.640780 8029035584 Options.compaction_filter: None +2025/03/30-10:54:54.640781 8029035584 Options.compaction_filter_factory: None +2025/03/30-10:54:54.640782 8029035584 Options.sst_partitioner_factory: None +2025/03/30-10:54:54.640782 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-10:54:54.640782 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-10:54:54.640790 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001192360) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x6000024a43d8 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-10:54:54.640791 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-10:54:54.640792 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-10:54:54.640792 8029035584 Options.compression: NoCompression +2025/03/30-10:54:54.640793 8029035584 Options.bottommost_compression: Disabled +2025/03/30-10:54:54.640793 8029035584 Options.prefix_extractor: nullptr +2025/03/30-10:54:54.640794 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-10:54:54.640794 8029035584 Options.num_levels: 7 +2025/03/30-10:54:54.640795 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-10:54:54.640795 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-10:54:54.640796 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-10:54:54.640796 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-10:54:54.640797 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-10:54:54.640797 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-10:54:54.640798 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.640798 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.640799 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.640799 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-10:54:54.640800 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.640800 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.640801 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-10:54:54.640801 8029035584 Options.compression_opts.level: 32767 +2025/03/30-10:54:54.640802 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-10:54:54.640802 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.640802 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.640803 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.640803 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.640804 8029035584 Options.compression_opts.enabled: false +2025/03/30-10:54:54.640804 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.640805 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.640805 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.640806 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.640806 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-10:54:54.640807 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-10:54:54.640807 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.640808 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-10:54:54.640808 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.640809 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-10:54:54.640809 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-10:54:54.640810 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-10:54:54.640810 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-10:54:54.640811 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-10:54:54.640811 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-10:54:54.640812 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-10:54:54.640812 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.640813 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.640813 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.640814 8029035584 Options.arena_block_size: 1048576 +2025/03/30-10:54:54.640814 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.640815 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.640815 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-10:54:54.640816 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-10:54:54.640816 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-10:54:54.640817 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-10:54:54.640817 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-10:54:54.640818 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-10:54:54.640818 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-10:54:54.640819 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-10:54:54.640820 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-10:54:54.640821 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-10:54:54.640821 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-10:54:54.640822 8029035584 Options.table_properties_collectors: +2025/03/30-10:54:54.640822 8029035584 Options.inplace_update_support: 0 +2025/03/30-10:54:54.640823 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-10:54:54.640823 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-10:54:54.640824 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.640824 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-10:54:54.640825 8029035584 Options.bloom_locality: 0 +2025/03/30-10:54:54.640825 8029035584 Options.max_successive_merges: 0 +2025/03/30-10:54:54.640826 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-10:54:54.640826 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-10:54:54.640827 8029035584 Options.force_consistency_checks: 1 +2025/03/30-10:54:54.640827 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-10:54:54.640828 8029035584 Options.ttl: 2592000 +2025/03/30-10:54:54.640828 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-10:54:54.640829 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-10:54:54.640829 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-10:54:54.640829 8029035584 Options.enable_blob_files: false +2025/03/30-10:54:54.640830 8029035584 Options.min_blob_size: 0 +2025/03/30-10:54:54.640830 8029035584 Options.blob_file_size: 268435456 +2025/03/30-10:54:54.640831 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-10:54:54.640831 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-10:54:54.640832 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.640832 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.640833 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.640833 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-10:54:54.640834 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.640834 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-10:54:54.640978 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-10:54:54.640980 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-10:54:54.641007 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 0e17eec6-49fd-4260-b9f6-242cf4d59760 +2025/03/30-10:54:54.641141 8029035584 [db/version_set.cc:5369] Creating manifest 5 +2025/03/30-10:54:54.642055 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12e70d880 +2025/03/30-10:54:54.642081 8029035584 DB pointer 0x139044c00 +2025/03/30-10:54:54.642089 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-10:54:54.642640 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-10:54:54.642641 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-10:54:54.642642 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-10:54:54.642643 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-10:54:54.642643 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-10:54:54.642644 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-10:54:54.642644 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-10:54:54.642645 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.642645 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-10:54:54.642646 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-10:54:54.642646 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-10:54:54.642647 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-10:54:54.642648 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-10:54:54.642648 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.642649 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.642649 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.642650 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.642650 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.642651 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.642651 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.642652 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-10:54:54.642652 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-10:54:54.642653 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.642653 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.642654 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-10:54:54.642655 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-10:54:54.642656 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-10:54:54.642656 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.642657 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-10:54:54.642657 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-10:54:54.642658 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-10:54:54.642658 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-10:54:54.642659 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.642659 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-10:54:54.642660 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-10:54:54.642660 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-10:54:54.642661 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-10:54:54.642661 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-10:54:54.642662 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-10:54:54.642662 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-10:54:54.642663 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-10:54:54.642663 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-10:54:54.642664 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-10:54:54.642665 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-10:54:54.642665 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-10:54:54.642666 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-10:54:54.642666 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-10:54:54.642667 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-10:54:54.642667 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.642668 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.642668 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.642669 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-10:54:54.642669 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-10:54:54.642670 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-10:54:54.642872 8029035584 [db/db_impl/db_impl.cc:496] Shutdown: canceling all background work +2025/03/30-10:54:54.642977 8029035584 [db/db_impl/db_impl.cc:698] Shutdown complete diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG.old.1743347058134969 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG.old.1743347058134969 new file mode 100644 index 0000000..cfc1df2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG.old.1743347058134969 @@ -0,0 +1,343 @@ +2025/03/30-10:54:54.643263 8029035584 RocksDB version: 8.6.0 +2025/03/30-10:54:54.643289 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-10:54:54.643289 8029035584 DB SUMMARY +2025/03/30-10:54:54.643290 8029035584 DB Session ID: KY92ZR8LCBK63UYA6SDG +2025/03/30-10:54:54.643339 8029035584 CURRENT file: CURRENT +2025/03/30-10:54:54.643340 8029035584 IDENTITY file: IDENTITY +2025/03/30-10:54:54.643343 8029035584 MANIFEST file: MANIFEST-000005 size: 83 Bytes +2025/03/30-10:54:54.643344 8029035584 SST files in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts dir, Total Num: 0, files: +2025/03/30-10:54:54.643345 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts: 000004.log size: 113 ; +2025/03/30-10:54:54.643346 8029035584 Options.error_if_exists: 0 +2025/03/30-10:54:54.643347 8029035584 Options.create_if_missing: 1 +2025/03/30-10:54:54.643347 8029035584 Options.paranoid_checks: 1 +2025/03/30-10:54:54.643348 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-10:54:54.643348 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-10:54:54.643349 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-10:54:54.643349 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-10:54:54.643350 8029035584 Options.env: 0x6000035a84e0 +2025/03/30-10:54:54.643350 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-10:54:54.643351 8029035584 Options.info_log: 0x12e705298 +2025/03/30-10:54:54.643351 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-10:54:54.643352 8029035584 Options.statistics: 0x0 +2025/03/30-10:54:54.643352 8029035584 Options.use_fsync: 0 +2025/03/30-10:54:54.643353 8029035584 Options.max_log_file_size: 0 +2025/03/30-10:54:54.643353 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-10:54:54.643354 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-10:54:54.643354 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-10:54:54.643355 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-10:54:54.643355 8029035584 Options.allow_fallocate: 1 +2025/03/30-10:54:54.643356 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-10:54:54.643356 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-10:54:54.643357 8029035584 Options.use_direct_reads: 0 +2025/03/30-10:54:54.643357 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-10:54:54.643358 8029035584 Options.create_missing_column_families: 1 +2025/03/30-10:54:54.643358 8029035584 Options.db_log_dir: +2025/03/30-10:54:54.643359 8029035584 Options.wal_dir: +2025/03/30-10:54:54.643359 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-10:54:54.643360 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-10:54:54.643360 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-10:54:54.643361 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-10:54:54.643361 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-10:54:54.643362 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-10:54:54.643362 8029035584 Options.advise_random_on_open: 1 +2025/03/30-10:54:54.643363 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-10:54:54.643363 8029035584 Options.write_buffer_manager: 0x600002ab9ba0 +2025/03/30-10:54:54.643364 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-10:54:54.643364 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-10:54:54.643365 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-10:54:54.643365 8029035584 Options.rate_limiter: 0x0 +2025/03/30-10:54:54.643366 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-10:54:54.643366 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-10:54:54.643367 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-10:54:54.643367 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-10:54:54.643368 8029035584 Options.unordered_write: 0 +2025/03/30-10:54:54.643368 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-10:54:54.643369 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-10:54:54.643369 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-10:54:54.643370 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-10:54:54.643370 8029035584 Options.row_cache: None +2025/03/30-10:54:54.643371 8029035584 Options.wal_filter: None +2025/03/30-10:54:54.643371 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-10:54:54.643372 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-10:54:54.643373 8029035584 Options.two_write_queues: 0 +2025/03/30-10:54:54.643373 8029035584 Options.manual_wal_flush: 0 +2025/03/30-10:54:54.643373 8029035584 Options.wal_compression: 0 +2025/03/30-10:54:54.643374 8029035584 Options.atomic_flush: 0 +2025/03/30-10:54:54.643374 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-10:54:54.643375 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-10:54:54.643375 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-10:54:54.643376 8029035584 Options.log_readahead_size: 0 +2025/03/30-10:54:54.643376 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-10:54:54.643377 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-10:54:54.643377 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-10:54:54.643378 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-10:54:54.643379 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-10:54:54.643379 8029035584 Options.db_host_id: __hostname__ +2025/03/30-10:54:54.643380 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-10:54:54.643380 8029035584 Options.max_background_jobs: 12 +2025/03/30-10:54:54.643381 8029035584 Options.max_background_compactions: -1 +2025/03/30-10:54:54.643381 8029035584 Options.max_subcompactions: 1 +2025/03/30-10:54:54.643382 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-10:54:54.643382 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-10:54:54.643383 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-10:54:54.643383 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-10:54:54.643384 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-10:54:54.643384 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-10:54:54.643385 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-10:54:54.643385 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-10:54:54.643386 8029035584 Options.max_open_files: -1 +2025/03/30-10:54:54.643386 8029035584 Options.bytes_per_sync: 0 +2025/03/30-10:54:54.643387 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-10:54:54.643387 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-10:54:54.643388 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-10:54:54.643388 8029035584 Options.max_background_flushes: -1 +2025/03/30-10:54:54.643389 8029035584 Compression algorithms supported: +2025/03/30-10:54:54.643389 8029035584 kZSTD supported: 0 +2025/03/30-10:54:54.643390 8029035584 kZlibCompression supported: 0 +2025/03/30-10:54:54.643390 8029035584 kXpressCompression supported: 0 +2025/03/30-10:54:54.643391 8029035584 kSnappyCompression supported: 0 +2025/03/30-10:54:54.643391 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-10:54:54.643392 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-10:54:54.643392 8029035584 kLZ4Compression supported: 0 +2025/03/30-10:54:54.643393 8029035584 kBZip2Compression supported: 0 +2025/03/30-10:54:54.643396 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-10:54:54.643397 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-10:54:54.643477 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts/MANIFEST-000005 +2025/03/30-10:54:54.643499 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-10:54:54.643500 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-10:54:54.643501 8029035584 Options.merge_operator: None +2025/03/30-10:54:54.643501 8029035584 Options.compaction_filter: None +2025/03/30-10:54:54.643502 8029035584 Options.compaction_filter_factory: None +2025/03/30-10:54:54.643502 8029035584 Options.sst_partitioner_factory: None +2025/03/30-10:54:54.643503 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-10:54:54.643503 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-10:54:54.643509 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001192e60) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x6000024a4198 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-10:54:54.643510 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-10:54:54.643510 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-10:54:54.643511 8029035584 Options.compression: NoCompression +2025/03/30-10:54:54.643511 8029035584 Options.bottommost_compression: Disabled +2025/03/30-10:54:54.643512 8029035584 Options.prefix_extractor: nullptr +2025/03/30-10:54:54.643512 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-10:54:54.643513 8029035584 Options.num_levels: 7 +2025/03/30-10:54:54.643513 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-10:54:54.643514 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-10:54:54.643514 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-10:54:54.643515 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-10:54:54.643515 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-10:54:54.643516 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-10:54:54.643516 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.643517 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.643517 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.643518 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-10:54:54.643518 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.643519 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.643519 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-10:54:54.643520 8029035584 Options.compression_opts.level: 32767 +2025/03/30-10:54:54.643521 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-10:54:54.643521 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.643521 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.643522 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.643523 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.643523 8029035584 Options.compression_opts.enabled: false +2025/03/30-10:54:54.643524 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.643524 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.643525 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.643525 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.643525 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-10:54:54.643526 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-10:54:54.643526 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.643527 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-10:54:54.643527 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.643528 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-10:54:54.643529 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-10:54:54.643529 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-10:54:54.643530 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-10:54:54.643530 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-10:54:54.643531 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-10:54:54.643531 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-10:54:54.643532 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.643532 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.643533 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.643533 8029035584 Options.arena_block_size: 1048576 +2025/03/30-10:54:54.643534 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.643534 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.643535 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-10:54:54.643535 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-10:54:54.643536 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-10:54:54.643536 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-10:54:54.643537 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-10:54:54.643537 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-10:54:54.643538 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-10:54:54.643538 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-10:54:54.643539 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-10:54:54.643539 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-10:54:54.643540 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-10:54:54.643541 8029035584 Options.table_properties_collectors: +2025/03/30-10:54:54.643541 8029035584 Options.inplace_update_support: 0 +2025/03/30-10:54:54.643542 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-10:54:54.643542 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-10:54:54.643543 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.643543 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-10:54:54.643544 8029035584 Options.bloom_locality: 0 +2025/03/30-10:54:54.643544 8029035584 Options.max_successive_merges: 0 +2025/03/30-10:54:54.643545 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-10:54:54.643545 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-10:54:54.643546 8029035584 Options.force_consistency_checks: 1 +2025/03/30-10:54:54.643546 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-10:54:54.643547 8029035584 Options.ttl: 2592000 +2025/03/30-10:54:54.643547 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-10:54:54.643548 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-10:54:54.643548 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-10:54:54.643549 8029035584 Options.enable_blob_files: false +2025/03/30-10:54:54.643549 8029035584 Options.min_blob_size: 0 +2025/03/30-10:54:54.643550 8029035584 Options.blob_file_size: 268435456 +2025/03/30-10:54:54.643550 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-10:54:54.643551 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-10:54:54.643551 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.643552 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.643552 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.643553 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-10:54:54.643553 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.643554 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-10:54:54.643742 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts/MANIFEST-000005 succeeded,manifest_file_number is 5, next_file_number is 9, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-10:54:54.643744 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-10:54:54.643777 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 0e17eec6-49fd-4260-b9f6-242cf4d59760 +2025/03/30-10:54:54.643848 8029035584 EVENT_LOG_v1 {"time_micros": 1743346494643845, "job": 1, "event": "recovery_started", "wal_files": [4]} +2025/03/30-10:54:54.643850 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-10:54:54.644234 8029035584 EVENT_LOG_v1 {"time_micros": 1743346494644222, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 10, "file_size": 1295, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 1, "largest_seqno": 1, "table_properties": {"data_size": 114, "index_size": 51, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 69, "raw_key_size": 42, "raw_average_key_size": 42, "raw_value_size": 56, "raw_average_value_size": 56, "num_data_blocks": 1, "num_entries": 1, "num_filter_entries": 1, "num_deletions": 0, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "bloomfilter", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "NoCompression", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1743346494, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "0e17eec6-49fd-4260-b9f6-242cf4d59760", "db_session_id": "KY92ZR8LCBK63UYA6SDG", "orig_file_number": 10, "seqno_to_time_mapping": "N/A"}} +2025/03/30-10:54:54.644309 8029035584 EVENT_LOG_v1 {"time_micros": 1743346494644308, "job": 1, "event": "recovery_finished"} +2025/03/30-10:54:54.644364 8029035584 [db/version_set.cc:5369] Creating manifest 12 +2025/03/30-10:54:54.645173 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12e70d880 +2025/03/30-10:54:54.645192 8029035584 DB pointer 0x139044c00 +2025/03/30-10:54:54.645199 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-10:54:54.645724 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-10:54:54.645725 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-10:54:54.645726 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-10:54:54.645726 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-10:54:54.645727 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-10:54:54.645727 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-10:54:54.645728 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-10:54:54.645728 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.645729 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-10:54:54.645730 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-10:54:54.645730 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-10:54:54.645731 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-10:54:54.645731 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-10:54:54.645732 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.645732 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.645733 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.645733 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.645734 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.645734 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.645735 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.645735 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-10:54:54.645736 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-10:54:54.645736 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.645737 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.645738 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-10:54:54.645738 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-10:54:54.645739 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-10:54:54.645740 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.645740 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-10:54:54.645741 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-10:54:54.645741 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-10:54:54.645742 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-10:54:54.645742 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.645743 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-10:54:54.645744 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-10:54:54.645744 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-10:54:54.645745 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-10:54:54.645745 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-10:54:54.645746 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-10:54:54.645746 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-10:54:54.645747 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-10:54:54.645747 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-10:54:54.645748 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-10:54:54.645748 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-10:54:54.645749 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-10:54:54.645749 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-10:54:54.645750 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-10:54:54.645750 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-10:54:54.645751 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.645752 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.645752 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.645753 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-10:54:54.645753 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-10:54:54.645754 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-10:55:00.650345 6142537728 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-10:55:00.650415 6142537728 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 6.0 total, 6.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 1/0 1.26 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.3 0.00 0.00 1 0.000 0 0 0.0 0.0 + Sum 1/0 1.26 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.3 0.00 0.00 1 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.3 0.00 0.00 1 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +User 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.3 0.00 0.00 1 0.000 0 0 0.0 0.0 + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 6.0 total, 6.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x6000024a4198#97224 capacity: 64.00 MB seed: 152519891 usage: 0.48 KB table_size: 1024 occupancy: 3 collections: 1 last_copies: 0 last_secs: 4.4e-05 secs_since: 0 +Block cache entry stats(count,size,portion): FilterBlock(1,0.10 KB,0.000150502%) IndexBlock(1,0.13 KB,0.000199676%) Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG.old.1743347087344217 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG.old.1743347087344217 new file mode 100644 index 0000000..7776ded --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/LOG.old.1743347087344217 @@ -0,0 +1,305 @@ +2025/03/30-11:04:18.135145 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:18.135177 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:18.135178 8029035584 DB SUMMARY +2025/03/30-11:04:18.135179 8029035584 DB Session ID: 7MUCSF891X500MQRN1NG +2025/03/30-11:04:18.135210 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:18.135211 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:18.135215 8029035584 MANIFEST file: MANIFEST-000012 size: 251 Bytes +2025/03/30-11:04:18.135216 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts dir, Total Num: 1, files: 000010.sst +2025/03/30-11:04:18.135217 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts: 000004.log size: 113 ; 000011.log size: 114 ; +2025/03/30-11:04:18.135219 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:18.135220 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:18.135220 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:18.135221 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:18.135222 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:18.135222 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:18.135223 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:18.135224 8029035584 Options.env: 0x600003b9c720 +2025/03/30-11:04:18.135225 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:18.135226 8029035584 Options.info_log: 0x12d3075a8 +2025/03/30-11:04:18.135226 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:18.135227 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:18.135228 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:18.135229 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:18.135229 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:18.135230 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:18.135231 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:18.135232 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:18.135232 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:18.135233 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:18.135234 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:18.135235 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:18.135235 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:18.135236 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:18.135237 8029035584 Options.db_log_dir: +2025/03/30-11:04:18.135237 8029035584 Options.wal_dir: +2025/03/30-11:04:18.135238 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:18.135239 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:18.135240 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:18.135240 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:18.135241 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:18.135242 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:18.135243 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:18.135243 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:18.135244 8029035584 Options.write_buffer_manager: 0x60000249c680 +2025/03/30-11:04:18.135245 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:18.135245 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:18.135246 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:18.135247 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:18.135248 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:18.135248 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:18.135249 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:18.135250 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:18.135251 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:18.135251 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:18.135252 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:18.135253 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:18.135254 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:18.135254 8029035584 Options.row_cache: None +2025/03/30-11:04:18.135255 8029035584 Options.wal_filter: None +2025/03/30-11:04:18.135256 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:18.135257 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:18.135257 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:18.135258 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:18.135259 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:18.135260 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:18.135260 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:18.135261 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:18.135262 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:18.135263 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:18.135263 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:18.135264 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:18.135265 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:18.135266 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:18.135266 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:18.135267 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:18.135268 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:18.135269 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:18.135269 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:18.135270 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:18.135271 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:18.135272 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:18.135272 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:18.135273 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:18.135274 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:18.135275 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:18.135276 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:18.135276 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:18.135277 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:18.135278 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:18.135279 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:18.135279 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:18.135280 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:18.135281 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:18.135282 8029035584 Compression algorithms supported: +2025/03/30-11:04:18.135282 8029035584 kZSTD supported: 0 +2025/03/30-11:04:18.135283 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:18.135284 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:18.135285 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:18.135286 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:18.135286 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:18.135287 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:18.135288 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:18.135292 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:18.135293 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:18.135536 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts/MANIFEST-000012 +2025/03/30-11:04:18.135734 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:18.135735 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:18.135735 8029035584 Options.merge_operator: None +2025/03/30-11:04:18.135736 8029035584 Options.compaction_filter: None +2025/03/30-11:04:18.135736 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:18.135737 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:18.135737 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:18.135738 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:18.135745 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001fccce0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600002a98858 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:18.135746 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:18.135746 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:18.135747 8029035584 Options.compression: NoCompression +2025/03/30-11:04:18.135747 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:18.135748 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:18.135748 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:18.135749 8029035584 Options.num_levels: 7 +2025/03/30-11:04:18.135749 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:18.135750 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:18.135750 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:18.135751 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:18.135751 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:18.135752 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:18.135752 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.135753 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.135753 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.135754 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:18.135754 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.135755 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.135755 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:18.135756 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:18.135756 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:18.135757 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.135757 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.135758 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.135758 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.135759 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:18.135759 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.135760 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.135760 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.135761 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.135761 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:18.135761 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:18.135762 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.135762 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:18.135763 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.135763 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:18.135764 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:18.135764 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:18.135765 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:18.135765 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:18.135766 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:18.135766 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:18.135767 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.135767 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.135768 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.135768 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:18.135769 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.135769 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.135770 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:18.135770 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:18.135771 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:18.135771 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:18.135772 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:18.135773 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:18.135774 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:18.135774 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:18.135775 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:18.135776 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:18.135776 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:18.135777 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:18.135777 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:18.135778 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:18.135778 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:18.135779 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.135779 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:18.135780 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:18.135780 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:18.135781 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:18.135781 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:18.135781 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:18.135782 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:18.135782 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:18.135783 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:18.135783 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:18.135784 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:18.135784 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:18.135785 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:18.135785 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:18.135786 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:18.135786 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:18.135787 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.135787 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.135788 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.135788 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:18.135789 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.135789 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:18.136002 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts/MANIFEST-000012 succeeded,manifest_file_number is 12, next_file_number is 16, last_sequence is 1, log_number is 5,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:18.136004 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 5 +2025/03/30-11:04:18.136069 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 0e17eec6-49fd-4260-b9f6-242cf4d59760 +2025/03/30-11:04:18.136146 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058136144, "job": 1, "event": "recovery_started", "wal_files": [4, 11]} +2025/03/30-11:04:18.136148 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:18.136309 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #11 mode 2 +2025/03/30-11:04:18.136749 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058136738, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 17, "file_size": 1285, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 2, "largest_seqno": 3, "table_properties": {"data_size": 104, "index_size": 51, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 69, "raw_key_size": 84, "raw_average_key_size": 42, "raw_value_size": 1, "raw_average_value_size": 0, "num_data_blocks": 1, "num_entries": 2, "num_filter_entries": 2, "num_deletions": 1, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "bloomfilter", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "NoCompression", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1743347058, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "0e17eec6-49fd-4260-b9f6-242cf4d59760", "db_session_id": "7MUCSF891X500MQRN1NG", "orig_file_number": 17, "seqno_to_time_mapping": "N/A"}} +2025/03/30-11:04:18.136815 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058136814, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:18.136870 8029035584 [db/version_set.cc:5369] Creating manifest 19 +2025/03/30-11:04:18.137963 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12d309720 +2025/03/30-11:04:18.137992 8029035584 DB pointer 0x12f035600 +2025/03/30-11:04:18.138005 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:18.138851 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:18.138853 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:18.138854 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:18.138854 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:18.138855 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:18.138856 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:18.138857 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:18.138858 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.138858 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:18.138859 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:18.138860 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:18.138861 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:18.138861 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:18.138862 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.138863 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.138864 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.138864 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.138865 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.138866 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.138866 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.138867 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:18.138868 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:18.138869 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.138869 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.138870 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:18.138871 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:18.138872 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:18.138873 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.138874 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:18.138875 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:18.138875 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:18.138876 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:18.138877 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.138878 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:18.138878 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:18.138879 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:18.138880 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:18.138880 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:18.138881 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:18.138882 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:18.138883 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:18.138883 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:18.138884 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:18.138885 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:18.138886 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:18.138886 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:18.138887 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:18.138888 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:18.138888 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.138889 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.138890 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.138891 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:18.138891 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:18.138892 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/MANIFEST-000025 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/MANIFEST-000025 new file mode 100644 index 0000000..dcd60a2 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/MANIFEST-000025 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/OPTIONS-000027 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/OPTIONS-000027 new file mode 100644 index 0000000..b652a88 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/OPTIONS-000027 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/OPTIONS-000029 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/OPTIONS-000029 new file mode 100644 index 0000000..b8265ec Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/accounts/OPTIONS-000029 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000004.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000004.log new file mode 100644 index 0000000..dd08dc7 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000004.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000010.sst b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000010.sst new file mode 100644 index 0000000..f224627 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000010.sst differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000011.blob b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000011.blob new file mode 100644 index 0000000..1eb3db2 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000011.blob differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000012.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000012.log new file mode 100644 index 0000000..1da77dd Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000012.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000018.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000018.log new file mode 100644 index 0000000..ddbfbfe Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/000018.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/CURRENT b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/CURRENT new file mode 100644 index 0000000..549badf Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/CURRENT differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/IDENTITY b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/IDENTITY new file mode 100644 index 0000000..d986164 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/IDENTITY differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOCK b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOG b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOG new file mode 100644 index 0000000..d234bde --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOG @@ -0,0 +1,332 @@ +2025/03/30-11:04:47.346610 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:47.346632 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:47.346633 8029035584 DB SUMMARY +2025/03/30-11:04:47.346633 8029035584 DB Session ID: 5WJ1J1MXYEBJX1PPHEZ0 +2025/03/30-11:04:47.346668 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:47.346669 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:47.346672 8029035584 MANIFEST file: MANIFEST-000013 size: 328 Bytes +2025/03/30-11:04:47.346673 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks dir, Total Num: 1, files: 000010.sst +2025/03/30-11:04:47.346674 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks: 000004.log size: 31088 ; 000012.log size: 0 ; +2025/03/30-11:04:47.346675 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:47.346675 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:47.346676 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:47.346676 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:47.346676 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:47.346677 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:47.346677 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:47.346678 8029035584 Options.env: 0x600000b7d980 +2025/03/30-11:04:47.346678 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:47.346679 8029035584 Options.info_log: 0x11f607658 +2025/03/30-11:04:47.346679 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:47.346680 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:47.346680 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:47.346681 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:47.346681 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:47.346682 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:47.346682 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:47.346682 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:47.346683 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:47.346683 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:47.346684 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:47.346684 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:47.346685 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:47.346685 8029035584 Options.create_missing_column_families: 0 +2025/03/30-11:04:47.346686 8029035584 Options.db_log_dir: +2025/03/30-11:04:47.346686 8029035584 Options.wal_dir: +2025/03/30-11:04:47.346687 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:47.346687 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:47.346687 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:47.346688 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:47.346688 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:47.346689 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:47.346689 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:47.346690 8029035584 Options.db_write_buffer_size: 0 +2025/03/30-11:04:47.346690 8029035584 Options.write_buffer_manager: 0x60000147e700 +2025/03/30-11:04:47.346691 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:47.346691 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:47.346692 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:47.346692 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:47.346693 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:47.346693 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:47.346693 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:47.346694 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:47.346694 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:47.346695 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:47.346695 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:47.346696 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:47.346696 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:47.346697 8029035584 Options.row_cache: None +2025/03/30-11:04:47.346697 8029035584 Options.wal_filter: None +2025/03/30-11:04:47.346698 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:47.346698 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:47.346698 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:47.346699 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:47.346699 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:47.346700 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:47.346700 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:47.346701 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:47.346701 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:47.346702 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:47.346702 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:47.346702 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:47.346703 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:47.346703 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:47.346704 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:47.346704 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:47.346705 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:47.346705 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:47.346706 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:47.346706 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:47.346707 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:47.346707 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:47.346708 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:47.346708 8029035584 Options.max_total_wal_size: 268435456 +2025/03/30-11:04:47.346708 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:47.346709 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:47.346709 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:47.346710 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:47.346710 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:47.346711 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:47.346711 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:47.346712 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:47.346712 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:47.346713 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:47.346713 8029035584 Compression algorithms supported: +2025/03/30-11:04:47.346714 8029035584 kZSTD supported: 0 +2025/03/30-11:04:47.346714 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:47.346715 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:47.346715 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:47.346716 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:47.346716 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:47.346717 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:47.346717 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:47.346721 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:47.346721 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:47.346804 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks/MANIFEST-000013 +2025/03/30-11:04:47.346841 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:47.346842 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:47.346842 8029035584 Options.merge_operator: None +2025/03/30-11:04:47.346843 8029035584 Options.compaction_filter: None +2025/03/30-11:04:47.346843 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:47.346844 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:47.346844 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:47.346845 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:47.346850 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600002f65520) + cache_index_and_filter_blocks: 0 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 0 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 1 + block_cache: 0x0 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:47.346850 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:47.346851 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:47.346851 8029035584 Options.compression: NoCompression +2025/03/30-11:04:47.346852 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:47.346852 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:47.346853 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:47.346853 8029035584 Options.num_levels: 7 +2025/03/30-11:04:47.346854 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:47.346854 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:47.346855 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:47.346855 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:47.346855 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:47.346856 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:47.346856 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.346857 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.346857 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.346858 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:47.346858 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.346859 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.346859 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:47.346860 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:47.346860 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:47.346861 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.346861 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.346862 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.346862 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.346862 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:47.346863 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.346863 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.346864 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.346864 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.346865 8029035584 Options.target_file_size_base: 1048576 +2025/03/30-11:04:47.346865 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:47.346866 8029035584 Options.max_bytes_for_level_base: 16777216 +2025/03/30-11:04:47.346866 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:47.346867 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.346867 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:47.346868 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:47.346868 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:47.346869 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:47.346869 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:47.346870 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:47.346870 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:47.346870 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.346871 8029035584 Options.max_compaction_bytes: 26214400 +2025/03/30-11:04:47.346871 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.346872 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:47.346872 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.346873 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.346873 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:47.346874 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:47.346874 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:47.346875 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:47.346875 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:47.346876 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:47.346876 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:47.346877 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:47.346878 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:47.346879 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:47.346879 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:47.346880 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:47.346880 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:47.346881 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:47.346881 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:47.346881 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.346882 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:47.346882 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:47.346883 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:47.346883 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:47.346884 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:47.346884 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:47.346885 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:47.346885 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:47.346886 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:47.346886 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:47.346886 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:47.346887 8029035584 Options.enable_blob_files: true +2025/03/30-11:04:47.346887 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:47.346888 8029035584 Options.blob_file_size: 16777216 +2025/03/30-11:04:47.346888 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:47.346889 8029035584 Options.enable_blob_garbage_collection: true +2025/03/30-11:04:47.346889 8029035584 Options.blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-11:04:47.346890 8029035584 Options.blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-11:04:47.346890 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.346891 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:47.346891 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.346892 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:47.347037 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks/MANIFEST-000013 succeeded,manifest_file_number is 13, next_file_number is 17, last_sequence is 89, log_number is 5,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:47.347039 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 5 +2025/03/30-11:04:47.347073 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: aa69378b-4363-4201-817b-06cb483ba6cf +2025/03/30-11:04:47.347151 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087347150, "job": 1, "event": "recovery_started", "wal_files": [4, 12]} +2025/03/30-11:04:47.347152 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:47.347228 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #12 mode 2 +2025/03/30-11:04:47.347290 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087347289, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:47.347336 8029035584 [db/version_set.cc:5369] Creating manifest 19 +2025/03/30-11:04:47.348094 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x11f610390 +2025/03/30-11:04:47.348112 8029035584 DB pointer 0x11f838600 +2025/03/30-11:04:47.348122 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:47.348653 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:47.348654 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:47.348655 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:47.348655 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:47.348656 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:47.348656 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:47.348657 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:47.348657 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.348658 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:47.348658 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:47.348659 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:47.348659 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:47.348660 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:47.348660 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.348660 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.348661 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.348661 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.348662 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.348662 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 26214400 +2025/03/30-11:04:47.348663 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.348663 8029035584 [options/cf_options.cc:1082] target_file_size_base: 1048576 +2025/03/30-11:04:47.348664 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:47.348664 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 16777216 +2025/03/30-11:04:47.348665 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.348665 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:47.348666 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:47.348667 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:47.348667 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.348668 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:47.348668 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:47.348669 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:47.348669 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:47.348670 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.348670 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:47.348671 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:47.348671 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:47.348672 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:47.348672 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:47.348672 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:47.348673 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:47.348673 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:47.348674 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:47.348674 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:47.348675 8029035584 [options/cf_options.cc:1150] enable_blob_files: true +2025/03/30-11:04:47.348675 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:47.348676 8029035584 [options/cf_options.cc:1154] blob_file_size: 16777216 +2025/03/30-11:04:47.348676 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:47.348677 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: true +2025/03/30-11:04:47.348677 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-11:04:47.348678 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-11:04:47.348678 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.348679 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:47.348679 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:47.348679 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-11:04:53.353642 6198161408 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-11:04:53.353852 6198161408 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 6.0 total, 6.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 1/0 5.92 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Sum 1/0 5.92 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 1, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 1.0 + +Uptime(secs): 6.0 total, 6.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOG.old.1743347058139034 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOG.old.1743347058139034 new file mode 100644 index 0000000..4408764 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOG.old.1743347058139034 @@ -0,0 +1,325 @@ +2025/03/30-10:54:54.645945 8029035584 RocksDB version: 8.6.0 +2025/03/30-10:54:54.645973 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-10:54:54.645974 8029035584 DB SUMMARY +2025/03/30-10:54:54.645974 8029035584 DB Session ID: KY92ZR8LCBK63UYA6SDH +2025/03/30-10:54:54.645990 8029035584 SST files in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/blocks dir, Total Num: 0, files: +2025/03/30-10:54:54.645991 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/blocks: +2025/03/30-10:54:54.645992 8029035584 Options.error_if_exists: 0 +2025/03/30-10:54:54.645992 8029035584 Options.create_if_missing: 1 +2025/03/30-10:54:54.645993 8029035584 Options.paranoid_checks: 1 +2025/03/30-10:54:54.645994 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-10:54:54.645994 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-10:54:54.645995 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-10:54:54.645995 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-10:54:54.645996 8029035584 Options.env: 0x6000035a8ae0 +2025/03/30-10:54:54.645997 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-10:54:54.645997 8029035584 Options.info_log: 0x12e70e2f8 +2025/03/30-10:54:54.645998 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-10:54:54.645998 8029035584 Options.statistics: 0x0 +2025/03/30-10:54:54.645999 8029035584 Options.use_fsync: 0 +2025/03/30-10:54:54.646000 8029035584 Options.max_log_file_size: 0 +2025/03/30-10:54:54.646000 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-10:54:54.646001 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-10:54:54.646001 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-10:54:54.646002 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-10:54:54.646003 8029035584 Options.allow_fallocate: 1 +2025/03/30-10:54:54.646003 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-10:54:54.646004 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-10:54:54.646004 8029035584 Options.use_direct_reads: 0 +2025/03/30-10:54:54.646005 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-10:54:54.646005 8029035584 Options.create_missing_column_families: 0 +2025/03/30-10:54:54.646006 8029035584 Options.db_log_dir: +2025/03/30-10:54:54.646007 8029035584 Options.wal_dir: +2025/03/30-10:54:54.646007 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-10:54:54.646008 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-10:54:54.646008 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-10:54:54.646009 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-10:54:54.646009 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-10:54:54.646010 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-10:54:54.646011 8029035584 Options.advise_random_on_open: 1 +2025/03/30-10:54:54.646011 8029035584 Options.db_write_buffer_size: 0 +2025/03/30-10:54:54.646012 8029035584 Options.write_buffer_manager: 0x600002ab9790 +2025/03/30-10:54:54.646012 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-10:54:54.646013 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-10:54:54.646014 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-10:54:54.646014 8029035584 Options.rate_limiter: 0x0 +2025/03/30-10:54:54.646015 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-10:54:54.646015 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-10:54:54.646016 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-10:54:54.646017 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-10:54:54.646017 8029035584 Options.unordered_write: 0 +2025/03/30-10:54:54.646018 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-10:54:54.646018 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-10:54:54.646019 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-10:54:54.646019 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-10:54:54.646020 8029035584 Options.row_cache: None +2025/03/30-10:54:54.646021 8029035584 Options.wal_filter: None +2025/03/30-10:54:54.646021 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-10:54:54.646022 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-10:54:54.646022 8029035584 Options.two_write_queues: 0 +2025/03/30-10:54:54.646023 8029035584 Options.manual_wal_flush: 0 +2025/03/30-10:54:54.646024 8029035584 Options.wal_compression: 0 +2025/03/30-10:54:54.646024 8029035584 Options.atomic_flush: 0 +2025/03/30-10:54:54.646025 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-10:54:54.646025 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-10:54:54.646026 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-10:54:54.646026 8029035584 Options.log_readahead_size: 0 +2025/03/30-10:54:54.646027 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-10:54:54.646028 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-10:54:54.646028 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-10:54:54.646029 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-10:54:54.646030 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-10:54:54.646030 8029035584 Options.db_host_id: __hostname__ +2025/03/30-10:54:54.646031 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-10:54:54.646031 8029035584 Options.max_background_jobs: 12 +2025/03/30-10:54:54.646032 8029035584 Options.max_background_compactions: -1 +2025/03/30-10:54:54.646033 8029035584 Options.max_subcompactions: 1 +2025/03/30-10:54:54.646033 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-10:54:54.646034 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-10:54:54.646034 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-10:54:54.646035 8029035584 Options.max_total_wal_size: 268435456 +2025/03/30-10:54:54.646036 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-10:54:54.646036 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-10:54:54.646037 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-10:54:54.646037 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-10:54:54.646038 8029035584 Options.max_open_files: -1 +2025/03/30-10:54:54.646039 8029035584 Options.bytes_per_sync: 0 +2025/03/30-10:54:54.646039 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-10:54:54.646040 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-10:54:54.646040 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-10:54:54.646041 8029035584 Options.max_background_flushes: -1 +2025/03/30-10:54:54.646042 8029035584 Compression algorithms supported: +2025/03/30-10:54:54.646042 8029035584 kZSTD supported: 0 +2025/03/30-10:54:54.646043 8029035584 kZlibCompression supported: 0 +2025/03/30-10:54:54.646043 8029035584 kXpressCompression supported: 0 +2025/03/30-10:54:54.646044 8029035584 kSnappyCompression supported: 0 +2025/03/30-10:54:54.646045 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-10:54:54.646045 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-10:54:54.646046 8029035584 kLZ4Compression supported: 0 +2025/03/30-10:54:54.646047 8029035584 kBZip2Compression supported: 0 +2025/03/30-10:54:54.646050 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-10:54:54.646051 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-10:54:54.646300 8029035584 [db/db_impl/db_impl_open.cc:319] Creating manifest 1 +2025/03/30-10:54:54.646543 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/blocks/MANIFEST-000001 +2025/03/30-10:54:54.646561 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-10:54:54.646562 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-10:54:54.646563 8029035584 Options.merge_operator: None +2025/03/30-10:54:54.646563 8029035584 Options.compaction_filter: None +2025/03/30-10:54:54.646564 8029035584 Options.compaction_filter_factory: None +2025/03/30-10:54:54.646564 8029035584 Options.sst_partitioner_factory: None +2025/03/30-10:54:54.646565 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-10:54:54.646565 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-10:54:54.646570 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x6000011931c0) + cache_index_and_filter_blocks: 0 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 0 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 1 + block_cache: 0x0 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-10:54:54.646571 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-10:54:54.646571 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-10:54:54.646572 8029035584 Options.compression: NoCompression +2025/03/30-10:54:54.646572 8029035584 Options.bottommost_compression: Disabled +2025/03/30-10:54:54.646573 8029035584 Options.prefix_extractor: nullptr +2025/03/30-10:54:54.646573 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-10:54:54.646574 8029035584 Options.num_levels: 7 +2025/03/30-10:54:54.646574 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-10:54:54.646575 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-10:54:54.646575 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-10:54:54.646576 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-10:54:54.646576 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-10:54:54.646577 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-10:54:54.646577 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.646578 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.646578 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.646579 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-10:54:54.646580 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.646580 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.646581 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-10:54:54.646581 8029035584 Options.compression_opts.level: 32767 +2025/03/30-10:54:54.646582 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-10:54:54.646582 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.646583 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.646583 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.646584 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.646584 8029035584 Options.compression_opts.enabled: false +2025/03/30-10:54:54.646585 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.646585 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.646586 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.646586 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.646587 8029035584 Options.target_file_size_base: 1048576 +2025/03/30-10:54:54.646587 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-10:54:54.646588 8029035584 Options.max_bytes_for_level_base: 16777216 +2025/03/30-10:54:54.646588 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-10:54:54.646589 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.646589 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-10:54:54.646590 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-10:54:54.646590 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-10:54:54.646591 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-10:54:54.646591 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-10:54:54.646592 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-10:54:54.646592 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-10:54:54.646593 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.646593 8029035584 Options.max_compaction_bytes: 26214400 +2025/03/30-10:54:54.646594 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.646594 8029035584 Options.arena_block_size: 1048576 +2025/03/30-10:54:54.646595 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.646595 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.646596 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-10:54:54.646596 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-10:54:54.646597 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-10:54:54.646597 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-10:54:54.646598 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-10:54:54.646598 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-10:54:54.646599 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-10:54:54.646600 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-10:54:54.646600 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-10:54:54.646601 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-10:54:54.646603 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-10:54:54.646603 8029035584 Options.table_properties_collectors: +2025/03/30-10:54:54.646604 8029035584 Options.inplace_update_support: 0 +2025/03/30-10:54:54.646604 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-10:54:54.646605 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-10:54:54.646605 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.646606 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-10:54:54.646606 8029035584 Options.bloom_locality: 0 +2025/03/30-10:54:54.646607 8029035584 Options.max_successive_merges: 0 +2025/03/30-10:54:54.646607 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-10:54:54.646608 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-10:54:54.646608 8029035584 Options.force_consistency_checks: 1 +2025/03/30-10:54:54.646609 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-10:54:54.646609 8029035584 Options.ttl: 2592000 +2025/03/30-10:54:54.646610 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-10:54:54.646610 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-10:54:54.646611 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-10:54:54.646611 8029035584 Options.enable_blob_files: true +2025/03/30-10:54:54.646612 8029035584 Options.min_blob_size: 0 +2025/03/30-10:54:54.646612 8029035584 Options.blob_file_size: 16777216 +2025/03/30-10:54:54.646613 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-10:54:54.646613 8029035584 Options.enable_blob_garbage_collection: true +2025/03/30-10:54:54.646614 8029035584 Options.blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-10:54:54.646615 8029035584 Options.blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-10:54:54.646615 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.646616 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-10:54:54.646616 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.646617 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-10:54:54.646767 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/blocks/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-10:54:54.646768 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-10:54:54.646790 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: aa69378b-4363-4201-817b-06cb483ba6cf +2025/03/30-10:54:54.646868 8029035584 [db/version_set.cc:5369] Creating manifest 5 +2025/03/30-10:54:54.647619 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12e70faf0 +2025/03/30-10:54:54.647640 8029035584 DB pointer 0x13906f000 +2025/03/30-10:54:54.647647 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-10:54:54.648144 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-10:54:54.648145 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-10:54:54.648146 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-10:54:54.648146 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-10:54:54.648147 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-10:54:54.648147 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-10:54:54.648148 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-10:54:54.648149 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.648149 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-10:54:54.648150 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-10:54:54.648150 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-10:54:54.648151 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-10:54:54.648151 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-10:54:54.648152 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.648152 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.648153 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.648153 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.648154 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.648154 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 26214400 +2025/03/30-10:54:54.648155 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.648155 8029035584 [options/cf_options.cc:1082] target_file_size_base: 1048576 +2025/03/30-10:54:54.648156 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-10:54:54.648156 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 16777216 +2025/03/30-10:54:54.648157 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.648158 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-10:54:54.648158 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-10:54:54.648159 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-10:54:54.648160 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.648160 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-10:54:54.648161 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-10:54:54.648161 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-10:54:54.648162 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-10:54:54.648162 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.648163 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-10:54:54.648163 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-10:54:54.648164 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-10:54:54.648164 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-10:54:54.648165 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-10:54:54.648165 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-10:54:54.648166 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-10:54:54.648167 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-10:54:54.648167 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-10:54:54.648168 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-10:54:54.648168 8029035584 [options/cf_options.cc:1150] enable_blob_files: true +2025/03/30-10:54:54.648169 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-10:54:54.648169 8029035584 [options/cf_options.cc:1154] blob_file_size: 16777216 +2025/03/30-10:54:54.648170 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-10:54:54.648170 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: true +2025/03/30-10:54:54.648171 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-10:54:54.648171 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-10:54:54.648172 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.648172 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-10:54:54.648173 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-10:54:54.648174 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-10:55:03.651477 6142537728 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-10:55:03.651589 6142537728 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 9.0 total, 9.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 9.0 total, 9.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOG.old.1743347087346489 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOG.old.1743347087346489 new file mode 100644 index 0000000..fc5d99b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/LOG.old.1743347087346489 @@ -0,0 +1,298 @@ +2025/03/30-11:04:18.139251 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:18.139282 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:18.139283 8029035584 DB SUMMARY +2025/03/30-11:04:18.139284 8029035584 DB Session ID: 7MUCSF891X500MQRN1NJ +2025/03/30-11:04:18.139338 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:18.139340 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:18.139358 8029035584 MANIFEST file: MANIFEST-000005 size: 83 Bytes +2025/03/30-11:04:18.139359 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks dir, Total Num: 0, files: +2025/03/30-11:04:18.139360 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks: 000004.log size: 31088 ; +2025/03/30-11:04:18.139361 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:18.139362 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:18.139363 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:18.139363 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:18.139364 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:18.139365 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:18.139365 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:18.139366 8029035584 Options.env: 0x600003b806c0 +2025/03/30-11:04:18.139367 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:18.139368 8029035584 Options.info_log: 0x12d4046d8 +2025/03/30-11:04:18.139368 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:18.139369 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:18.139370 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:18.139370 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:18.139371 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:18.139372 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:18.139372 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:18.139373 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:18.139374 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:18.139374 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:18.139375 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:18.139376 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:18.139376 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:18.139377 8029035584 Options.create_missing_column_families: 0 +2025/03/30-11:04:18.139378 8029035584 Options.db_log_dir: +2025/03/30-11:04:18.139378 8029035584 Options.wal_dir: +2025/03/30-11:04:18.139379 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:18.139380 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:18.139380 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:18.139381 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:18.139382 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:18.139382 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:18.139383 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:18.139384 8029035584 Options.db_write_buffer_size: 0 +2025/03/30-11:04:18.139384 8029035584 Options.write_buffer_manager: 0x600002484340 +2025/03/30-11:04:18.139385 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:18.139386 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:18.139386 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:18.139387 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:18.139388 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:18.139389 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:18.139389 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:18.139390 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:18.139390 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:18.139391 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:18.139392 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:18.139392 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:18.139393 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:18.139394 8029035584 Options.row_cache: None +2025/03/30-11:04:18.139394 8029035584 Options.wal_filter: None +2025/03/30-11:04:18.139395 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:18.139396 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:18.139396 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:18.139397 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:18.139398 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:18.139398 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:18.139399 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:18.139400 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:18.139400 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:18.139401 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:18.139402 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:18.139402 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:18.139403 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:18.139404 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:18.139404 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:18.139405 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:18.139406 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:18.139406 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:18.139407 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:18.139408 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:18.139408 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:18.139409 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:18.139410 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:18.139410 8029035584 Options.max_total_wal_size: 268435456 +2025/03/30-11:04:18.139411 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:18.139412 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:18.139413 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:18.139413 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:18.139414 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:18.139415 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:18.139415 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:18.139416 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:18.139417 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:18.139417 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:18.139418 8029035584 Compression algorithms supported: +2025/03/30-11:04:18.139419 8029035584 kZSTD supported: 0 +2025/03/30-11:04:18.139419 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:18.139420 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:18.139421 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:18.139421 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:18.139422 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:18.139423 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:18.139424 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:18.139428 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:18.139429 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:18.139592 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks/MANIFEST-000005 +2025/03/30-11:04:18.139670 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:18.139671 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:18.139672 8029035584 Options.merge_operator: None +2025/03/30-11:04:18.139673 8029035584 Options.compaction_filter: None +2025/03/30-11:04:18.139673 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:18.139674 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:18.139675 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:18.139675 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:18.139683 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001f94b80) + cache_index_and_filter_blocks: 0 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 0 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 1 + block_cache: 0x0 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:18.139684 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:18.139684 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:18.139685 8029035584 Options.compression: NoCompression +2025/03/30-11:04:18.139686 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:18.139687 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:18.139687 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:18.139688 8029035584 Options.num_levels: 7 +2025/03/30-11:04:18.139689 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:18.139689 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:18.139690 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:18.139691 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:18.139691 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:18.139692 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:18.139693 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.139694 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.139694 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.139695 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:18.139696 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.139696 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.139697 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:18.139698 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:18.139698 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:18.139699 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.139700 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.139700 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.139701 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.139702 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:18.139703 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.139703 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.139704 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.139705 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.139705 8029035584 Options.target_file_size_base: 1048576 +2025/03/30-11:04:18.139706 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:18.139707 8029035584 Options.max_bytes_for_level_base: 16777216 +2025/03/30-11:04:18.139707 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:18.139708 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.139709 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:18.139710 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:18.139710 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:18.139711 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:18.139712 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:18.139712 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:18.139713 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:18.139714 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.139714 8029035584 Options.max_compaction_bytes: 26214400 +2025/03/30-11:04:18.139715 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.139716 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:18.139716 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.139717 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.139718 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:18.139718 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:18.139719 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:18.139720 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:18.139721 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:18.139721 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:18.139722 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:18.139723 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:18.139725 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:18.139726 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:18.139726 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:18.139727 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:18.139728 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:18.139729 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:18.139729 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:18.139730 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.139731 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:18.139731 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:18.139732 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:18.139733 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:18.139733 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:18.139734 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:18.139735 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:18.139735 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:18.139736 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:18.139737 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:18.139737 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:18.139738 8029035584 Options.enable_blob_files: true +2025/03/30-11:04:18.139739 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:18.139739 8029035584 Options.blob_file_size: 16777216 +2025/03/30-11:04:18.139740 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:18.139741 8029035584 Options.enable_blob_garbage_collection: true +2025/03/30-11:04:18.139742 8029035584 Options.blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-11:04:18.139742 8029035584 Options.blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-11:04:18.139743 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.139744 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:18.139745 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.139745 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:18.139952 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks/MANIFEST-000005 succeeded,manifest_file_number is 5, next_file_number is 9, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:18.139954 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-11:04:18.140025 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: aa69378b-4363-4201-817b-06cb483ba6cf +2025/03/30-11:04:18.140109 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058140108, "job": 1, "event": "recovery_started", "wal_files": [4]} +2025/03/30-11:04:18.140111 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:18.140861 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058140857, "cf_name": "default", "job": 1, "event": "blob_file_creation", "file_number": 11, "total_blob_count": 89, "total_blob_bytes": 31809, "file_checksum": "", "file_checksum_func_name": "Unknown", "status": "OK"} +2025/03/30-11:04:18.140863 8029035584 [db/blob/blob_file_builder.cc:351] [default] [JOB 1] Generated blob file #11: 89 total blobs, 31809 total bytes +2025/03/30-11:04:18.140925 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058140911, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 10, "file_size": 6067, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 1, "largest_seqno": 89, "table_properties": {"data_size": 4782, "index_size": 84, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 133, "raw_key_size": 6586, "raw_average_key_size": 74, "raw_value_size": 656, "raw_average_value_size": 7, "num_data_blocks": 1, "num_entries": 89, "num_filter_entries": 89, "num_deletions": 0, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "bloomfilter", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "NoCompression", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1743347058, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "aa69378b-4363-4201-817b-06cb483ba6cf", "db_session_id": "7MUCSF891X500MQRN1NJ", "orig_file_number": 10, "seqno_to_time_mapping": "N/A"}, "oldest_blob_file_number": 11} +2025/03/30-11:04:18.140995 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058140994, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:18.141059 8029035584 [db/version_set.cc:5369] Creating manifest 13 +2025/03/30-11:04:18.142157 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12d40e5a0 +2025/03/30-11:04:18.142186 8029035584 DB pointer 0x12d80d200 +2025/03/30-11:04:18.142196 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:18.142934 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:18.142935 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:18.142936 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:18.142937 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:18.142937 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:18.142938 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:18.142939 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:18.142940 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.142940 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:18.142941 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:18.142942 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:18.142942 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:18.142943 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:18.142944 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.142945 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.142945 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.142946 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.142947 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.142947 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 26214400 +2025/03/30-11:04:18.142948 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.142949 8029035584 [options/cf_options.cc:1082] target_file_size_base: 1048576 +2025/03/30-11:04:18.142949 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:18.142950 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 16777216 +2025/03/30-11:04:18.142951 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.142951 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:18.142952 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:18.142953 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:18.142954 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.142955 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:18.142955 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:18.142956 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:18.142956 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:18.142957 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.142958 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:18.142958 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:18.142959 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:18.142960 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:18.142960 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:18.142961 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:18.142962 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:18.142962 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:18.142963 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:18.142964 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:18.142964 8029035584 [options/cf_options.cc:1150] enable_blob_files: true +2025/03/30-11:04:18.142965 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:18.142966 8029035584 [options/cf_options.cc:1154] blob_file_size: 16777216 +2025/03/30-11:04:18.142966 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:18.142967 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: true +2025/03/30-11:04:18.142968 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-11:04:18.142968 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-11:04:18.142969 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.142970 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:18.142970 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:18.142971 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/MANIFEST-000019 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/MANIFEST-000019 new file mode 100644 index 0000000..73a1e3e Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/MANIFEST-000019 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/OPTIONS-000021 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/OPTIONS-000021 new file mode 100644 index 0000000..1c80bf6 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/OPTIONS-000021 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/OPTIONS-000023 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/OPTIONS-000023 new file mode 100644 index 0000000..83c48ea Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/blocks/OPTIONS-000023 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000004.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000004.log new file mode 100644 index 0000000..5c7a88a Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000004.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000010.sst b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000010.sst new file mode 100644 index 0000000..664bc60 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000010.sst differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000011.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000011.log new file mode 100644 index 0000000..a937d63 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000011.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000017.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000017.log new file mode 100644 index 0000000..f594ca8 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/000017.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/CURRENT b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/CURRENT new file mode 100644 index 0000000..3843845 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/CURRENT differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/IDENTITY b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/IDENTITY new file mode 100644 index 0000000..2128fe5 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/IDENTITY differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOCK b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOG b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOG new file mode 100644 index 0000000..a774483 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOG @@ -0,0 +1,342 @@ +2025/03/30-11:04:47.348866 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:47.348889 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:47.348889 8029035584 DB SUMMARY +2025/03/30-11:04:47.348890 8029035584 DB Session ID: 5WJ1J1MXYEBJX1PPHEZ1 +2025/03/30-11:04:47.348909 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:47.348910 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:47.348912 8029035584 MANIFEST file: MANIFEST-000012 size: 388 Bytes +2025/03/30-11:04:47.348913 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core dir, Total Num: 1, files: 000010.sst +2025/03/30-11:04:47.348914 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core: 000004.log size: 58306 ; 000011.log size: 0 ; +2025/03/30-11:04:47.348915 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:47.348915 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:47.348916 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:47.348916 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:47.348916 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:47.348917 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:47.348917 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:47.348918 8029035584 Options.env: 0x600000b7d800 +2025/03/30-11:04:47.348918 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:47.348919 8029035584 Options.info_log: 0x11f611408 +2025/03/30-11:04:47.348919 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:47.348920 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:47.348920 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:47.348921 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:47.348921 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:47.348922 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:47.348922 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:47.348923 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:47.348923 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:47.348923 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:47.348924 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:47.348924 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:47.348925 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:47.348925 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:47.348926 8029035584 Options.db_log_dir: +2025/03/30-11:04:47.348926 8029035584 Options.wal_dir: +2025/03/30-11:04:47.348927 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:47.348927 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:47.348927 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:47.348928 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:47.348928 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:47.348929 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:47.348929 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:47.348930 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:47.348930 8029035584 Options.write_buffer_manager: 0x60000147e970 +2025/03/30-11:04:47.348931 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:47.348931 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:47.348931 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:47.348932 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:47.348932 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:47.348933 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:47.348933 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:47.348934 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:47.348934 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:47.348935 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:47.348935 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:47.348935 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:47.348936 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:47.348936 8029035584 Options.row_cache: None +2025/03/30-11:04:47.348937 8029035584 Options.wal_filter: None +2025/03/30-11:04:47.348937 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:47.348938 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:47.348938 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:47.348939 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:47.348939 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:47.348939 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:47.348940 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:47.348940 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:47.348941 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:47.348941 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:47.348942 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:47.348942 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:47.348943 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:47.348943 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:47.348944 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:47.348944 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:47.348944 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:47.348945 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:47.348945 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:47.348946 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:47.348946 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:47.348947 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:47.348947 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:47.348948 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:47.348948 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:47.348949 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:47.348949 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:47.348950 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:47.348950 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:47.348951 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:47.348951 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:47.348951 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:47.348952 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:47.348952 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:47.348953 8029035584 Compression algorithms supported: +2025/03/30-11:04:47.348953 8029035584 kZSTD supported: 0 +2025/03/30-11:04:47.348954 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:47.348954 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:47.348955 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:47.348955 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:47.348956 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:47.348956 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:47.348957 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:47.348960 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:47.348960 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:47.349017 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core/MANIFEST-000012 +2025/03/30-11:04:47.349041 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:47.349042 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:47.349042 8029035584 Options.merge_operator: None +2025/03/30-11:04:47.349043 8029035584 Options.compaction_filter: None +2025/03/30-11:04:47.349043 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:47.349044 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:47.349044 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:47.349045 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:47.349052 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600002f65ac0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600001a7cf18 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:47.349053 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:47.349053 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:47.349054 8029035584 Options.compression: NoCompression +2025/03/30-11:04:47.349054 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:47.349055 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:47.349055 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:47.349056 8029035584 Options.num_levels: 7 +2025/03/30-11:04:47.349056 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:47.349057 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:47.349057 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:47.349057 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:47.349058 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:47.349058 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:47.349059 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.349059 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.349060 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.349060 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:47.349061 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.349061 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.349062 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:47.349062 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:47.349063 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:47.349063 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.349063 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.349064 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.349064 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.349065 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:47.349065 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.349066 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.349066 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.349067 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.349067 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:47.349067 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:47.349068 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.349068 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:47.349069 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.349069 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:47.349070 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:47.349070 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:47.349071 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:47.349071 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:47.349072 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:47.349072 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:47.349073 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.349073 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.349074 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.349074 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:47.349074 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.349075 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.349075 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:47.349076 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:47.349076 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:47.349077 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:47.349077 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:47.349078 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:47.349079 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:47.349080 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:47.349080 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:47.349081 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:47.349081 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:47.349082 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:47.349082 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:47.349083 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:47.349083 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:47.349083 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.349084 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:47.349084 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:47.349085 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:47.349085 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:47.349086 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:47.349086 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:47.349087 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:47.349087 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:47.349088 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:47.349088 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:47.349088 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:47.349089 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:47.349089 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:47.349090 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:47.349090 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:47.349091 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:47.349091 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.349092 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.349092 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.349093 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:47.349093 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.349094 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:47.349250 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core/MANIFEST-000012 succeeded,manifest_file_number is 12, next_file_number is 16, last_sequence is 419, log_number is 5,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:47.349252 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 5 +2025/03/30-11:04:47.349279 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 4b14c4ec-22ca-4e6a-ba52-1f6b15a01faa +2025/03/30-11:04:47.349319 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087349318, "job": 1, "event": "recovery_started", "wal_files": [4, 11]} +2025/03/30-11:04:47.349320 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:47.349417 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #11 mode 2 +2025/03/30-11:04:47.349468 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087349467, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:47.349508 8029035584 [db/version_set.cc:5369] Creating manifest 18 +2025/03/30-11:04:47.350269 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x11f611c60 +2025/03/30-11:04:47.350291 8029035584 DB pointer 0x11f84fc00 +2025/03/30-11:04:47.350300 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:47.350839 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:47.350840 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:47.350840 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:47.350841 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:47.350841 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:47.350842 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:47.350842 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:47.350843 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.350843 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:47.350844 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:47.350844 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:47.350845 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:47.350845 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:47.350846 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.350846 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.350847 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.350847 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.350847 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.350848 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.350848 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.350849 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:47.350849 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:47.350850 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.350850 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.350851 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:47.350851 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:47.350852 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:47.350852 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.350853 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:47.350853 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:47.350854 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:47.350854 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:47.350855 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.350855 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:47.350855 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:47.350856 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:47.350856 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:47.350857 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:47.350857 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:47.350858 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:47.350858 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:47.350859 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:47.350859 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:47.350860 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:47.350860 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:47.350861 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:47.350861 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:47.350861 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:47.350862 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.350862 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.350863 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.350863 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:47.350864 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:47.350864 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-11:04:56.354844 6198161408 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-11:04:56.354975 6198161408 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 9.0 total, 9.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 1/0 33.65 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Sum 1/0 33.65 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 9.0 total, 9.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x600001a7cf18#98197 capacity: 64.00 MB seed: 152519891 usage: 1.01 KB table_size: 1024 occupancy: 3 collections: 1 last_copies: 0 last_secs: 0.000219 secs_since: 0 +Block cache entry stats(count,size,portion): FilterBlock(1,0.47 KB,0.000722706%) IndexBlock(1,0.29 KB,0.000436604%) Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOG.old.1743347058143088 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOG.old.1743347058143088 new file mode 100644 index 0000000..ec803e1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOG.old.1743347058143088 @@ -0,0 +1,335 @@ +2025/03/30-10:54:54.648341 8029035584 RocksDB version: 8.6.0 +2025/03/30-10:54:54.648363 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-10:54:54.648364 8029035584 DB SUMMARY +2025/03/30-10:54:54.648364 8029035584 DB Session ID: KY92ZR8LCBK63UYA6SDE +2025/03/30-10:54:54.648374 8029035584 SST files in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/core dir, Total Num: 0, files: +2025/03/30-10:54:54.648375 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/core: +2025/03/30-10:54:54.648375 8029035584 Options.error_if_exists: 0 +2025/03/30-10:54:54.648376 8029035584 Options.create_if_missing: 1 +2025/03/30-10:54:54.648376 8029035584 Options.paranoid_checks: 1 +2025/03/30-10:54:54.648377 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-10:54:54.648377 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-10:54:54.648378 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-10:54:54.648378 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-10:54:54.648379 8029035584 Options.env: 0x6000035a8f00 +2025/03/30-10:54:54.648379 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-10:54:54.648380 8029035584 Options.info_log: 0x12e70e468 +2025/03/30-10:54:54.648380 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-10:54:54.648381 8029035584 Options.statistics: 0x0 +2025/03/30-10:54:54.648381 8029035584 Options.use_fsync: 0 +2025/03/30-10:54:54.648382 8029035584 Options.max_log_file_size: 0 +2025/03/30-10:54:54.648382 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-10:54:54.648383 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-10:54:54.648383 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-10:54:54.648384 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-10:54:54.648384 8029035584 Options.allow_fallocate: 1 +2025/03/30-10:54:54.648385 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-10:54:54.648385 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-10:54:54.648386 8029035584 Options.use_direct_reads: 0 +2025/03/30-10:54:54.648386 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-10:54:54.648387 8029035584 Options.create_missing_column_families: 1 +2025/03/30-10:54:54.648387 8029035584 Options.db_log_dir: +2025/03/30-10:54:54.648388 8029035584 Options.wal_dir: +2025/03/30-10:54:54.648388 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-10:54:54.648389 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-10:54:54.648389 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-10:54:54.648390 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-10:54:54.648390 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-10:54:54.648391 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-10:54:54.648391 8029035584 Options.advise_random_on_open: 1 +2025/03/30-10:54:54.648392 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-10:54:54.648392 8029035584 Options.write_buffer_manager: 0x600002ab9ee0 +2025/03/30-10:54:54.648393 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-10:54:54.648393 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-10:54:54.648394 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-10:54:54.648394 8029035584 Options.rate_limiter: 0x0 +2025/03/30-10:54:54.648395 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-10:54:54.648395 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-10:54:54.648396 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-10:54:54.648396 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-10:54:54.648397 8029035584 Options.unordered_write: 0 +2025/03/30-10:54:54.648397 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-10:54:54.648398 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-10:54:54.648398 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-10:54:54.648399 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-10:54:54.648399 8029035584 Options.row_cache: None +2025/03/30-10:54:54.648400 8029035584 Options.wal_filter: None +2025/03/30-10:54:54.648400 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-10:54:54.648401 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-10:54:54.648401 8029035584 Options.two_write_queues: 0 +2025/03/30-10:54:54.648402 8029035584 Options.manual_wal_flush: 0 +2025/03/30-10:54:54.648402 8029035584 Options.wal_compression: 0 +2025/03/30-10:54:54.648403 8029035584 Options.atomic_flush: 0 +2025/03/30-10:54:54.648403 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-10:54:54.648404 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-10:54:54.648404 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-10:54:54.648404 8029035584 Options.log_readahead_size: 0 +2025/03/30-10:54:54.648405 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-10:54:54.648406 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-10:54:54.648406 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-10:54:54.648407 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-10:54:54.648407 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-10:54:54.648408 8029035584 Options.db_host_id: __hostname__ +2025/03/30-10:54:54.648408 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-10:54:54.648409 8029035584 Options.max_background_jobs: 12 +2025/03/30-10:54:54.648410 8029035584 Options.max_background_compactions: -1 +2025/03/30-10:54:54.648410 8029035584 Options.max_subcompactions: 1 +2025/03/30-10:54:54.648411 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-10:54:54.648412 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-10:54:54.648412 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-10:54:54.648413 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-10:54:54.648414 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-10:54:54.648414 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-10:54:54.648415 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-10:54:54.648415 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-10:54:54.648416 8029035584 Options.max_open_files: -1 +2025/03/30-10:54:54.648417 8029035584 Options.bytes_per_sync: 0 +2025/03/30-10:54:54.648417 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-10:54:54.648418 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-10:54:54.648418 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-10:54:54.648419 8029035584 Options.max_background_flushes: -1 +2025/03/30-10:54:54.648420 8029035584 Compression algorithms supported: +2025/03/30-10:54:54.648420 8029035584 kZSTD supported: 0 +2025/03/30-10:54:54.648421 8029035584 kZlibCompression supported: 0 +2025/03/30-10:54:54.648421 8029035584 kXpressCompression supported: 0 +2025/03/30-10:54:54.648422 8029035584 kSnappyCompression supported: 0 +2025/03/30-10:54:54.648423 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-10:54:54.648423 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-10:54:54.648424 8029035584 kLZ4Compression supported: 0 +2025/03/30-10:54:54.648424 8029035584 kBZip2Compression supported: 0 +2025/03/30-10:54:54.648428 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-10:54:54.648428 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-10:54:54.648696 8029035584 [db/db_impl/db_impl_open.cc:319] Creating manifest 1 +2025/03/30-10:54:54.648949 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/core/MANIFEST-000001 +2025/03/30-10:54:54.648968 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-10:54:54.648969 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-10:54:54.648969 8029035584 Options.merge_operator: None +2025/03/30-10:54:54.648970 8029035584 Options.compaction_filter: None +2025/03/30-10:54:54.648970 8029035584 Options.compaction_filter_factory: None +2025/03/30-10:54:54.648971 8029035584 Options.sst_partitioner_factory: None +2025/03/30-10:54:54.648971 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-10:54:54.648972 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-10:54:54.648978 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x60000118c5e0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x6000024a4a98 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-10:54:54.648979 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-10:54:54.648979 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-10:54:54.648980 8029035584 Options.compression: NoCompression +2025/03/30-10:54:54.648980 8029035584 Options.bottommost_compression: Disabled +2025/03/30-10:54:54.648981 8029035584 Options.prefix_extractor: nullptr +2025/03/30-10:54:54.648981 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-10:54:54.648982 8029035584 Options.num_levels: 7 +2025/03/30-10:54:54.648982 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-10:54:54.648983 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-10:54:54.648983 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-10:54:54.648984 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-10:54:54.648984 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-10:54:54.648985 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-10:54:54.648985 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.648986 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.648986 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.648987 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-10:54:54.648987 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.648988 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.648988 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-10:54:54.648989 8029035584 Options.compression_opts.level: 32767 +2025/03/30-10:54:54.648989 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-10:54:54.648990 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.648990 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.648991 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.648991 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.648992 8029035584 Options.compression_opts.enabled: false +2025/03/30-10:54:54.648992 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.648993 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.648993 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.648994 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.648994 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-10:54:54.648995 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-10:54:54.648995 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.648996 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-10:54:54.648996 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.648997 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-10:54:54.648997 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-10:54:54.648998 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-10:54:54.648998 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-10:54:54.648999 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-10:54:54.648999 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-10:54:54.649000 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-10:54:54.649000 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.649001 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.649001 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.649002 8029035584 Options.arena_block_size: 1048576 +2025/03/30-10:54:54.649002 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.649003 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.649004 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-10:54:54.649004 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-10:54:54.649005 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-10:54:54.649005 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-10:54:54.649006 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-10:54:54.649006 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-10:54:54.649007 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-10:54:54.649007 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-10:54:54.649009 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-10:54:54.649009 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-10:54:54.649010 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-10:54:54.649010 8029035584 Options.table_properties_collectors: +2025/03/30-10:54:54.649011 8029035584 Options.inplace_update_support: 0 +2025/03/30-10:54:54.649011 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-10:54:54.649012 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-10:54:54.649013 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.649013 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-10:54:54.649014 8029035584 Options.bloom_locality: 0 +2025/03/30-10:54:54.649014 8029035584 Options.max_successive_merges: 0 +2025/03/30-10:54:54.649014 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-10:54:54.649015 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-10:54:54.649015 8029035584 Options.force_consistency_checks: 1 +2025/03/30-10:54:54.649016 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-10:54:54.649016 8029035584 Options.ttl: 2592000 +2025/03/30-10:54:54.649017 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-10:54:54.649018 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-10:54:54.649018 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-10:54:54.649018 8029035584 Options.enable_blob_files: false +2025/03/30-10:54:54.649019 8029035584 Options.min_blob_size: 0 +2025/03/30-10:54:54.649019 8029035584 Options.blob_file_size: 268435456 +2025/03/30-10:54:54.649020 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-10:54:54.649020 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-10:54:54.649021 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.649022 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.649022 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.649023 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-10:54:54.649023 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.649024 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-10:54:54.649173 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/core/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-10:54:54.649174 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-10:54:54.649194 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 4b14c4ec-22ca-4e6a-ba52-1f6b15a01faa +2025/03/30-10:54:54.649268 8029035584 [db/version_set.cc:5369] Creating manifest 5 +2025/03/30-10:54:54.649972 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12e711610 +2025/03/30-10:54:54.649986 8029035584 DB pointer 0x139087800 +2025/03/30-10:54:54.649993 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-10:54:54.650731 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-10:54:54.650733 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-10:54:54.650734 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-10:54:54.650735 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-10:54:54.650735 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-10:54:54.650736 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-10:54:54.650737 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-10:54:54.650738 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.650738 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-10:54:54.650739 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-10:54:54.650739 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-10:54:54.650740 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-10:54:54.650740 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-10:54:54.650741 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.650742 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.650742 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.650743 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.650743 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.650744 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.650744 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.650745 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-10:54:54.650746 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-10:54:54.650746 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.650747 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.650747 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-10:54:54.650748 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-10:54:54.650749 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-10:54:54.650750 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.650750 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-10:54:54.650751 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-10:54:54.650751 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-10:54:54.650752 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-10:54:54.650752 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.650753 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-10:54:54.650754 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-10:54:54.650754 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-10:54:54.650755 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-10:54:54.650755 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-10:54:54.650756 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-10:54:54.650757 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-10:54:54.650757 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-10:54:54.650758 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-10:54:54.650758 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-10:54:54.650759 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-10:54:54.650759 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-10:54:54.650760 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-10:54:54.650761 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-10:54:54.650761 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-10:54:54.650762 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.650762 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.650763 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.650764 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-10:54:54.650764 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-10:54:54.650765 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-10:55:06.651058 6142537728 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-10:55:06.651195 6142537728 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 12.0 total, 12.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 12.0 total, 12.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x6000024a4a98#97224 capacity: 64.00 MB seed: 152519891 usage: 0.08 KB table_size: 1024 occupancy: 1 collections: 1 last_copies: 0 last_secs: 0.000106 secs_since: 0 +Block cache entry stats(count,size,portion): Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOG.old.1743347087348750 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOG.old.1743347087348750 new file mode 100644 index 0000000..a4a8ce3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/LOG.old.1743347087348750 @@ -0,0 +1,304 @@ +2025/03/30-11:04:18.143276 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:18.143302 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:18.143303 8029035584 DB SUMMARY +2025/03/30-11:04:18.143304 8029035584 DB Session ID: 7MUCSF891X500MQRN1NI +2025/03/30-11:04:18.143339 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:18.143340 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:18.143344 8029035584 MANIFEST file: MANIFEST-000005 size: 83 Bytes +2025/03/30-11:04:18.143345 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core dir, Total Num: 0, files: +2025/03/30-11:04:18.143346 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core: 000004.log size: 58306 ; +2025/03/30-11:04:18.143347 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:18.143347 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:18.143348 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:18.143348 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:18.143349 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:18.143350 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:18.143350 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:18.143351 8029035584 Options.env: 0x600003b80ae0 +2025/03/30-11:04:18.143352 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:18.143352 8029035584 Options.info_log: 0x12d407218 +2025/03/30-11:04:18.143353 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:18.143353 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:18.143354 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:18.143355 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:18.143355 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:18.143356 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:18.143357 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:18.143357 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:18.143358 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:18.143358 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:18.143359 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:18.143360 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:18.143360 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:18.143361 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:18.143361 8029035584 Options.db_log_dir: +2025/03/30-11:04:18.143362 8029035584 Options.wal_dir: +2025/03/30-11:04:18.143363 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:18.143363 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:18.143364 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:18.143365 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:18.143365 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:18.143366 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:18.143366 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:18.143367 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:18.143368 8029035584 Options.write_buffer_manager: 0x6000024845b0 +2025/03/30-11:04:18.143368 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:18.143369 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:18.143370 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:18.143370 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:18.143371 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:18.143371 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:18.143372 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:18.143373 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:18.143373 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:18.143374 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:18.143374 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:18.143375 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:18.143376 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:18.143376 8029035584 Options.row_cache: None +2025/03/30-11:04:18.143377 8029035584 Options.wal_filter: None +2025/03/30-11:04:18.143378 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:18.143378 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:18.143379 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:18.143379 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:18.143380 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:18.143381 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:18.143381 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:18.143382 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:18.143382 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:18.143383 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:18.143384 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:18.143384 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:18.143385 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:18.143386 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:18.143386 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:18.143387 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:18.143387 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:18.143388 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:18.143389 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:18.143389 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:18.143390 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:18.143391 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:18.143391 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:18.143392 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:18.143392 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:18.143393 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:18.143394 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:18.143394 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:18.143395 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:18.143396 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:18.143396 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:18.143397 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:18.143397 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:18.143398 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:18.143399 8029035584 Compression algorithms supported: +2025/03/30-11:04:18.143399 8029035584 kZSTD supported: 0 +2025/03/30-11:04:18.143400 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:18.143401 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:18.143401 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:18.143402 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:18.143403 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:18.143403 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:18.143404 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:18.143408 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:18.143408 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:18.143638 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core/MANIFEST-000005 +2025/03/30-11:04:18.143778 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:18.143779 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:18.143780 8029035584 Options.merge_operator: None +2025/03/30-11:04:18.143781 8029035584 Options.compaction_filter: None +2025/03/30-11:04:18.143781 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:18.143782 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:18.143783 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:18.143783 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:18.143797 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001f97480) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600002a80918 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:18.143798 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:18.143798 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:18.143799 8029035584 Options.compression: NoCompression +2025/03/30-11:04:18.143800 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:18.143800 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:18.143801 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:18.143802 8029035584 Options.num_levels: 7 +2025/03/30-11:04:18.143802 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:18.143803 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:18.143804 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:18.143804 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:18.143805 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:18.143806 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:18.143806 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.143807 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.143808 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.143808 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:18.143809 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.143809 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.143810 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:18.143811 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:18.143811 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:18.143812 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.143813 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.143813 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.143814 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.143815 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:18.143815 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.143816 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.143816 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.143817 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.143818 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:18.143818 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:18.143819 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.143820 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:18.143820 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.143821 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:18.143822 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:18.143822 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:18.143823 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:18.143824 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:18.143824 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:18.143825 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:18.143826 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.143826 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.143827 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.143828 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:18.143828 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.143829 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.143829 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:18.143830 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:18.143831 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:18.143831 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:18.143832 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:18.143833 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:18.143834 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:18.143835 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:18.143836 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:18.143837 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:18.143837 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:18.143838 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:18.143839 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:18.143839 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:18.143840 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:18.143841 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.143841 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:18.143842 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:18.143842 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:18.143843 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:18.143844 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:18.143844 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:18.143845 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:18.143846 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:18.143846 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:18.143847 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:18.143847 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:18.143848 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:18.143849 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:18.143849 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:18.143850 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:18.143851 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:18.143851 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.143852 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.143853 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.143853 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:18.143854 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.143854 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:18.144025 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core/MANIFEST-000005 succeeded,manifest_file_number is 5, next_file_number is 9, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:18.144027 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-11:04:18.144203 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 4b14c4ec-22ca-4e6a-ba52-1f6b15a01faa +2025/03/30-11:04:18.144259 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058144257, "job": 1, "event": "recovery_started", "wal_files": [4]} +2025/03/30-11:04:18.144260 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:18.145296 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058145284, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 10, "file_size": 34457, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 1, "largest_seqno": 419, "table_properties": {"data_size": 32716, "index_size": 210, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 453, "raw_key_size": 28143, "raw_average_key_size": 85, "raw_value_size": 16227, "raw_average_value_size": 49, "num_data_blocks": 3, "num_entries": 331, "num_filter_entries": 331, "num_deletions": 22, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "bloomfilter", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "NoCompression", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1743347058, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "4b14c4ec-22ca-4e6a-ba52-1f6b15a01faa", "db_session_id": "7MUCSF891X500MQRN1NI", "orig_file_number": 10, "seqno_to_time_mapping": "N/A"}} +2025/03/30-11:04:18.145374 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058145373, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:18.145441 8029035584 [db/version_set.cc:5369] Creating manifest 12 +2025/03/30-11:04:18.146448 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12d410530 +2025/03/30-11:04:18.146470 8029035584 DB pointer 0x12d84e600 +2025/03/30-11:04:18.146480 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:18.147125 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:18.147126 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:18.147127 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:18.147127 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:18.147128 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:18.147129 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:18.147129 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:18.147130 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.147131 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:18.147131 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:18.147132 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:18.147133 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:18.147133 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:18.147134 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.147134 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.147135 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.147136 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.147136 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.147137 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.147138 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.147138 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:18.147139 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:18.147139 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.147140 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.147141 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:18.147141 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:18.147143 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:18.147143 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.147144 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:18.147144 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:18.147145 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:18.147146 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:18.147146 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.147147 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:18.147147 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:18.147148 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:18.147149 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:18.147149 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:18.147150 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:18.147150 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:18.147151 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:18.147152 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:18.147152 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:18.147153 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:18.147153 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:18.147154 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:18.147155 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:18.147155 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:18.147156 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.147157 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.147157 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.147158 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:18.147158 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:18.147159 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/MANIFEST-000018 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/MANIFEST-000018 new file mode 100644 index 0000000..6a46541 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/MANIFEST-000018 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/OPTIONS-000020 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/OPTIONS-000020 new file mode 100644 index 0000000..01cd046 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/OPTIONS-000020 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/OPTIONS-000022 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/OPTIONS-000022 new file mode 100644 index 0000000..275e01e Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/core/OPTIONS-000022 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000004.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000004.log new file mode 100644 index 0000000..27c0a08 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000004.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000010.sst b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000010.sst new file mode 100644 index 0000000..9571710 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000010.sst differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000011.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000011.log new file mode 100644 index 0000000..4238ae7 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000011.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000017.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000017.log new file mode 100644 index 0000000..afde903 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/000017.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/CURRENT b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/CURRENT new file mode 100644 index 0000000..0dc913a Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/CURRENT differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/IDENTITY b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/IDENTITY new file mode 100644 index 0000000..08ee74d Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/IDENTITY differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOCK b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOG b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOG new file mode 100644 index 0000000..fdd2f18 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOG @@ -0,0 +1,342 @@ +2025/03/30-11:04:47.341622 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:47.341791 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:47.341792 8029035584 DB SUMMARY +2025/03/30-11:04:47.341793 8029035584 DB Session ID: 5WJ1J1MXYEBJX1PPHEZ2 +2025/03/30-11:04:47.341820 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:47.341821 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:47.341824 8029035584 MANIFEST file: MANIFEST-000012 size: 199 Bytes +2025/03/30-11:04:47.341825 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet dir, Total Num: 1, files: 000010.sst +2025/03/30-11:04:47.341825 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet: 000004.log size: 189 ; 000011.log size: 60 ; +2025/03/30-11:04:47.341826 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:47.341827 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:47.341827 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:47.341828 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:47.341828 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:47.341829 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:47.341829 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:47.341829 8029035584 Options.env: 0x600000b744e0 +2025/03/30-11:04:47.341830 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:47.341830 8029035584 Options.info_log: 0x11f705ca8 +2025/03/30-11:04:47.341831 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:47.341831 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:47.341832 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:47.341832 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:47.341832 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:47.341833 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:47.341833 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:47.341834 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:47.341834 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:47.341834 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:47.341835 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:47.341835 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:47.341836 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:47.341836 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:47.341836 8029035584 Options.db_log_dir: +2025/03/30-11:04:47.341837 8029035584 Options.wal_dir: +2025/03/30-11:04:47.341837 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:47.341838 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:47.341838 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:47.341839 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:47.341839 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:47.341839 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:47.341840 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:47.341840 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:47.341841 8029035584 Options.write_buffer_manager: 0x6000014741a0 +2025/03/30-11:04:47.341841 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:47.341841 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:47.341842 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:47.341842 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:47.341843 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:47.341843 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:47.341843 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:47.341844 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:47.341844 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:47.341845 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:47.341845 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:47.341845 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:47.341846 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:47.341846 8029035584 Options.row_cache: None +2025/03/30-11:04:47.341847 8029035584 Options.wal_filter: None +2025/03/30-11:04:47.341847 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:47.341848 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:47.341848 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:47.341848 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:47.341849 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:47.341849 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:47.341849 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:47.341850 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:47.341850 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:47.341851 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:47.341851 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:47.341852 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:47.341852 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:47.341852 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:47.341853 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:47.341853 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:47.341854 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:47.341854 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:47.341855 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:47.341855 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:47.341855 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:47.341856 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:47.341856 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:47.341857 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:47.341857 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:47.341858 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:47.341858 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:47.341858 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:47.341859 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:47.341859 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:47.341860 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:47.341860 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:47.341860 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:47.341861 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:47.341861 8029035584 Compression algorithms supported: +2025/03/30-11:04:47.341862 8029035584 kZSTD supported: 0 +2025/03/30-11:04:47.341862 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:47.341863 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:47.341863 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:47.341864 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:47.341864 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:47.341864 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:47.341865 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:47.341868 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:47.341869 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:47.341932 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet/MANIFEST-000012 +2025/03/30-11:04:47.341961 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:47.341962 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:47.341962 8029035584 Options.merge_operator: None +2025/03/30-11:04:47.341963 8029035584 Options.compaction_filter: None +2025/03/30-11:04:47.341963 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:47.341964 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:47.341964 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:47.341964 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:47.341993 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600002f7fce0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600001a70318 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:47.341994 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:47.341995 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:47.341995 8029035584 Options.compression: NoCompression +2025/03/30-11:04:47.341996 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:47.341996 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:47.341997 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:47.341997 8029035584 Options.num_levels: 7 +2025/03/30-11:04:47.341998 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:47.341998 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:47.341998 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:47.341999 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:47.341999 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:47.342000 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:47.342000 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.342001 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.342001 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.342001 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:47.342002 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.342002 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.342003 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:47.342003 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:47.342004 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:47.342004 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.342004 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.342005 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.342005 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.342006 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:47.342006 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.342006 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.342007 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.342007 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.342008 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:47.342008 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:47.342009 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.342009 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:47.342009 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.342010 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:47.342010 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:47.342011 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:47.342011 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:47.342012 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:47.342012 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:47.342013 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:47.342013 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.342013 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.342014 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.342014 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:47.342015 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.342015 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.342015 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:47.342016 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:47.342016 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:47.342017 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:47.342017 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:47.342018 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:47.342019 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:47.342019 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:47.342020 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:47.342021 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:47.342021 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:47.342022 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:47.342022 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:47.342023 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:47.342023 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:47.342024 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.342024 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:47.342024 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:47.342025 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:47.342025 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:47.342026 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:47.342026 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:47.342027 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:47.342027 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:47.342027 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:47.342028 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:47.342028 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:47.342029 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:47.342029 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:47.342029 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:47.342030 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:47.342030 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:47.342031 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.342031 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.342032 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.342032 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:47.342033 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.342033 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:47.342212 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet/MANIFEST-000012 succeeded,manifest_file_number is 12, next_file_number is 16, last_sequence is 3, log_number is 5,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:47.342214 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 5 +2025/03/30-11:04:47.342236 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 8896721e-486d-4dd8-a43e-d90bdd21d6b6 +2025/03/30-11:04:47.342282 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087342279, "job": 1, "event": "recovery_started", "wal_files": [4, 11]} +2025/03/30-11:04:47.342284 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:47.342308 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #11 mode 2 +2025/03/30-11:04:47.342401 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087342400, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:47.342461 8029035584 [db/version_set.cc:5369] Creating manifest 18 +2025/03/30-11:04:47.343492 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x11f7067d0 +2025/03/30-11:04:47.343509 8029035584 DB pointer 0x12001e800 +2025/03/30-11:04:47.343524 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:47.343620 6198161408 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-11:04:47.343624 6198161408 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 0.0 total, 0.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 1/0 1.29 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Sum 1/0 1.29 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 0.0 total, 0.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x600001a70318#98197 capacity: 64.00 MB seed: 152519891 usage: 0.46 KB table_size: 1024 occupancy: 3 collections: 1 last_copies: 0 last_secs: 1.5e-05 secs_since: 0 +Block cache entry stats(count,size,portion): FilterBlock(1,0.10 KB,0.000150502%) IndexBlock(1,0.10 KB,0.000159442%) Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** +2025/03/30-11:04:47.344085 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:47.344086 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:47.344087 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:47.344087 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:47.344088 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:47.344088 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:47.344089 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:47.344089 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.344090 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:47.344090 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:47.344091 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:47.344091 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:47.344091 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:47.344092 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.344092 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.344093 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.344093 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.344094 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.344094 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.344094 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.344095 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:47.344095 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:47.344096 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.344096 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.344097 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:47.344097 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:47.344098 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:47.344099 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.344099 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:47.344099 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:47.344100 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:47.344100 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:47.344101 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.344101 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:47.344102 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:47.344102 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:47.344102 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:47.344103 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:47.344103 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:47.344104 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:47.344104 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:47.344105 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:47.344105 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:47.344105 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:47.344106 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:47.344106 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:47.344107 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:47.344107 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:47.344108 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.344108 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.344109 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.344109 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:47.344109 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:47.344110 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOG.old.1743347058130915 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOG.old.1743347058130915 new file mode 100644 index 0000000..75a4bc8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOG.old.1743347058130915 @@ -0,0 +1,335 @@ +2025/03/30-10:54:54.636329 8029035584 RocksDB version: 8.6.0 +2025/03/30-10:54:54.636595 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-10:54:54.636597 8029035584 DB SUMMARY +2025/03/30-10:54:54.636598 8029035584 DB Session ID: KY92ZR8LCBK63UYA6SDI +2025/03/30-10:54:54.636629 8029035584 SST files in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/wallet dir, Total Num: 0, files: +2025/03/30-10:54:54.636631 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/wallet: +2025/03/30-10:54:54.636632 8029035584 Options.error_if_exists: 0 +2025/03/30-10:54:54.636633 8029035584 Options.create_if_missing: 1 +2025/03/30-10:54:54.636634 8029035584 Options.paranoid_checks: 1 +2025/03/30-10:54:54.636634 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-10:54:54.636635 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-10:54:54.636636 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-10:54:54.636636 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-10:54:54.636637 8029035584 Options.env: 0x6000035a0240 +2025/03/30-10:54:54.636638 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-10:54:54.636639 8029035584 Options.info_log: 0x12e506348 +2025/03/30-10:54:54.636640 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-10:54:54.636641 8029035584 Options.statistics: 0x0 +2025/03/30-10:54:54.636641 8029035584 Options.use_fsync: 0 +2025/03/30-10:54:54.636642 8029035584 Options.max_log_file_size: 0 +2025/03/30-10:54:54.636643 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-10:54:54.636643 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-10:54:54.636644 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-10:54:54.636645 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-10:54:54.636646 8029035584 Options.allow_fallocate: 1 +2025/03/30-10:54:54.636646 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-10:54:54.636647 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-10:54:54.636648 8029035584 Options.use_direct_reads: 0 +2025/03/30-10:54:54.636648 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-10:54:54.636649 8029035584 Options.create_missing_column_families: 1 +2025/03/30-10:54:54.636650 8029035584 Options.db_log_dir: +2025/03/30-10:54:54.636651 8029035584 Options.wal_dir: +2025/03/30-10:54:54.636651 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-10:54:54.636652 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-10:54:54.636653 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-10:54:54.636653 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-10:54:54.636654 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-10:54:54.636655 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-10:54:54.636656 8029035584 Options.advise_random_on_open: 1 +2025/03/30-10:54:54.636656 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-10:54:54.636657 8029035584 Options.write_buffer_manager: 0x600002abc270 +2025/03/30-10:54:54.636658 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-10:54:54.636659 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-10:54:54.636659 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-10:54:54.636660 8029035584 Options.rate_limiter: 0x0 +2025/03/30-10:54:54.636661 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-10:54:54.636662 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-10:54:54.636663 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-10:54:54.636663 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-10:54:54.636664 8029035584 Options.unordered_write: 0 +2025/03/30-10:54:54.636665 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-10:54:54.636666 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-10:54:54.636666 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-10:54:54.636667 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-10:54:54.636668 8029035584 Options.row_cache: None +2025/03/30-10:54:54.636668 8029035584 Options.wal_filter: None +2025/03/30-10:54:54.636669 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-10:54:54.636670 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-10:54:54.636671 8029035584 Options.two_write_queues: 0 +2025/03/30-10:54:54.636672 8029035584 Options.manual_wal_flush: 0 +2025/03/30-10:54:54.636672 8029035584 Options.wal_compression: 0 +2025/03/30-10:54:54.636673 8029035584 Options.atomic_flush: 0 +2025/03/30-10:54:54.636674 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-10:54:54.636674 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-10:54:54.636675 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-10:54:54.636676 8029035584 Options.log_readahead_size: 0 +2025/03/30-10:54:54.636677 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-10:54:54.636677 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-10:54:54.636678 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-10:54:54.636679 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-10:54:54.636680 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-10:54:54.636680 8029035584 Options.db_host_id: __hostname__ +2025/03/30-10:54:54.636681 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-10:54:54.636682 8029035584 Options.max_background_jobs: 12 +2025/03/30-10:54:54.636683 8029035584 Options.max_background_compactions: -1 +2025/03/30-10:54:54.636684 8029035584 Options.max_subcompactions: 1 +2025/03/30-10:54:54.636684 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-10:54:54.636685 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-10:54:54.636686 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-10:54:54.636687 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-10:54:54.636687 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-10:54:54.636688 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-10:54:54.636689 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-10:54:54.636690 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-10:54:54.636690 8029035584 Options.max_open_files: -1 +2025/03/30-10:54:54.636691 8029035584 Options.bytes_per_sync: 0 +2025/03/30-10:54:54.636692 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-10:54:54.636692 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-10:54:54.636693 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-10:54:54.636694 8029035584 Options.max_background_flushes: -1 +2025/03/30-10:54:54.636695 8029035584 Compression algorithms supported: +2025/03/30-10:54:54.636696 8029035584 kZSTD supported: 0 +2025/03/30-10:54:54.636696 8029035584 kZlibCompression supported: 0 +2025/03/30-10:54:54.636697 8029035584 kXpressCompression supported: 0 +2025/03/30-10:54:54.636698 8029035584 kSnappyCompression supported: 0 +2025/03/30-10:54:54.636699 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-10:54:54.636700 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-10:54:54.636700 8029035584 kLZ4Compression supported: 0 +2025/03/30-10:54:54.636701 8029035584 kBZip2Compression supported: 0 +2025/03/30-10:54:54.636707 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-10:54:54.636708 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-10:54:54.637211 8029035584 [db/db_impl/db_impl_open.cc:319] Creating manifest 1 +2025/03/30-10:54:54.637529 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/wallet/MANIFEST-000001 +2025/03/30-10:54:54.637575 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-10:54:54.637577 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-10:54:54.637578 8029035584 Options.merge_operator: None +2025/03/30-10:54:54.637578 8029035584 Options.compaction_filter: None +2025/03/30-10:54:54.637579 8029035584 Options.compaction_filter_factory: None +2025/03/30-10:54:54.637579 8029035584 Options.sst_partitioner_factory: None +2025/03/30-10:54:54.637580 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-10:54:54.637580 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-10:54:54.637590 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001194ac0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x6000024b8318 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-10:54:54.637591 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-10:54:54.637592 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-10:54:54.637592 8029035584 Options.compression: NoCompression +2025/03/30-10:54:54.637593 8029035584 Options.bottommost_compression: Disabled +2025/03/30-10:54:54.637594 8029035584 Options.prefix_extractor: nullptr +2025/03/30-10:54:54.637594 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-10:54:54.637595 8029035584 Options.num_levels: 7 +2025/03/30-10:54:54.637595 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-10:54:54.637596 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-10:54:54.637596 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-10:54:54.637597 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-10:54:54.637597 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-10:54:54.637598 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-10:54:54.637598 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.637599 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.637599 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.637600 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-10:54:54.637600 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.637601 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.637601 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-10:54:54.637602 8029035584 Options.compression_opts.level: 32767 +2025/03/30-10:54:54.637602 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-10:54:54.637603 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.637603 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.637604 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.637604 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.637605 8029035584 Options.compression_opts.enabled: false +2025/03/30-10:54:54.637605 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.637606 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.637606 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.637606 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.637607 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-10:54:54.637607 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-10:54:54.637608 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.637609 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-10:54:54.637609 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.637610 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-10:54:54.637610 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-10:54:54.637611 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-10:54:54.637611 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-10:54:54.637612 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-10:54:54.637612 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-10:54:54.637613 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-10:54:54.637613 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.637614 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.637614 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.637615 8029035584 Options.arena_block_size: 1048576 +2025/03/30-10:54:54.637615 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.637616 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.637616 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-10:54:54.637617 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-10:54:54.637618 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-10:54:54.637618 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-10:54:54.637619 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-10:54:54.637619 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-10:54:54.637620 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-10:54:54.637620 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-10:54:54.637622 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-10:54:54.637622 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-10:54:54.637623 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-10:54:54.637624 8029035584 Options.table_properties_collectors: +2025/03/30-10:54:54.637624 8029035584 Options.inplace_update_support: 0 +2025/03/30-10:54:54.637625 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-10:54:54.637625 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-10:54:54.637626 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.637626 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-10:54:54.637627 8029035584 Options.bloom_locality: 0 +2025/03/30-10:54:54.637627 8029035584 Options.max_successive_merges: 0 +2025/03/30-10:54:54.637628 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-10:54:54.637628 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-10:54:54.637629 8029035584 Options.force_consistency_checks: 1 +2025/03/30-10:54:54.637629 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-10:54:54.637629 8029035584 Options.ttl: 2592000 +2025/03/30-10:54:54.637630 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-10:54:54.637631 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-10:54:54.637631 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-10:54:54.637631 8029035584 Options.enable_blob_files: false +2025/03/30-10:54:54.637632 8029035584 Options.min_blob_size: 0 +2025/03/30-10:54:54.637632 8029035584 Options.blob_file_size: 268435456 +2025/03/30-10:54:54.637633 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-10:54:54.637633 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-10:54:54.637634 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.637635 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.637635 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.637636 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-10:54:54.637636 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.637637 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-10:54:54.637876 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/wallet/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-10:54:54.637877 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-10:54:54.637905 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 8896721e-486d-4dd8-a43e-d90bdd21d6b6 +2025/03/30-10:54:54.638039 8029035584 [db/version_set.cc:5369] Creating manifest 5 +2025/03/30-10:54:54.639017 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12e506e70 +2025/03/30-10:54:54.639042 8029035584 DB pointer 0x138813c00 +2025/03/30-10:54:54.639069 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-10:54:54.639140 6142537728 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-10:54:54.639143 6142537728 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 0.0 total, 0.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 0.0 total, 0.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x6000024b8318#97224 capacity: 64.00 MB seed: 152519891 usage: 0.08 KB table_size: 1024 occupancy: 1 collections: 1 last_copies: 0 last_secs: 1.7e-05 secs_since: 0 +Block cache entry stats(count,size,portion): Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** +2025/03/30-10:54:54.639755 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-10:54:54.639756 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-10:54:54.639757 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-10:54:54.639757 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-10:54:54.639758 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-10:54:54.639759 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-10:54:54.639759 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-10:54:54.639760 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.639760 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-10:54:54.639761 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-10:54:54.639761 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-10:54:54.639762 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-10:54:54.639762 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-10:54:54.639763 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.639763 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.639764 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.639764 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.639765 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.639765 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.639766 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.639766 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-10:54:54.639767 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-10:54:54.639767 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.639768 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.639768 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-10:54:54.639769 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-10:54:54.639770 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-10:54:54.639771 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.639771 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-10:54:54.639772 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-10:54:54.639772 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-10:54:54.639773 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-10:54:54.639773 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.639774 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-10:54:54.639774 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-10:54:54.639775 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-10:54:54.639775 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-10:54:54.639776 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-10:54:54.639776 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-10:54:54.639777 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-10:54:54.639777 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-10:54:54.639778 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-10:54:54.639778 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-10:54:54.639779 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-10:54:54.639779 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-10:54:54.639780 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-10:54:54.639780 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-10:54:54.639781 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-10:54:54.639781 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.639782 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.639783 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.639783 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-10:54:54.639784 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-10:54:54.639784 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOG.old.1743347087341443 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOG.old.1743347087341443 new file mode 100644 index 0000000..aef8d46 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/LOG.old.1743347087341443 @@ -0,0 +1,343 @@ +2025/03/30-11:04:18.131239 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:18.131506 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:18.131508 8029035584 DB SUMMARY +2025/03/30-11:04:18.131509 8029035584 DB Session ID: 7MUCSF891X500MQRN1NH +2025/03/30-11:04:18.131573 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:18.131575 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:18.131579 8029035584 MANIFEST file: MANIFEST-000005 size: 83 Bytes +2025/03/30-11:04:18.131581 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet dir, Total Num: 0, files: +2025/03/30-11:04:18.131582 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet: 000004.log size: 189 ; +2025/03/30-11:04:18.131584 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:18.131585 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:18.131585 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:18.131586 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:18.131587 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:18.131588 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:18.131588 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:18.131589 8029035584 Options.env: 0x600003b9c540 +2025/03/30-11:04:18.131590 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:18.131591 8029035584 Options.info_log: 0x12d305b48 +2025/03/30-11:04:18.131592 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:18.131593 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:18.131593 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:18.131594 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:18.131595 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:18.131596 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:18.131597 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:18.131597 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:18.131598 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:18.131599 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:18.131600 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:18.131600 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:18.131601 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:18.131602 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:18.131603 8029035584 Options.db_log_dir: +2025/03/30-11:04:18.131603 8029035584 Options.wal_dir: +2025/03/30-11:04:18.131604 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:18.131605 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:18.131606 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:18.131606 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:18.131607 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:18.131608 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:18.131609 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:18.131609 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:18.131610 8029035584 Options.write_buffer_manager: 0x60000249c1a0 +2025/03/30-11:04:18.131611 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:18.131612 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:18.131612 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:18.131613 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:18.131614 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:18.131615 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:18.131616 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:18.131617 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:18.131617 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:18.131618 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:18.131619 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:18.131619 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:18.131620 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:18.131621 8029035584 Options.row_cache: None +2025/03/30-11:04:18.131622 8029035584 Options.wal_filter: None +2025/03/30-11:04:18.131623 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:18.131623 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:18.131624 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:18.131625 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:18.131626 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:18.131626 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:18.131627 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:18.131628 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:18.131629 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:18.131629 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:18.131630 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:18.131631 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:18.131632 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:18.131632 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:18.131633 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:18.131634 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:18.131635 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:18.131636 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:18.131637 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:18.131637 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:18.131638 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:18.131639 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:18.131640 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:18.131640 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:18.131641 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:18.131642 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:18.131643 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:18.131644 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:18.131644 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:18.131645 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:18.131646 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:18.131647 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:18.131647 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:18.131648 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:18.131649 8029035584 Compression algorithms supported: +2025/03/30-11:04:18.131650 8029035584 kZSTD supported: 0 +2025/03/30-11:04:18.131651 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:18.131652 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:18.131653 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:18.131653 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:18.131654 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:18.131655 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:18.131656 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:18.131661 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:18.131662 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:18.131973 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet/MANIFEST-000005 +2025/03/30-11:04:18.132196 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:18.132197 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:18.132198 8029035584 Options.merge_operator: None +2025/03/30-11:04:18.132198 8029035584 Options.compaction_filter: None +2025/03/30-11:04:18.132199 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:18.132199 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:18.132200 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:18.132200 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:18.132219 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001fa44a0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600002a98318 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:18.132220 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:18.132221 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:18.132221 8029035584 Options.compression: NoCompression +2025/03/30-11:04:18.132222 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:18.132222 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:18.132223 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:18.132224 8029035584 Options.num_levels: 7 +2025/03/30-11:04:18.132224 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:18.132225 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:18.132225 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:18.132225 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:18.132226 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:18.132227 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:18.132227 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.132228 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.132228 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.132229 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:18.132229 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.132230 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.132230 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:18.132231 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:18.132231 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:18.132232 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.132232 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.132233 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.132233 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.132234 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:18.132234 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.132235 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.132235 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.132236 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.132236 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:18.132237 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:18.132237 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.132237 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:18.132238 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.132239 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:18.132239 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:18.132240 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:18.132240 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:18.132241 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:18.132241 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:18.132242 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:18.132242 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.132243 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.132243 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.132244 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:18.132244 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.132245 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.132245 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:18.132246 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:18.132246 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:18.132247 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:18.132247 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:18.132248 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:18.132249 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:18.132250 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:18.132250 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:18.132251 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:18.132251 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:18.132252 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:18.132253 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:18.132253 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:18.132254 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:18.132254 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.132255 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:18.132255 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:18.132256 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:18.132256 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:18.132257 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:18.132257 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:18.132258 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:18.132258 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:18.132259 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:18.132259 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:18.132260 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:18.132260 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:18.132261 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:18.132261 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:18.132262 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:18.132262 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:18.132263 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.132263 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.132264 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.132264 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:18.132265 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.132265 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:18.132499 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet/MANIFEST-000005 succeeded,manifest_file_number is 5, next_file_number is 9, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:18.132501 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-11:04:18.132559 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 8896721e-486d-4dd8-a43e-d90bdd21d6b6 +2025/03/30-11:04:18.132622 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058132619, "job": 1, "event": "recovery_started", "wal_files": [4]} +2025/03/30-11:04:18.132624 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:18.132998 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058132987, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 10, "file_size": 1321, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 1, "largest_seqno": 3, "table_properties": {"data_size": 164, "index_size": 24, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 69, "raw_key_size": 48, "raw_average_key_size": 16, "raw_value_size": 96, "raw_average_value_size": 32, "num_data_blocks": 1, "num_entries": 3, "num_filter_entries": 3, "num_deletions": 0, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "bloomfilter", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "NoCompression", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1743347058, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "8896721e-486d-4dd8-a43e-d90bdd21d6b6", "db_session_id": "7MUCSF891X500MQRN1NH", "orig_file_number": 10, "seqno_to_time_mapping": "N/A"}} +2025/03/30-11:04:18.133078 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058133077, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:18.133149 8029035584 [db/version_set.cc:5369] Creating manifest 12 +2025/03/30-11:04:18.134067 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12d306670 +2025/03/30-11:04:18.134085 8029035584 DB pointer 0x12f01a600 +2025/03/30-11:04:18.134100 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:18.134219 6130839552 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-11:04:18.134224 6130839552 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 0.0 total, 0.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 1/0 1.29 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.9 0.00 0.00 1 0.000 0 0 0.0 0.0 + Sum 1/0 1.29 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.9 0.00 0.00 1 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.9 0.00 0.00 1 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +User 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.9 0.00 0.00 1 0.000 0 0 0.0 0.0 + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 0.0 total, 0.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.63 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.63 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x600002a98318#98164 capacity: 64.00 MB seed: 152519891 usage: 0.46 KB table_size: 1024 occupancy: 3 collections: 1 last_copies: 0 last_secs: 4.6e-05 secs_since: 0 +Block cache entry stats(count,size,portion): FilterBlock(1,0.10 KB,0.000150502%) IndexBlock(1,0.10 KB,0.000159442%) Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** +2025/03/30-11:04:18.134824 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:18.134825 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:18.134826 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:18.134826 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:18.134827 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:18.134828 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:18.134828 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:18.134829 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.134829 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:18.134830 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:18.134830 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:18.134831 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:18.134831 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:18.134832 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.134832 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.134833 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.134833 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.134834 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.134834 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.134835 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.134835 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:18.134836 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:18.134836 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.134837 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.134838 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:18.134838 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:18.134839 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:18.134840 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.134840 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:18.134841 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:18.134841 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:18.134842 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:18.134842 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.134843 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:18.134843 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:18.134844 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:18.134844 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:18.134845 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:18.134845 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:18.134846 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:18.134846 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:18.134847 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:18.134847 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:18.134848 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:18.134848 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:18.134849 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:18.134849 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:18.134850 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:18.134850 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.134851 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.134851 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.134852 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:18.134852 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:18.134853 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/MANIFEST-000018 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/MANIFEST-000018 new file mode 100644 index 0000000..26d9346 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/MANIFEST-000018 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/OPTIONS-000020 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/OPTIONS-000020 new file mode 100644 index 0000000..3ec8861 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/OPTIONS-000020 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/OPTIONS-000022 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/OPTIONS-000022 new file mode 100644 index 0000000..0b1cab5 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data-backup/server/storage/wallet/OPTIONS-000022 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/key b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/key new file mode 100644 index 0000000..b91b13d --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/key @@ -0,0 +1 @@ +NP0BsJO-Cc861xaBhxag9WJp7X3ja6dt-pmve5db4IoA \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/peer b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/peer new file mode 100644 index 0000000..b776068 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/peer @@ -0,0 +1 @@ +2ka-XkEYZauc2eLFUMZnZbqt41KWGZm19BVymq6RqzoA \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000004.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000004.log new file mode 100644 index 0000000..f81b713 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000004.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000010.sst b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000010.sst new file mode 100644 index 0000000..35a7c36 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000010.sst differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000011.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000011.log new file mode 100644 index 0000000..be0df8e Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000011.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000017.sst b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000017.sst new file mode 100644 index 0000000..8d8f30f Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000017.sst differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000018.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000018.log new file mode 100644 index 0000000..e215681 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000018.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000024.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000024.log new file mode 100644 index 0000000..6f98161 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/000024.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/CURRENT b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/CURRENT new file mode 100644 index 0000000..e612f13 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/CURRENT differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/IDENTITY b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/IDENTITY new file mode 100644 index 0000000..92be995 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/IDENTITY differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOCK b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG new file mode 100644 index 0000000..18bd92e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG @@ -0,0 +1,343 @@ +2025/03/30-11:04:47.344345 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:47.344366 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:47.344367 8029035584 DB SUMMARY +2025/03/30-11:04:47.344367 8029035584 DB Session ID: 5WJ1J1MXYEBJX1PPHEZ3 +2025/03/30-11:04:47.344401 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:47.344402 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:47.344404 8029035584 MANIFEST file: MANIFEST-000019 size: 391 Bytes +2025/03/30-11:04:47.344405 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts dir, Total Num: 2, files: 000010.sst 000017.sst +2025/03/30-11:04:47.344406 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts: 000004.log size: 113 ; 000011.log size: 114 ; 000018.log size: 0 ; +2025/03/30-11:04:47.344407 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:47.344407 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:47.344407 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:47.344408 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:47.344408 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:47.344409 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:47.344409 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:47.344409 8029035584 Options.env: 0x600000b74300 +2025/03/30-11:04:47.344410 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:47.344410 8029035584 Options.info_log: 0x11f707ea8 +2025/03/30-11:04:47.344411 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:47.344411 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:47.344412 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:47.344412 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:47.344412 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:47.344413 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:47.344413 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:47.344414 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:47.344414 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:47.344414 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:47.344415 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:47.344415 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:47.344416 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:47.344416 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:47.344416 8029035584 Options.db_log_dir: +2025/03/30-11:04:47.344417 8029035584 Options.wal_dir: +2025/03/30-11:04:47.344417 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:47.344418 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:47.344418 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:47.344418 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:47.344419 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:47.344419 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:47.344420 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:47.344420 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:47.344420 8029035584 Options.write_buffer_manager: 0x600001474340 +2025/03/30-11:04:47.344421 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:47.344421 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:47.344422 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:47.344422 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:47.344423 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:47.344423 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:47.344423 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:47.344424 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:47.344424 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:47.344425 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:47.344425 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:47.344425 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:47.344426 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:47.344426 8029035584 Options.row_cache: None +2025/03/30-11:04:47.344427 8029035584 Options.wal_filter: None +2025/03/30-11:04:47.344427 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:47.344427 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:47.344428 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:47.344428 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:47.344429 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:47.344429 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:47.344429 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:47.344430 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:47.344430 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:47.344431 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:47.344431 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:47.344431 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:47.344432 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:47.344432 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:47.344433 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:47.344433 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:47.344434 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:47.344434 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:47.344434 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:47.344435 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:47.344435 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:47.344436 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:47.344436 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:47.344436 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:47.344437 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:47.344437 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:47.344438 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:47.344438 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:47.344439 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:47.344439 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:47.344439 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:47.344440 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:47.344440 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:47.344441 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:47.344441 8029035584 Compression algorithms supported: +2025/03/30-11:04:47.344441 8029035584 kZSTD supported: 0 +2025/03/30-11:04:47.344442 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:47.344442 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:47.344443 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:47.344443 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:47.344444 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:47.344444 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:47.344445 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:47.344447 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:47.344448 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:47.344517 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts/MANIFEST-000019 +2025/03/30-11:04:47.344548 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:47.344549 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:47.344550 8029035584 Options.merge_operator: None +2025/03/30-11:04:47.344550 8029035584 Options.compaction_filter: None +2025/03/30-11:04:47.344551 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:47.344551 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:47.344552 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:47.344552 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:47.344558 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600002f4c100) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600001a70798 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:47.344559 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:47.344559 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:47.344560 8029035584 Options.compression: NoCompression +2025/03/30-11:04:47.344560 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:47.344561 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:47.344561 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:47.344562 8029035584 Options.num_levels: 7 +2025/03/30-11:04:47.344562 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:47.344563 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:47.344563 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:47.344563 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:47.344564 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:47.344564 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:47.344565 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.344565 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.344565 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.344566 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:47.344566 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.344567 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.344567 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:47.344568 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:47.344568 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:47.344568 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.344569 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.344569 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.344570 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.344570 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:47.344570 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.344571 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.344571 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.344572 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.344572 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:47.344572 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:47.344573 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.344573 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:47.344574 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.344574 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:47.344575 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:47.344575 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:47.344575 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:47.344576 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:47.344576 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:47.344577 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:47.344577 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.344577 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.344578 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.344578 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:47.344579 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.344579 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.344580 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:47.344580 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:47.344581 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:47.344581 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:47.344581 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:47.344583 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:47.344583 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:47.344583 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:47.344584 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:47.344584 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:47.344585 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:47.344585 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:47.344586 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:47.344586 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:47.344587 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:47.344587 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.344587 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:47.344588 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:47.344588 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:47.344589 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:47.344589 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:47.344589 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:47.344590 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:47.344590 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:47.344591 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:47.344591 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:47.344591 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:47.344592 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:47.344592 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:47.344593 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:47.344593 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:47.344594 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:47.344594 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.344594 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.344595 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.344595 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:47.344596 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.344596 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:47.344749 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts/MANIFEST-000019 succeeded,manifest_file_number is 19, next_file_number is 23, last_sequence is 3, log_number is 12,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:47.344750 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 12 +2025/03/30-11:04:47.344781 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 0e17eec6-49fd-4260-b9f6-242cf4d59760 +2025/03/30-11:04:47.344826 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087344824, "job": 1, "event": "recovery_started", "wal_files": [4, 11, 18]} +2025/03/30-11:04:47.344827 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:47.344847 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #11 mode 2 +2025/03/30-11:04:47.344868 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #18 mode 2 +2025/03/30-11:04:47.344921 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087344919, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:47.344965 8029035584 [db/version_set.cc:5369] Creating manifest 25 +2025/03/30-11:04:47.345761 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x11f708000 +2025/03/30-11:04:47.345780 8029035584 DB pointer 0x120020200 +2025/03/30-11:04:47.345788 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:47.346387 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:47.346388 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:47.346389 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:47.346389 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:47.346390 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:47.346390 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:47.346391 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:47.346391 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.346392 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:47.346392 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:47.346393 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:47.346393 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:47.346393 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:47.346394 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.346394 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.346395 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.346395 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.346396 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.346396 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.346397 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.346397 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:47.346397 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:47.346398 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.346398 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.346399 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:47.346399 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:47.346400 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:47.346401 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.346401 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:47.346401 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:47.346402 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:47.346402 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:47.346403 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.346403 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:47.346403 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:47.346404 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:47.346404 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:47.346405 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:47.346405 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:47.346406 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:47.346406 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:47.346407 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:47.346407 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:47.346407 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:47.346408 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:47.346408 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:47.346409 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:47.346409 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:47.346410 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.346410 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.346411 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.346411 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:47.346411 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:47.346412 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-11:04:50.347335 6198161408 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-11:04:50.347389 6198161408 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 3.0 total, 3.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 2/0 2.52 KB 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Sum 2/0 2.52 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 3.0 total, 3.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x600001a70798#98197 capacity: 64.00 MB seed: 152519891 usage: 0.88 KB table_size: 1024 occupancy: 5 collections: 1 last_copies: 0 last_secs: 0.000203 secs_since: 0 +Block cache entry stats(count,size,portion): FilterBlock(2,0.20 KB,0.000301003%) IndexBlock(2,0.26 KB,0.000399351%) Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG.old.1743346494643102 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG.old.1743346494643102 new file mode 100644 index 0000000..8ccb913 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG.old.1743346494643102 @@ -0,0 +1,300 @@ +2025/03/30-10:54:54.640132 8029035584 RocksDB version: 8.6.0 +2025/03/30-10:54:54.640157 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-10:54:54.640158 8029035584 DB SUMMARY +2025/03/30-10:54:54.640158 8029035584 DB Session ID: KY92ZR8LCBK63UYA6SDJ +2025/03/30-10:54:54.640183 8029035584 SST files in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts dir, Total Num: 0, files: +2025/03/30-10:54:54.640183 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts: +2025/03/30-10:54:54.640184 8029035584 Options.error_if_exists: 0 +2025/03/30-10:54:54.640185 8029035584 Options.create_if_missing: 1 +2025/03/30-10:54:54.640185 8029035584 Options.paranoid_checks: 1 +2025/03/30-10:54:54.640186 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-10:54:54.640186 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-10:54:54.640186 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-10:54:54.640187 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-10:54:54.640187 8029035584 Options.env: 0x6000035a8120 +2025/03/30-10:54:54.640188 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-10:54:54.640188 8029035584 Options.info_log: 0x12e705298 +2025/03/30-10:54:54.640189 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-10:54:54.640189 8029035584 Options.statistics: 0x0 +2025/03/30-10:54:54.640190 8029035584 Options.use_fsync: 0 +2025/03/30-10:54:54.640190 8029035584 Options.max_log_file_size: 0 +2025/03/30-10:54:54.640191 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-10:54:54.640191 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-10:54:54.640192 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-10:54:54.640192 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-10:54:54.640193 8029035584 Options.allow_fallocate: 1 +2025/03/30-10:54:54.640193 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-10:54:54.640194 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-10:54:54.640194 8029035584 Options.use_direct_reads: 0 +2025/03/30-10:54:54.640195 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-10:54:54.640195 8029035584 Options.create_missing_column_families: 1 +2025/03/30-10:54:54.640196 8029035584 Options.db_log_dir: +2025/03/30-10:54:54.640196 8029035584 Options.wal_dir: +2025/03/30-10:54:54.640197 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-10:54:54.640197 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-10:54:54.640198 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-10:54:54.640198 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-10:54:54.640198 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-10:54:54.640199 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-10:54:54.640199 8029035584 Options.advise_random_on_open: 1 +2025/03/30-10:54:54.640200 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-10:54:54.640200 8029035584 Options.write_buffer_manager: 0x600002ab9ba0 +2025/03/30-10:54:54.640201 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-10:54:54.640201 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-10:54:54.640202 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-10:54:54.640202 8029035584 Options.rate_limiter: 0x0 +2025/03/30-10:54:54.640203 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-10:54:54.640203 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-10:54:54.640204 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-10:54:54.640204 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-10:54:54.640205 8029035584 Options.unordered_write: 0 +2025/03/30-10:54:54.640205 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-10:54:54.640206 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-10:54:54.640206 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-10:54:54.640207 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-10:54:54.640207 8029035584 Options.row_cache: None +2025/03/30-10:54:54.640208 8029035584 Options.wal_filter: None +2025/03/30-10:54:54.640208 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-10:54:54.640209 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-10:54:54.640209 8029035584 Options.two_write_queues: 0 +2025/03/30-10:54:54.640210 8029035584 Options.manual_wal_flush: 0 +2025/03/30-10:54:54.640210 8029035584 Options.wal_compression: 0 +2025/03/30-10:54:54.640211 8029035584 Options.atomic_flush: 0 +2025/03/30-10:54:54.640211 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-10:54:54.640212 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-10:54:54.640212 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-10:54:54.640212 8029035584 Options.log_readahead_size: 0 +2025/03/30-10:54:54.640213 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-10:54:54.640214 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-10:54:54.640214 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-10:54:54.640215 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-10:54:54.640215 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-10:54:54.640215 8029035584 Options.db_host_id: __hostname__ +2025/03/30-10:54:54.640216 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-10:54:54.640216 8029035584 Options.max_background_jobs: 12 +2025/03/30-10:54:54.640217 8029035584 Options.max_background_compactions: -1 +2025/03/30-10:54:54.640217 8029035584 Options.max_subcompactions: 1 +2025/03/30-10:54:54.640218 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-10:54:54.640218 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-10:54:54.640219 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-10:54:54.640219 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-10:54:54.640220 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-10:54:54.640220 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-10:54:54.640221 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-10:54:54.640221 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-10:54:54.640222 8029035584 Options.max_open_files: -1 +2025/03/30-10:54:54.640222 8029035584 Options.bytes_per_sync: 0 +2025/03/30-10:54:54.640223 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-10:54:54.640223 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-10:54:54.640224 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-10:54:54.640224 8029035584 Options.max_background_flushes: -1 +2025/03/30-10:54:54.640225 8029035584 Compression algorithms supported: +2025/03/30-10:54:54.640225 8029035584 kZSTD supported: 0 +2025/03/30-10:54:54.640226 8029035584 kZlibCompression supported: 0 +2025/03/30-10:54:54.640226 8029035584 kXpressCompression supported: 0 +2025/03/30-10:54:54.640227 8029035584 kSnappyCompression supported: 0 +2025/03/30-10:54:54.640227 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-10:54:54.640228 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-10:54:54.640228 8029035584 kLZ4Compression supported: 0 +2025/03/30-10:54:54.640229 8029035584 kBZip2Compression supported: 0 +2025/03/30-10:54:54.640232 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-10:54:54.640233 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-10:54:54.640459 8029035584 [db/db_impl/db_impl_open.cc:319] Creating manifest 1 +2025/03/30-10:54:54.640757 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts/MANIFEST-000001 +2025/03/30-10:54:54.640779 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-10:54:54.640779 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-10:54:54.640780 8029035584 Options.merge_operator: None +2025/03/30-10:54:54.640780 8029035584 Options.compaction_filter: None +2025/03/30-10:54:54.640781 8029035584 Options.compaction_filter_factory: None +2025/03/30-10:54:54.640782 8029035584 Options.sst_partitioner_factory: None +2025/03/30-10:54:54.640782 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-10:54:54.640782 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-10:54:54.640790 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001192360) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x6000024a43d8 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-10:54:54.640791 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-10:54:54.640792 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-10:54:54.640792 8029035584 Options.compression: NoCompression +2025/03/30-10:54:54.640793 8029035584 Options.bottommost_compression: Disabled +2025/03/30-10:54:54.640793 8029035584 Options.prefix_extractor: nullptr +2025/03/30-10:54:54.640794 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-10:54:54.640794 8029035584 Options.num_levels: 7 +2025/03/30-10:54:54.640795 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-10:54:54.640795 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-10:54:54.640796 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-10:54:54.640796 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-10:54:54.640797 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-10:54:54.640797 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-10:54:54.640798 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.640798 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.640799 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.640799 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-10:54:54.640800 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.640800 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.640801 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-10:54:54.640801 8029035584 Options.compression_opts.level: 32767 +2025/03/30-10:54:54.640802 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-10:54:54.640802 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.640802 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.640803 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.640803 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.640804 8029035584 Options.compression_opts.enabled: false +2025/03/30-10:54:54.640804 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.640805 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.640805 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.640806 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.640806 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-10:54:54.640807 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-10:54:54.640807 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.640808 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-10:54:54.640808 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.640809 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-10:54:54.640809 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-10:54:54.640810 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-10:54:54.640810 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-10:54:54.640811 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-10:54:54.640811 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-10:54:54.640812 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-10:54:54.640812 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.640813 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.640813 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.640814 8029035584 Options.arena_block_size: 1048576 +2025/03/30-10:54:54.640814 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.640815 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.640815 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-10:54:54.640816 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-10:54:54.640816 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-10:54:54.640817 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-10:54:54.640817 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-10:54:54.640818 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-10:54:54.640818 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-10:54:54.640819 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-10:54:54.640820 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-10:54:54.640821 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-10:54:54.640821 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-10:54:54.640822 8029035584 Options.table_properties_collectors: +2025/03/30-10:54:54.640822 8029035584 Options.inplace_update_support: 0 +2025/03/30-10:54:54.640823 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-10:54:54.640823 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-10:54:54.640824 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.640824 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-10:54:54.640825 8029035584 Options.bloom_locality: 0 +2025/03/30-10:54:54.640825 8029035584 Options.max_successive_merges: 0 +2025/03/30-10:54:54.640826 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-10:54:54.640826 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-10:54:54.640827 8029035584 Options.force_consistency_checks: 1 +2025/03/30-10:54:54.640827 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-10:54:54.640828 8029035584 Options.ttl: 2592000 +2025/03/30-10:54:54.640828 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-10:54:54.640829 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-10:54:54.640829 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-10:54:54.640829 8029035584 Options.enable_blob_files: false +2025/03/30-10:54:54.640830 8029035584 Options.min_blob_size: 0 +2025/03/30-10:54:54.640830 8029035584 Options.blob_file_size: 268435456 +2025/03/30-10:54:54.640831 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-10:54:54.640831 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-10:54:54.640832 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.640832 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.640833 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.640833 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-10:54:54.640834 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.640834 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-10:54:54.640978 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-10:54:54.640980 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-10:54:54.641007 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 0e17eec6-49fd-4260-b9f6-242cf4d59760 +2025/03/30-10:54:54.641141 8029035584 [db/version_set.cc:5369] Creating manifest 5 +2025/03/30-10:54:54.642055 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12e70d880 +2025/03/30-10:54:54.642081 8029035584 DB pointer 0x139044c00 +2025/03/30-10:54:54.642089 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-10:54:54.642640 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-10:54:54.642641 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-10:54:54.642642 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-10:54:54.642643 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-10:54:54.642643 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-10:54:54.642644 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-10:54:54.642644 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-10:54:54.642645 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.642645 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-10:54:54.642646 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-10:54:54.642646 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-10:54:54.642647 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-10:54:54.642648 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-10:54:54.642648 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.642649 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.642649 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.642650 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.642650 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.642651 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.642651 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.642652 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-10:54:54.642652 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-10:54:54.642653 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.642653 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.642654 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-10:54:54.642655 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-10:54:54.642656 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-10:54:54.642656 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.642657 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-10:54:54.642657 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-10:54:54.642658 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-10:54:54.642658 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-10:54:54.642659 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.642659 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-10:54:54.642660 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-10:54:54.642660 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-10:54:54.642661 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-10:54:54.642661 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-10:54:54.642662 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-10:54:54.642662 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-10:54:54.642663 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-10:54:54.642663 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-10:54:54.642664 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-10:54:54.642665 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-10:54:54.642665 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-10:54:54.642666 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-10:54:54.642666 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-10:54:54.642667 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-10:54:54.642667 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.642668 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.642668 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.642669 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-10:54:54.642669 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-10:54:54.642670 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-10:54:54.642872 8029035584 [db/db_impl/db_impl.cc:496] Shutdown: canceling all background work +2025/03/30-10:54:54.642977 8029035584 [db/db_impl/db_impl.cc:698] Shutdown complete diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG.old.1743347058134969 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG.old.1743347058134969 new file mode 100644 index 0000000..cfc1df2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG.old.1743347058134969 @@ -0,0 +1,343 @@ +2025/03/30-10:54:54.643263 8029035584 RocksDB version: 8.6.0 +2025/03/30-10:54:54.643289 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-10:54:54.643289 8029035584 DB SUMMARY +2025/03/30-10:54:54.643290 8029035584 DB Session ID: KY92ZR8LCBK63UYA6SDG +2025/03/30-10:54:54.643339 8029035584 CURRENT file: CURRENT +2025/03/30-10:54:54.643340 8029035584 IDENTITY file: IDENTITY +2025/03/30-10:54:54.643343 8029035584 MANIFEST file: MANIFEST-000005 size: 83 Bytes +2025/03/30-10:54:54.643344 8029035584 SST files in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts dir, Total Num: 0, files: +2025/03/30-10:54:54.643345 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts: 000004.log size: 113 ; +2025/03/30-10:54:54.643346 8029035584 Options.error_if_exists: 0 +2025/03/30-10:54:54.643347 8029035584 Options.create_if_missing: 1 +2025/03/30-10:54:54.643347 8029035584 Options.paranoid_checks: 1 +2025/03/30-10:54:54.643348 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-10:54:54.643348 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-10:54:54.643349 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-10:54:54.643349 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-10:54:54.643350 8029035584 Options.env: 0x6000035a84e0 +2025/03/30-10:54:54.643350 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-10:54:54.643351 8029035584 Options.info_log: 0x12e705298 +2025/03/30-10:54:54.643351 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-10:54:54.643352 8029035584 Options.statistics: 0x0 +2025/03/30-10:54:54.643352 8029035584 Options.use_fsync: 0 +2025/03/30-10:54:54.643353 8029035584 Options.max_log_file_size: 0 +2025/03/30-10:54:54.643353 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-10:54:54.643354 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-10:54:54.643354 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-10:54:54.643355 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-10:54:54.643355 8029035584 Options.allow_fallocate: 1 +2025/03/30-10:54:54.643356 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-10:54:54.643356 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-10:54:54.643357 8029035584 Options.use_direct_reads: 0 +2025/03/30-10:54:54.643357 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-10:54:54.643358 8029035584 Options.create_missing_column_families: 1 +2025/03/30-10:54:54.643358 8029035584 Options.db_log_dir: +2025/03/30-10:54:54.643359 8029035584 Options.wal_dir: +2025/03/30-10:54:54.643359 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-10:54:54.643360 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-10:54:54.643360 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-10:54:54.643361 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-10:54:54.643361 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-10:54:54.643362 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-10:54:54.643362 8029035584 Options.advise_random_on_open: 1 +2025/03/30-10:54:54.643363 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-10:54:54.643363 8029035584 Options.write_buffer_manager: 0x600002ab9ba0 +2025/03/30-10:54:54.643364 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-10:54:54.643364 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-10:54:54.643365 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-10:54:54.643365 8029035584 Options.rate_limiter: 0x0 +2025/03/30-10:54:54.643366 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-10:54:54.643366 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-10:54:54.643367 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-10:54:54.643367 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-10:54:54.643368 8029035584 Options.unordered_write: 0 +2025/03/30-10:54:54.643368 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-10:54:54.643369 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-10:54:54.643369 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-10:54:54.643370 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-10:54:54.643370 8029035584 Options.row_cache: None +2025/03/30-10:54:54.643371 8029035584 Options.wal_filter: None +2025/03/30-10:54:54.643371 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-10:54:54.643372 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-10:54:54.643373 8029035584 Options.two_write_queues: 0 +2025/03/30-10:54:54.643373 8029035584 Options.manual_wal_flush: 0 +2025/03/30-10:54:54.643373 8029035584 Options.wal_compression: 0 +2025/03/30-10:54:54.643374 8029035584 Options.atomic_flush: 0 +2025/03/30-10:54:54.643374 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-10:54:54.643375 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-10:54:54.643375 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-10:54:54.643376 8029035584 Options.log_readahead_size: 0 +2025/03/30-10:54:54.643376 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-10:54:54.643377 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-10:54:54.643377 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-10:54:54.643378 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-10:54:54.643379 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-10:54:54.643379 8029035584 Options.db_host_id: __hostname__ +2025/03/30-10:54:54.643380 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-10:54:54.643380 8029035584 Options.max_background_jobs: 12 +2025/03/30-10:54:54.643381 8029035584 Options.max_background_compactions: -1 +2025/03/30-10:54:54.643381 8029035584 Options.max_subcompactions: 1 +2025/03/30-10:54:54.643382 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-10:54:54.643382 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-10:54:54.643383 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-10:54:54.643383 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-10:54:54.643384 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-10:54:54.643384 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-10:54:54.643385 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-10:54:54.643385 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-10:54:54.643386 8029035584 Options.max_open_files: -1 +2025/03/30-10:54:54.643386 8029035584 Options.bytes_per_sync: 0 +2025/03/30-10:54:54.643387 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-10:54:54.643387 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-10:54:54.643388 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-10:54:54.643388 8029035584 Options.max_background_flushes: -1 +2025/03/30-10:54:54.643389 8029035584 Compression algorithms supported: +2025/03/30-10:54:54.643389 8029035584 kZSTD supported: 0 +2025/03/30-10:54:54.643390 8029035584 kZlibCompression supported: 0 +2025/03/30-10:54:54.643390 8029035584 kXpressCompression supported: 0 +2025/03/30-10:54:54.643391 8029035584 kSnappyCompression supported: 0 +2025/03/30-10:54:54.643391 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-10:54:54.643392 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-10:54:54.643392 8029035584 kLZ4Compression supported: 0 +2025/03/30-10:54:54.643393 8029035584 kBZip2Compression supported: 0 +2025/03/30-10:54:54.643396 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-10:54:54.643397 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-10:54:54.643477 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts/MANIFEST-000005 +2025/03/30-10:54:54.643499 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-10:54:54.643500 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-10:54:54.643501 8029035584 Options.merge_operator: None +2025/03/30-10:54:54.643501 8029035584 Options.compaction_filter: None +2025/03/30-10:54:54.643502 8029035584 Options.compaction_filter_factory: None +2025/03/30-10:54:54.643502 8029035584 Options.sst_partitioner_factory: None +2025/03/30-10:54:54.643503 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-10:54:54.643503 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-10:54:54.643509 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001192e60) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x6000024a4198 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-10:54:54.643510 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-10:54:54.643510 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-10:54:54.643511 8029035584 Options.compression: NoCompression +2025/03/30-10:54:54.643511 8029035584 Options.bottommost_compression: Disabled +2025/03/30-10:54:54.643512 8029035584 Options.prefix_extractor: nullptr +2025/03/30-10:54:54.643512 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-10:54:54.643513 8029035584 Options.num_levels: 7 +2025/03/30-10:54:54.643513 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-10:54:54.643514 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-10:54:54.643514 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-10:54:54.643515 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-10:54:54.643515 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-10:54:54.643516 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-10:54:54.643516 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.643517 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.643517 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.643518 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-10:54:54.643518 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.643519 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.643519 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-10:54:54.643520 8029035584 Options.compression_opts.level: 32767 +2025/03/30-10:54:54.643521 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-10:54:54.643521 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.643521 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.643522 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.643523 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.643523 8029035584 Options.compression_opts.enabled: false +2025/03/30-10:54:54.643524 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.643524 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.643525 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.643525 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.643525 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-10:54:54.643526 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-10:54:54.643526 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.643527 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-10:54:54.643527 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.643528 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-10:54:54.643529 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-10:54:54.643529 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-10:54:54.643530 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-10:54:54.643530 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-10:54:54.643531 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-10:54:54.643531 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-10:54:54.643532 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.643532 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.643533 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.643533 8029035584 Options.arena_block_size: 1048576 +2025/03/30-10:54:54.643534 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.643534 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.643535 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-10:54:54.643535 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-10:54:54.643536 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-10:54:54.643536 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-10:54:54.643537 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-10:54:54.643537 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-10:54:54.643538 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-10:54:54.643538 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-10:54:54.643539 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-10:54:54.643539 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-10:54:54.643540 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-10:54:54.643541 8029035584 Options.table_properties_collectors: +2025/03/30-10:54:54.643541 8029035584 Options.inplace_update_support: 0 +2025/03/30-10:54:54.643542 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-10:54:54.643542 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-10:54:54.643543 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.643543 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-10:54:54.643544 8029035584 Options.bloom_locality: 0 +2025/03/30-10:54:54.643544 8029035584 Options.max_successive_merges: 0 +2025/03/30-10:54:54.643545 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-10:54:54.643545 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-10:54:54.643546 8029035584 Options.force_consistency_checks: 1 +2025/03/30-10:54:54.643546 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-10:54:54.643547 8029035584 Options.ttl: 2592000 +2025/03/30-10:54:54.643547 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-10:54:54.643548 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-10:54:54.643548 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-10:54:54.643549 8029035584 Options.enable_blob_files: false +2025/03/30-10:54:54.643549 8029035584 Options.min_blob_size: 0 +2025/03/30-10:54:54.643550 8029035584 Options.blob_file_size: 268435456 +2025/03/30-10:54:54.643550 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-10:54:54.643551 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-10:54:54.643551 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.643552 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.643552 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.643553 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-10:54:54.643553 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.643554 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-10:54:54.643742 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/accounts/MANIFEST-000005 succeeded,manifest_file_number is 5, next_file_number is 9, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-10:54:54.643744 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-10:54:54.643777 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 0e17eec6-49fd-4260-b9f6-242cf4d59760 +2025/03/30-10:54:54.643848 8029035584 EVENT_LOG_v1 {"time_micros": 1743346494643845, "job": 1, "event": "recovery_started", "wal_files": [4]} +2025/03/30-10:54:54.643850 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-10:54:54.644234 8029035584 EVENT_LOG_v1 {"time_micros": 1743346494644222, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 10, "file_size": 1295, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 1, "largest_seqno": 1, "table_properties": {"data_size": 114, "index_size": 51, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 69, "raw_key_size": 42, "raw_average_key_size": 42, "raw_value_size": 56, "raw_average_value_size": 56, "num_data_blocks": 1, "num_entries": 1, "num_filter_entries": 1, "num_deletions": 0, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "bloomfilter", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "NoCompression", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1743346494, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "0e17eec6-49fd-4260-b9f6-242cf4d59760", "db_session_id": "KY92ZR8LCBK63UYA6SDG", "orig_file_number": 10, "seqno_to_time_mapping": "N/A"}} +2025/03/30-10:54:54.644309 8029035584 EVENT_LOG_v1 {"time_micros": 1743346494644308, "job": 1, "event": "recovery_finished"} +2025/03/30-10:54:54.644364 8029035584 [db/version_set.cc:5369] Creating manifest 12 +2025/03/30-10:54:54.645173 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12e70d880 +2025/03/30-10:54:54.645192 8029035584 DB pointer 0x139044c00 +2025/03/30-10:54:54.645199 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-10:54:54.645724 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-10:54:54.645725 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-10:54:54.645726 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-10:54:54.645726 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-10:54:54.645727 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-10:54:54.645727 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-10:54:54.645728 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-10:54:54.645728 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.645729 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-10:54:54.645730 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-10:54:54.645730 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-10:54:54.645731 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-10:54:54.645731 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-10:54:54.645732 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.645732 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.645733 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.645733 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.645734 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.645734 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.645735 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.645735 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-10:54:54.645736 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-10:54:54.645736 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.645737 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.645738 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-10:54:54.645738 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-10:54:54.645739 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-10:54:54.645740 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.645740 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-10:54:54.645741 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-10:54:54.645741 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-10:54:54.645742 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-10:54:54.645742 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.645743 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-10:54:54.645744 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-10:54:54.645744 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-10:54:54.645745 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-10:54:54.645745 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-10:54:54.645746 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-10:54:54.645746 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-10:54:54.645747 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-10:54:54.645747 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-10:54:54.645748 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-10:54:54.645748 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-10:54:54.645749 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-10:54:54.645749 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-10:54:54.645750 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-10:54:54.645750 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-10:54:54.645751 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.645752 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.645752 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.645753 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-10:54:54.645753 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-10:54:54.645754 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-10:55:00.650345 6142537728 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-10:55:00.650415 6142537728 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 6.0 total, 6.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 1/0 1.26 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.3 0.00 0.00 1 0.000 0 0 0.0 0.0 + Sum 1/0 1.26 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.3 0.00 0.00 1 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.3 0.00 0.00 1 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +User 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.3 0.00 0.00 1 0.000 0 0 0.0 0.0 + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 6.0 total, 6.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x6000024a4198#97224 capacity: 64.00 MB seed: 152519891 usage: 0.48 KB table_size: 1024 occupancy: 3 collections: 1 last_copies: 0 last_secs: 4.4e-05 secs_since: 0 +Block cache entry stats(count,size,portion): FilterBlock(1,0.10 KB,0.000150502%) IndexBlock(1,0.13 KB,0.000199676%) Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG.old.1743347087344217 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG.old.1743347087344217 new file mode 100644 index 0000000..7776ded --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/LOG.old.1743347087344217 @@ -0,0 +1,305 @@ +2025/03/30-11:04:18.135145 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:18.135177 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:18.135178 8029035584 DB SUMMARY +2025/03/30-11:04:18.135179 8029035584 DB Session ID: 7MUCSF891X500MQRN1NG +2025/03/30-11:04:18.135210 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:18.135211 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:18.135215 8029035584 MANIFEST file: MANIFEST-000012 size: 251 Bytes +2025/03/30-11:04:18.135216 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts dir, Total Num: 1, files: 000010.sst +2025/03/30-11:04:18.135217 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts: 000004.log size: 113 ; 000011.log size: 114 ; +2025/03/30-11:04:18.135219 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:18.135220 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:18.135220 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:18.135221 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:18.135222 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:18.135222 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:18.135223 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:18.135224 8029035584 Options.env: 0x600003b9c720 +2025/03/30-11:04:18.135225 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:18.135226 8029035584 Options.info_log: 0x12d3075a8 +2025/03/30-11:04:18.135226 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:18.135227 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:18.135228 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:18.135229 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:18.135229 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:18.135230 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:18.135231 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:18.135232 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:18.135232 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:18.135233 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:18.135234 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:18.135235 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:18.135235 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:18.135236 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:18.135237 8029035584 Options.db_log_dir: +2025/03/30-11:04:18.135237 8029035584 Options.wal_dir: +2025/03/30-11:04:18.135238 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:18.135239 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:18.135240 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:18.135240 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:18.135241 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:18.135242 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:18.135243 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:18.135243 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:18.135244 8029035584 Options.write_buffer_manager: 0x60000249c680 +2025/03/30-11:04:18.135245 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:18.135245 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:18.135246 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:18.135247 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:18.135248 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:18.135248 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:18.135249 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:18.135250 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:18.135251 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:18.135251 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:18.135252 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:18.135253 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:18.135254 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:18.135254 8029035584 Options.row_cache: None +2025/03/30-11:04:18.135255 8029035584 Options.wal_filter: None +2025/03/30-11:04:18.135256 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:18.135257 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:18.135257 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:18.135258 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:18.135259 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:18.135260 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:18.135260 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:18.135261 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:18.135262 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:18.135263 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:18.135263 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:18.135264 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:18.135265 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:18.135266 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:18.135266 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:18.135267 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:18.135268 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:18.135269 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:18.135269 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:18.135270 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:18.135271 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:18.135272 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:18.135272 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:18.135273 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:18.135274 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:18.135275 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:18.135276 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:18.135276 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:18.135277 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:18.135278 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:18.135279 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:18.135279 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:18.135280 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:18.135281 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:18.135282 8029035584 Compression algorithms supported: +2025/03/30-11:04:18.135282 8029035584 kZSTD supported: 0 +2025/03/30-11:04:18.135283 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:18.135284 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:18.135285 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:18.135286 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:18.135286 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:18.135287 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:18.135288 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:18.135292 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:18.135293 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:18.135536 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts/MANIFEST-000012 +2025/03/30-11:04:18.135734 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:18.135735 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:18.135735 8029035584 Options.merge_operator: None +2025/03/30-11:04:18.135736 8029035584 Options.compaction_filter: None +2025/03/30-11:04:18.135736 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:18.135737 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:18.135737 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:18.135738 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:18.135745 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001fccce0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600002a98858 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:18.135746 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:18.135746 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:18.135747 8029035584 Options.compression: NoCompression +2025/03/30-11:04:18.135747 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:18.135748 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:18.135748 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:18.135749 8029035584 Options.num_levels: 7 +2025/03/30-11:04:18.135749 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:18.135750 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:18.135750 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:18.135751 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:18.135751 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:18.135752 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:18.135752 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.135753 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.135753 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.135754 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:18.135754 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.135755 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.135755 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:18.135756 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:18.135756 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:18.135757 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.135757 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.135758 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.135758 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.135759 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:18.135759 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.135760 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.135760 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.135761 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.135761 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:18.135761 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:18.135762 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.135762 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:18.135763 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.135763 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:18.135764 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:18.135764 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:18.135765 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:18.135765 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:18.135766 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:18.135766 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:18.135767 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.135767 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.135768 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.135768 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:18.135769 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.135769 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.135770 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:18.135770 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:18.135771 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:18.135771 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:18.135772 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:18.135773 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:18.135774 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:18.135774 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:18.135775 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:18.135776 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:18.135776 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:18.135777 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:18.135777 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:18.135778 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:18.135778 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:18.135779 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.135779 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:18.135780 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:18.135780 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:18.135781 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:18.135781 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:18.135781 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:18.135782 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:18.135782 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:18.135783 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:18.135783 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:18.135784 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:18.135784 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:18.135785 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:18.135785 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:18.135786 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:18.135786 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:18.135787 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.135787 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.135788 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.135788 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:18.135789 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.135789 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:18.136002 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/accounts/MANIFEST-000012 succeeded,manifest_file_number is 12, next_file_number is 16, last_sequence is 1, log_number is 5,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:18.136004 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 5 +2025/03/30-11:04:18.136069 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 0e17eec6-49fd-4260-b9f6-242cf4d59760 +2025/03/30-11:04:18.136146 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058136144, "job": 1, "event": "recovery_started", "wal_files": [4, 11]} +2025/03/30-11:04:18.136148 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:18.136309 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #11 mode 2 +2025/03/30-11:04:18.136749 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058136738, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 17, "file_size": 1285, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 2, "largest_seqno": 3, "table_properties": {"data_size": 104, "index_size": 51, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 69, "raw_key_size": 84, "raw_average_key_size": 42, "raw_value_size": 1, "raw_average_value_size": 0, "num_data_blocks": 1, "num_entries": 2, "num_filter_entries": 2, "num_deletions": 1, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "bloomfilter", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "NoCompression", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1743347058, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "0e17eec6-49fd-4260-b9f6-242cf4d59760", "db_session_id": "7MUCSF891X500MQRN1NG", "orig_file_number": 17, "seqno_to_time_mapping": "N/A"}} +2025/03/30-11:04:18.136815 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058136814, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:18.136870 8029035584 [db/version_set.cc:5369] Creating manifest 19 +2025/03/30-11:04:18.137963 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12d309720 +2025/03/30-11:04:18.137992 8029035584 DB pointer 0x12f035600 +2025/03/30-11:04:18.138005 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:18.138851 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:18.138853 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:18.138854 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:18.138854 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:18.138855 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:18.138856 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:18.138857 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:18.138858 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.138858 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:18.138859 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:18.138860 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:18.138861 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:18.138861 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:18.138862 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.138863 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.138864 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.138864 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.138865 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.138866 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.138866 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.138867 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:18.138868 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:18.138869 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.138869 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.138870 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:18.138871 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:18.138872 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:18.138873 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.138874 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:18.138875 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:18.138875 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:18.138876 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:18.138877 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.138878 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:18.138878 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:18.138879 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:18.138880 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:18.138880 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:18.138881 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:18.138882 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:18.138883 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:18.138883 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:18.138884 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:18.138885 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:18.138886 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:18.138886 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:18.138887 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:18.138888 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:18.138888 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.138889 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.138890 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.138891 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:18.138891 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:18.138892 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/MANIFEST-000025 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/MANIFEST-000025 new file mode 100644 index 0000000..dcd60a2 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/MANIFEST-000025 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/OPTIONS-000027 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/OPTIONS-000027 new file mode 100644 index 0000000..b652a88 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/OPTIONS-000027 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/OPTIONS-000029 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/OPTIONS-000029 new file mode 100644 index 0000000..b8265ec Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/accounts/OPTIONS-000029 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000004.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000004.log new file mode 100644 index 0000000..dd08dc7 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000004.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000010.sst b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000010.sst new file mode 100644 index 0000000..f224627 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000010.sst differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000011.blob b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000011.blob new file mode 100644 index 0000000..1eb3db2 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000011.blob differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000012.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000012.log new file mode 100644 index 0000000..1da77dd Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000012.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000018.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000018.log new file mode 100644 index 0000000..ddbfbfe Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/000018.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/CURRENT b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/CURRENT new file mode 100644 index 0000000..549badf Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/CURRENT differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/IDENTITY b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/IDENTITY new file mode 100644 index 0000000..d986164 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/IDENTITY differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOCK b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOG b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOG new file mode 100644 index 0000000..d234bde --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOG @@ -0,0 +1,332 @@ +2025/03/30-11:04:47.346610 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:47.346632 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:47.346633 8029035584 DB SUMMARY +2025/03/30-11:04:47.346633 8029035584 DB Session ID: 5WJ1J1MXYEBJX1PPHEZ0 +2025/03/30-11:04:47.346668 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:47.346669 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:47.346672 8029035584 MANIFEST file: MANIFEST-000013 size: 328 Bytes +2025/03/30-11:04:47.346673 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks dir, Total Num: 1, files: 000010.sst +2025/03/30-11:04:47.346674 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks: 000004.log size: 31088 ; 000012.log size: 0 ; +2025/03/30-11:04:47.346675 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:47.346675 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:47.346676 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:47.346676 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:47.346676 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:47.346677 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:47.346677 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:47.346678 8029035584 Options.env: 0x600000b7d980 +2025/03/30-11:04:47.346678 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:47.346679 8029035584 Options.info_log: 0x11f607658 +2025/03/30-11:04:47.346679 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:47.346680 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:47.346680 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:47.346681 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:47.346681 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:47.346682 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:47.346682 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:47.346682 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:47.346683 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:47.346683 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:47.346684 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:47.346684 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:47.346685 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:47.346685 8029035584 Options.create_missing_column_families: 0 +2025/03/30-11:04:47.346686 8029035584 Options.db_log_dir: +2025/03/30-11:04:47.346686 8029035584 Options.wal_dir: +2025/03/30-11:04:47.346687 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:47.346687 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:47.346687 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:47.346688 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:47.346688 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:47.346689 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:47.346689 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:47.346690 8029035584 Options.db_write_buffer_size: 0 +2025/03/30-11:04:47.346690 8029035584 Options.write_buffer_manager: 0x60000147e700 +2025/03/30-11:04:47.346691 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:47.346691 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:47.346692 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:47.346692 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:47.346693 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:47.346693 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:47.346693 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:47.346694 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:47.346694 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:47.346695 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:47.346695 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:47.346696 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:47.346696 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:47.346697 8029035584 Options.row_cache: None +2025/03/30-11:04:47.346697 8029035584 Options.wal_filter: None +2025/03/30-11:04:47.346698 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:47.346698 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:47.346698 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:47.346699 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:47.346699 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:47.346700 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:47.346700 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:47.346701 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:47.346701 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:47.346702 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:47.346702 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:47.346702 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:47.346703 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:47.346703 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:47.346704 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:47.346704 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:47.346705 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:47.346705 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:47.346706 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:47.346706 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:47.346707 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:47.346707 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:47.346708 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:47.346708 8029035584 Options.max_total_wal_size: 268435456 +2025/03/30-11:04:47.346708 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:47.346709 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:47.346709 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:47.346710 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:47.346710 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:47.346711 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:47.346711 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:47.346712 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:47.346712 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:47.346713 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:47.346713 8029035584 Compression algorithms supported: +2025/03/30-11:04:47.346714 8029035584 kZSTD supported: 0 +2025/03/30-11:04:47.346714 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:47.346715 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:47.346715 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:47.346716 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:47.346716 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:47.346717 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:47.346717 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:47.346721 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:47.346721 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:47.346804 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks/MANIFEST-000013 +2025/03/30-11:04:47.346841 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:47.346842 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:47.346842 8029035584 Options.merge_operator: None +2025/03/30-11:04:47.346843 8029035584 Options.compaction_filter: None +2025/03/30-11:04:47.346843 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:47.346844 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:47.346844 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:47.346845 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:47.346850 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600002f65520) + cache_index_and_filter_blocks: 0 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 0 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 1 + block_cache: 0x0 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:47.346850 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:47.346851 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:47.346851 8029035584 Options.compression: NoCompression +2025/03/30-11:04:47.346852 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:47.346852 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:47.346853 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:47.346853 8029035584 Options.num_levels: 7 +2025/03/30-11:04:47.346854 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:47.346854 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:47.346855 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:47.346855 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:47.346855 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:47.346856 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:47.346856 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.346857 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.346857 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.346858 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:47.346858 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.346859 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.346859 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:47.346860 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:47.346860 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:47.346861 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.346861 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.346862 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.346862 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.346862 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:47.346863 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.346863 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.346864 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.346864 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.346865 8029035584 Options.target_file_size_base: 1048576 +2025/03/30-11:04:47.346865 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:47.346866 8029035584 Options.max_bytes_for_level_base: 16777216 +2025/03/30-11:04:47.346866 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:47.346867 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.346867 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:47.346868 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:47.346868 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:47.346869 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:47.346869 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:47.346870 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:47.346870 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:47.346870 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.346871 8029035584 Options.max_compaction_bytes: 26214400 +2025/03/30-11:04:47.346871 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.346872 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:47.346872 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.346873 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.346873 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:47.346874 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:47.346874 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:47.346875 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:47.346875 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:47.346876 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:47.346876 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:47.346877 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:47.346878 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:47.346879 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:47.346879 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:47.346880 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:47.346880 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:47.346881 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:47.346881 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:47.346881 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.346882 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:47.346882 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:47.346883 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:47.346883 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:47.346884 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:47.346884 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:47.346885 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:47.346885 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:47.346886 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:47.346886 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:47.346886 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:47.346887 8029035584 Options.enable_blob_files: true +2025/03/30-11:04:47.346887 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:47.346888 8029035584 Options.blob_file_size: 16777216 +2025/03/30-11:04:47.346888 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:47.346889 8029035584 Options.enable_blob_garbage_collection: true +2025/03/30-11:04:47.346889 8029035584 Options.blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-11:04:47.346890 8029035584 Options.blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-11:04:47.346890 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.346891 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:47.346891 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.346892 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:47.347037 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks/MANIFEST-000013 succeeded,manifest_file_number is 13, next_file_number is 17, last_sequence is 89, log_number is 5,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:47.347039 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 5 +2025/03/30-11:04:47.347073 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: aa69378b-4363-4201-817b-06cb483ba6cf +2025/03/30-11:04:47.347151 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087347150, "job": 1, "event": "recovery_started", "wal_files": [4, 12]} +2025/03/30-11:04:47.347152 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:47.347228 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #12 mode 2 +2025/03/30-11:04:47.347290 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087347289, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:47.347336 8029035584 [db/version_set.cc:5369] Creating manifest 19 +2025/03/30-11:04:47.348094 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x11f610390 +2025/03/30-11:04:47.348112 8029035584 DB pointer 0x11f838600 +2025/03/30-11:04:47.348122 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:47.348653 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:47.348654 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:47.348655 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:47.348655 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:47.348656 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:47.348656 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:47.348657 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:47.348657 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.348658 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:47.348658 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:47.348659 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:47.348659 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:47.348660 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:47.348660 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.348660 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.348661 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.348661 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.348662 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.348662 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 26214400 +2025/03/30-11:04:47.348663 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.348663 8029035584 [options/cf_options.cc:1082] target_file_size_base: 1048576 +2025/03/30-11:04:47.348664 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:47.348664 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 16777216 +2025/03/30-11:04:47.348665 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.348665 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:47.348666 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:47.348667 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:47.348667 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.348668 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:47.348668 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:47.348669 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:47.348669 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:47.348670 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.348670 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:47.348671 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:47.348671 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:47.348672 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:47.348672 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:47.348672 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:47.348673 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:47.348673 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:47.348674 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:47.348674 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:47.348675 8029035584 [options/cf_options.cc:1150] enable_blob_files: true +2025/03/30-11:04:47.348675 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:47.348676 8029035584 [options/cf_options.cc:1154] blob_file_size: 16777216 +2025/03/30-11:04:47.348676 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:47.348677 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: true +2025/03/30-11:04:47.348677 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-11:04:47.348678 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-11:04:47.348678 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.348679 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:47.348679 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:47.348679 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-11:04:53.353642 6198161408 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-11:04:53.353852 6198161408 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 6.0 total, 6.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 1/0 5.92 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Sum 1/0 5.92 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 1, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 1.0 + +Uptime(secs): 6.0 total, 6.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOG.old.1743347058139034 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOG.old.1743347058139034 new file mode 100644 index 0000000..4408764 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOG.old.1743347058139034 @@ -0,0 +1,325 @@ +2025/03/30-10:54:54.645945 8029035584 RocksDB version: 8.6.0 +2025/03/30-10:54:54.645973 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-10:54:54.645974 8029035584 DB SUMMARY +2025/03/30-10:54:54.645974 8029035584 DB Session ID: KY92ZR8LCBK63UYA6SDH +2025/03/30-10:54:54.645990 8029035584 SST files in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/blocks dir, Total Num: 0, files: +2025/03/30-10:54:54.645991 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/blocks: +2025/03/30-10:54:54.645992 8029035584 Options.error_if_exists: 0 +2025/03/30-10:54:54.645992 8029035584 Options.create_if_missing: 1 +2025/03/30-10:54:54.645993 8029035584 Options.paranoid_checks: 1 +2025/03/30-10:54:54.645994 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-10:54:54.645994 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-10:54:54.645995 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-10:54:54.645995 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-10:54:54.645996 8029035584 Options.env: 0x6000035a8ae0 +2025/03/30-10:54:54.645997 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-10:54:54.645997 8029035584 Options.info_log: 0x12e70e2f8 +2025/03/30-10:54:54.645998 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-10:54:54.645998 8029035584 Options.statistics: 0x0 +2025/03/30-10:54:54.645999 8029035584 Options.use_fsync: 0 +2025/03/30-10:54:54.646000 8029035584 Options.max_log_file_size: 0 +2025/03/30-10:54:54.646000 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-10:54:54.646001 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-10:54:54.646001 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-10:54:54.646002 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-10:54:54.646003 8029035584 Options.allow_fallocate: 1 +2025/03/30-10:54:54.646003 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-10:54:54.646004 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-10:54:54.646004 8029035584 Options.use_direct_reads: 0 +2025/03/30-10:54:54.646005 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-10:54:54.646005 8029035584 Options.create_missing_column_families: 0 +2025/03/30-10:54:54.646006 8029035584 Options.db_log_dir: +2025/03/30-10:54:54.646007 8029035584 Options.wal_dir: +2025/03/30-10:54:54.646007 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-10:54:54.646008 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-10:54:54.646008 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-10:54:54.646009 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-10:54:54.646009 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-10:54:54.646010 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-10:54:54.646011 8029035584 Options.advise_random_on_open: 1 +2025/03/30-10:54:54.646011 8029035584 Options.db_write_buffer_size: 0 +2025/03/30-10:54:54.646012 8029035584 Options.write_buffer_manager: 0x600002ab9790 +2025/03/30-10:54:54.646012 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-10:54:54.646013 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-10:54:54.646014 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-10:54:54.646014 8029035584 Options.rate_limiter: 0x0 +2025/03/30-10:54:54.646015 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-10:54:54.646015 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-10:54:54.646016 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-10:54:54.646017 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-10:54:54.646017 8029035584 Options.unordered_write: 0 +2025/03/30-10:54:54.646018 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-10:54:54.646018 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-10:54:54.646019 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-10:54:54.646019 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-10:54:54.646020 8029035584 Options.row_cache: None +2025/03/30-10:54:54.646021 8029035584 Options.wal_filter: None +2025/03/30-10:54:54.646021 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-10:54:54.646022 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-10:54:54.646022 8029035584 Options.two_write_queues: 0 +2025/03/30-10:54:54.646023 8029035584 Options.manual_wal_flush: 0 +2025/03/30-10:54:54.646024 8029035584 Options.wal_compression: 0 +2025/03/30-10:54:54.646024 8029035584 Options.atomic_flush: 0 +2025/03/30-10:54:54.646025 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-10:54:54.646025 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-10:54:54.646026 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-10:54:54.646026 8029035584 Options.log_readahead_size: 0 +2025/03/30-10:54:54.646027 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-10:54:54.646028 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-10:54:54.646028 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-10:54:54.646029 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-10:54:54.646030 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-10:54:54.646030 8029035584 Options.db_host_id: __hostname__ +2025/03/30-10:54:54.646031 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-10:54:54.646031 8029035584 Options.max_background_jobs: 12 +2025/03/30-10:54:54.646032 8029035584 Options.max_background_compactions: -1 +2025/03/30-10:54:54.646033 8029035584 Options.max_subcompactions: 1 +2025/03/30-10:54:54.646033 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-10:54:54.646034 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-10:54:54.646034 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-10:54:54.646035 8029035584 Options.max_total_wal_size: 268435456 +2025/03/30-10:54:54.646036 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-10:54:54.646036 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-10:54:54.646037 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-10:54:54.646037 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-10:54:54.646038 8029035584 Options.max_open_files: -1 +2025/03/30-10:54:54.646039 8029035584 Options.bytes_per_sync: 0 +2025/03/30-10:54:54.646039 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-10:54:54.646040 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-10:54:54.646040 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-10:54:54.646041 8029035584 Options.max_background_flushes: -1 +2025/03/30-10:54:54.646042 8029035584 Compression algorithms supported: +2025/03/30-10:54:54.646042 8029035584 kZSTD supported: 0 +2025/03/30-10:54:54.646043 8029035584 kZlibCompression supported: 0 +2025/03/30-10:54:54.646043 8029035584 kXpressCompression supported: 0 +2025/03/30-10:54:54.646044 8029035584 kSnappyCompression supported: 0 +2025/03/30-10:54:54.646045 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-10:54:54.646045 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-10:54:54.646046 8029035584 kLZ4Compression supported: 0 +2025/03/30-10:54:54.646047 8029035584 kBZip2Compression supported: 0 +2025/03/30-10:54:54.646050 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-10:54:54.646051 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-10:54:54.646300 8029035584 [db/db_impl/db_impl_open.cc:319] Creating manifest 1 +2025/03/30-10:54:54.646543 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/blocks/MANIFEST-000001 +2025/03/30-10:54:54.646561 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-10:54:54.646562 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-10:54:54.646563 8029035584 Options.merge_operator: None +2025/03/30-10:54:54.646563 8029035584 Options.compaction_filter: None +2025/03/30-10:54:54.646564 8029035584 Options.compaction_filter_factory: None +2025/03/30-10:54:54.646564 8029035584 Options.sst_partitioner_factory: None +2025/03/30-10:54:54.646565 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-10:54:54.646565 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-10:54:54.646570 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x6000011931c0) + cache_index_and_filter_blocks: 0 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 0 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 1 + block_cache: 0x0 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-10:54:54.646571 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-10:54:54.646571 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-10:54:54.646572 8029035584 Options.compression: NoCompression +2025/03/30-10:54:54.646572 8029035584 Options.bottommost_compression: Disabled +2025/03/30-10:54:54.646573 8029035584 Options.prefix_extractor: nullptr +2025/03/30-10:54:54.646573 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-10:54:54.646574 8029035584 Options.num_levels: 7 +2025/03/30-10:54:54.646574 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-10:54:54.646575 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-10:54:54.646575 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-10:54:54.646576 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-10:54:54.646576 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-10:54:54.646577 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-10:54:54.646577 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.646578 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.646578 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.646579 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-10:54:54.646580 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.646580 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.646581 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-10:54:54.646581 8029035584 Options.compression_opts.level: 32767 +2025/03/30-10:54:54.646582 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-10:54:54.646582 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.646583 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.646583 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.646584 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.646584 8029035584 Options.compression_opts.enabled: false +2025/03/30-10:54:54.646585 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.646585 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.646586 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.646586 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.646587 8029035584 Options.target_file_size_base: 1048576 +2025/03/30-10:54:54.646587 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-10:54:54.646588 8029035584 Options.max_bytes_for_level_base: 16777216 +2025/03/30-10:54:54.646588 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-10:54:54.646589 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.646589 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-10:54:54.646590 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-10:54:54.646590 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-10:54:54.646591 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-10:54:54.646591 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-10:54:54.646592 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-10:54:54.646592 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-10:54:54.646593 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.646593 8029035584 Options.max_compaction_bytes: 26214400 +2025/03/30-10:54:54.646594 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.646594 8029035584 Options.arena_block_size: 1048576 +2025/03/30-10:54:54.646595 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.646595 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.646596 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-10:54:54.646596 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-10:54:54.646597 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-10:54:54.646597 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-10:54:54.646598 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-10:54:54.646598 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-10:54:54.646599 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-10:54:54.646600 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-10:54:54.646600 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-10:54:54.646601 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-10:54:54.646603 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-10:54:54.646603 8029035584 Options.table_properties_collectors: +2025/03/30-10:54:54.646604 8029035584 Options.inplace_update_support: 0 +2025/03/30-10:54:54.646604 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-10:54:54.646605 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-10:54:54.646605 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.646606 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-10:54:54.646606 8029035584 Options.bloom_locality: 0 +2025/03/30-10:54:54.646607 8029035584 Options.max_successive_merges: 0 +2025/03/30-10:54:54.646607 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-10:54:54.646608 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-10:54:54.646608 8029035584 Options.force_consistency_checks: 1 +2025/03/30-10:54:54.646609 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-10:54:54.646609 8029035584 Options.ttl: 2592000 +2025/03/30-10:54:54.646610 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-10:54:54.646610 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-10:54:54.646611 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-10:54:54.646611 8029035584 Options.enable_blob_files: true +2025/03/30-10:54:54.646612 8029035584 Options.min_blob_size: 0 +2025/03/30-10:54:54.646612 8029035584 Options.blob_file_size: 16777216 +2025/03/30-10:54:54.646613 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-10:54:54.646613 8029035584 Options.enable_blob_garbage_collection: true +2025/03/30-10:54:54.646614 8029035584 Options.blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-10:54:54.646615 8029035584 Options.blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-10:54:54.646615 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.646616 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-10:54:54.646616 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.646617 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-10:54:54.646767 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/blocks/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-10:54:54.646768 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-10:54:54.646790 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: aa69378b-4363-4201-817b-06cb483ba6cf +2025/03/30-10:54:54.646868 8029035584 [db/version_set.cc:5369] Creating manifest 5 +2025/03/30-10:54:54.647619 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12e70faf0 +2025/03/30-10:54:54.647640 8029035584 DB pointer 0x13906f000 +2025/03/30-10:54:54.647647 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-10:54:54.648144 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-10:54:54.648145 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-10:54:54.648146 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-10:54:54.648146 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-10:54:54.648147 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-10:54:54.648147 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-10:54:54.648148 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-10:54:54.648149 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.648149 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-10:54:54.648150 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-10:54:54.648150 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-10:54:54.648151 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-10:54:54.648151 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-10:54:54.648152 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.648152 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.648153 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.648153 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.648154 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.648154 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 26214400 +2025/03/30-10:54:54.648155 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.648155 8029035584 [options/cf_options.cc:1082] target_file_size_base: 1048576 +2025/03/30-10:54:54.648156 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-10:54:54.648156 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 16777216 +2025/03/30-10:54:54.648157 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.648158 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-10:54:54.648158 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-10:54:54.648159 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-10:54:54.648160 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.648160 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-10:54:54.648161 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-10:54:54.648161 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-10:54:54.648162 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-10:54:54.648162 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.648163 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-10:54:54.648163 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-10:54:54.648164 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-10:54:54.648164 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-10:54:54.648165 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-10:54:54.648165 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-10:54:54.648166 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-10:54:54.648167 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-10:54:54.648167 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-10:54:54.648168 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-10:54:54.648168 8029035584 [options/cf_options.cc:1150] enable_blob_files: true +2025/03/30-10:54:54.648169 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-10:54:54.648169 8029035584 [options/cf_options.cc:1154] blob_file_size: 16777216 +2025/03/30-10:54:54.648170 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-10:54:54.648170 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: true +2025/03/30-10:54:54.648171 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-10:54:54.648171 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-10:54:54.648172 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.648172 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-10:54:54.648173 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-10:54:54.648174 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-10:55:03.651477 6142537728 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-10:55:03.651589 6142537728 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 9.0 total, 9.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 9.0 total, 9.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOG.old.1743347087346489 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOG.old.1743347087346489 new file mode 100644 index 0000000..fc5d99b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/LOG.old.1743347087346489 @@ -0,0 +1,298 @@ +2025/03/30-11:04:18.139251 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:18.139282 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:18.139283 8029035584 DB SUMMARY +2025/03/30-11:04:18.139284 8029035584 DB Session ID: 7MUCSF891X500MQRN1NJ +2025/03/30-11:04:18.139338 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:18.139340 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:18.139358 8029035584 MANIFEST file: MANIFEST-000005 size: 83 Bytes +2025/03/30-11:04:18.139359 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks dir, Total Num: 0, files: +2025/03/30-11:04:18.139360 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks: 000004.log size: 31088 ; +2025/03/30-11:04:18.139361 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:18.139362 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:18.139363 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:18.139363 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:18.139364 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:18.139365 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:18.139365 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:18.139366 8029035584 Options.env: 0x600003b806c0 +2025/03/30-11:04:18.139367 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:18.139368 8029035584 Options.info_log: 0x12d4046d8 +2025/03/30-11:04:18.139368 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:18.139369 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:18.139370 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:18.139370 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:18.139371 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:18.139372 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:18.139372 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:18.139373 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:18.139374 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:18.139374 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:18.139375 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:18.139376 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:18.139376 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:18.139377 8029035584 Options.create_missing_column_families: 0 +2025/03/30-11:04:18.139378 8029035584 Options.db_log_dir: +2025/03/30-11:04:18.139378 8029035584 Options.wal_dir: +2025/03/30-11:04:18.139379 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:18.139380 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:18.139380 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:18.139381 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:18.139382 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:18.139382 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:18.139383 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:18.139384 8029035584 Options.db_write_buffer_size: 0 +2025/03/30-11:04:18.139384 8029035584 Options.write_buffer_manager: 0x600002484340 +2025/03/30-11:04:18.139385 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:18.139386 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:18.139386 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:18.139387 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:18.139388 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:18.139389 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:18.139389 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:18.139390 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:18.139390 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:18.139391 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:18.139392 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:18.139392 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:18.139393 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:18.139394 8029035584 Options.row_cache: None +2025/03/30-11:04:18.139394 8029035584 Options.wal_filter: None +2025/03/30-11:04:18.139395 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:18.139396 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:18.139396 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:18.139397 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:18.139398 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:18.139398 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:18.139399 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:18.139400 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:18.139400 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:18.139401 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:18.139402 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:18.139402 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:18.139403 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:18.139404 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:18.139404 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:18.139405 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:18.139406 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:18.139406 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:18.139407 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:18.139408 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:18.139408 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:18.139409 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:18.139410 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:18.139410 8029035584 Options.max_total_wal_size: 268435456 +2025/03/30-11:04:18.139411 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:18.139412 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:18.139413 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:18.139413 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:18.139414 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:18.139415 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:18.139415 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:18.139416 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:18.139417 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:18.139417 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:18.139418 8029035584 Compression algorithms supported: +2025/03/30-11:04:18.139419 8029035584 kZSTD supported: 0 +2025/03/30-11:04:18.139419 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:18.139420 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:18.139421 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:18.139421 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:18.139422 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:18.139423 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:18.139424 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:18.139428 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:18.139429 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:18.139592 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks/MANIFEST-000005 +2025/03/30-11:04:18.139670 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:18.139671 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:18.139672 8029035584 Options.merge_operator: None +2025/03/30-11:04:18.139673 8029035584 Options.compaction_filter: None +2025/03/30-11:04:18.139673 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:18.139674 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:18.139675 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:18.139675 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:18.139683 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001f94b80) + cache_index_and_filter_blocks: 0 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 0 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 1 + block_cache: 0x0 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:18.139684 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:18.139684 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:18.139685 8029035584 Options.compression: NoCompression +2025/03/30-11:04:18.139686 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:18.139687 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:18.139687 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:18.139688 8029035584 Options.num_levels: 7 +2025/03/30-11:04:18.139689 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:18.139689 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:18.139690 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:18.139691 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:18.139691 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:18.139692 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:18.139693 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.139694 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.139694 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.139695 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:18.139696 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.139696 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.139697 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:18.139698 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:18.139698 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:18.139699 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.139700 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.139700 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.139701 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.139702 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:18.139703 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.139703 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.139704 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.139705 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.139705 8029035584 Options.target_file_size_base: 1048576 +2025/03/30-11:04:18.139706 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:18.139707 8029035584 Options.max_bytes_for_level_base: 16777216 +2025/03/30-11:04:18.139707 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:18.139708 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.139709 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:18.139710 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:18.139710 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:18.139711 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:18.139712 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:18.139712 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:18.139713 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:18.139714 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.139714 8029035584 Options.max_compaction_bytes: 26214400 +2025/03/30-11:04:18.139715 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.139716 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:18.139716 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.139717 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.139718 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:18.139718 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:18.139719 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:18.139720 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:18.139721 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:18.139721 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:18.139722 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:18.139723 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:18.139725 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:18.139726 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:18.139726 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:18.139727 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:18.139728 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:18.139729 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:18.139729 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:18.139730 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.139731 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:18.139731 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:18.139732 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:18.139733 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:18.139733 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:18.139734 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:18.139735 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:18.139735 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:18.139736 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:18.139737 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:18.139737 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:18.139738 8029035584 Options.enable_blob_files: true +2025/03/30-11:04:18.139739 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:18.139739 8029035584 Options.blob_file_size: 16777216 +2025/03/30-11:04:18.139740 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:18.139741 8029035584 Options.enable_blob_garbage_collection: true +2025/03/30-11:04:18.139742 8029035584 Options.blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-11:04:18.139742 8029035584 Options.blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-11:04:18.139743 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.139744 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:18.139745 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.139745 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:18.139952 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/blocks/MANIFEST-000005 succeeded,manifest_file_number is 5, next_file_number is 9, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:18.139954 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-11:04:18.140025 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: aa69378b-4363-4201-817b-06cb483ba6cf +2025/03/30-11:04:18.140109 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058140108, "job": 1, "event": "recovery_started", "wal_files": [4]} +2025/03/30-11:04:18.140111 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:18.140861 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058140857, "cf_name": "default", "job": 1, "event": "blob_file_creation", "file_number": 11, "total_blob_count": 89, "total_blob_bytes": 31809, "file_checksum": "", "file_checksum_func_name": "Unknown", "status": "OK"} +2025/03/30-11:04:18.140863 8029035584 [db/blob/blob_file_builder.cc:351] [default] [JOB 1] Generated blob file #11: 89 total blobs, 31809 total bytes +2025/03/30-11:04:18.140925 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058140911, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 10, "file_size": 6067, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 1, "largest_seqno": 89, "table_properties": {"data_size": 4782, "index_size": 84, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 133, "raw_key_size": 6586, "raw_average_key_size": 74, "raw_value_size": 656, "raw_average_value_size": 7, "num_data_blocks": 1, "num_entries": 89, "num_filter_entries": 89, "num_deletions": 0, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "bloomfilter", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "NoCompression", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1743347058, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "aa69378b-4363-4201-817b-06cb483ba6cf", "db_session_id": "7MUCSF891X500MQRN1NJ", "orig_file_number": 10, "seqno_to_time_mapping": "N/A"}, "oldest_blob_file_number": 11} +2025/03/30-11:04:18.140995 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058140994, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:18.141059 8029035584 [db/version_set.cc:5369] Creating manifest 13 +2025/03/30-11:04:18.142157 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12d40e5a0 +2025/03/30-11:04:18.142186 8029035584 DB pointer 0x12d80d200 +2025/03/30-11:04:18.142196 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:18.142934 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:18.142935 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:18.142936 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:18.142937 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:18.142937 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:18.142938 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:18.142939 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:18.142940 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.142940 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:18.142941 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:18.142942 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:18.142942 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:18.142943 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:18.142944 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.142945 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.142945 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.142946 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.142947 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.142947 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 26214400 +2025/03/30-11:04:18.142948 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.142949 8029035584 [options/cf_options.cc:1082] target_file_size_base: 1048576 +2025/03/30-11:04:18.142949 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:18.142950 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 16777216 +2025/03/30-11:04:18.142951 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.142951 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:18.142952 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:18.142953 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:18.142954 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.142955 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:18.142955 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:18.142956 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:18.142956 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:18.142957 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.142958 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:18.142958 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:18.142959 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:18.142960 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:18.142960 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:18.142961 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:18.142962 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:18.142962 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:18.142963 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:18.142964 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:18.142964 8029035584 [options/cf_options.cc:1150] enable_blob_files: true +2025/03/30-11:04:18.142965 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:18.142966 8029035584 [options/cf_options.cc:1154] blob_file_size: 16777216 +2025/03/30-11:04:18.142966 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:18.142967 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: true +2025/03/30-11:04:18.142968 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.750000 +2025/03/30-11:04:18.142968 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 0.500000 +2025/03/30-11:04:18.142969 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.142970 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:18.142970 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:18.142971 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/MANIFEST-000019 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/MANIFEST-000019 new file mode 100644 index 0000000..73a1e3e Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/MANIFEST-000019 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/OPTIONS-000021 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/OPTIONS-000021 new file mode 100644 index 0000000..1c80bf6 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/OPTIONS-000021 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/OPTIONS-000023 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/OPTIONS-000023 new file mode 100644 index 0000000..83c48ea Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/blocks/OPTIONS-000023 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000004.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000004.log new file mode 100644 index 0000000..5c7a88a Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000004.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000010.sst b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000010.sst new file mode 100644 index 0000000..664bc60 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000010.sst differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000011.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000011.log new file mode 100644 index 0000000..a937d63 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000011.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000017.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000017.log new file mode 100644 index 0000000..f594ca8 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/000017.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/CURRENT b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/CURRENT new file mode 100644 index 0000000..3843845 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/CURRENT differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/IDENTITY b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/IDENTITY new file mode 100644 index 0000000..2128fe5 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/IDENTITY differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOCK b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOG b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOG new file mode 100644 index 0000000..a774483 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOG @@ -0,0 +1,342 @@ +2025/03/30-11:04:47.348866 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:47.348889 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:47.348889 8029035584 DB SUMMARY +2025/03/30-11:04:47.348890 8029035584 DB Session ID: 5WJ1J1MXYEBJX1PPHEZ1 +2025/03/30-11:04:47.348909 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:47.348910 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:47.348912 8029035584 MANIFEST file: MANIFEST-000012 size: 388 Bytes +2025/03/30-11:04:47.348913 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core dir, Total Num: 1, files: 000010.sst +2025/03/30-11:04:47.348914 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core: 000004.log size: 58306 ; 000011.log size: 0 ; +2025/03/30-11:04:47.348915 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:47.348915 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:47.348916 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:47.348916 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:47.348916 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:47.348917 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:47.348917 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:47.348918 8029035584 Options.env: 0x600000b7d800 +2025/03/30-11:04:47.348918 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:47.348919 8029035584 Options.info_log: 0x11f611408 +2025/03/30-11:04:47.348919 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:47.348920 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:47.348920 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:47.348921 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:47.348921 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:47.348922 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:47.348922 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:47.348923 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:47.348923 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:47.348923 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:47.348924 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:47.348924 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:47.348925 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:47.348925 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:47.348926 8029035584 Options.db_log_dir: +2025/03/30-11:04:47.348926 8029035584 Options.wal_dir: +2025/03/30-11:04:47.348927 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:47.348927 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:47.348927 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:47.348928 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:47.348928 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:47.348929 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:47.348929 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:47.348930 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:47.348930 8029035584 Options.write_buffer_manager: 0x60000147e970 +2025/03/30-11:04:47.348931 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:47.348931 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:47.348931 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:47.348932 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:47.348932 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:47.348933 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:47.348933 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:47.348934 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:47.348934 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:47.348935 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:47.348935 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:47.348935 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:47.348936 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:47.348936 8029035584 Options.row_cache: None +2025/03/30-11:04:47.348937 8029035584 Options.wal_filter: None +2025/03/30-11:04:47.348937 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:47.348938 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:47.348938 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:47.348939 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:47.348939 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:47.348939 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:47.348940 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:47.348940 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:47.348941 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:47.348941 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:47.348942 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:47.348942 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:47.348943 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:47.348943 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:47.348944 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:47.348944 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:47.348944 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:47.348945 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:47.348945 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:47.348946 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:47.348946 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:47.348947 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:47.348947 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:47.348948 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:47.348948 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:47.348949 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:47.348949 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:47.348950 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:47.348950 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:47.348951 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:47.348951 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:47.348951 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:47.348952 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:47.348952 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:47.348953 8029035584 Compression algorithms supported: +2025/03/30-11:04:47.348953 8029035584 kZSTD supported: 0 +2025/03/30-11:04:47.348954 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:47.348954 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:47.348955 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:47.348955 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:47.348956 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:47.348956 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:47.348957 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:47.348960 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:47.348960 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:47.349017 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core/MANIFEST-000012 +2025/03/30-11:04:47.349041 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:47.349042 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:47.349042 8029035584 Options.merge_operator: None +2025/03/30-11:04:47.349043 8029035584 Options.compaction_filter: None +2025/03/30-11:04:47.349043 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:47.349044 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:47.349044 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:47.349045 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:47.349052 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600002f65ac0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600001a7cf18 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:47.349053 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:47.349053 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:47.349054 8029035584 Options.compression: NoCompression +2025/03/30-11:04:47.349054 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:47.349055 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:47.349055 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:47.349056 8029035584 Options.num_levels: 7 +2025/03/30-11:04:47.349056 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:47.349057 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:47.349057 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:47.349057 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:47.349058 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:47.349058 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:47.349059 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.349059 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.349060 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.349060 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:47.349061 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.349061 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.349062 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:47.349062 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:47.349063 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:47.349063 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.349063 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.349064 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.349064 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.349065 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:47.349065 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.349066 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.349066 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.349067 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.349067 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:47.349067 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:47.349068 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.349068 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:47.349069 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.349069 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:47.349070 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:47.349070 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:47.349071 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:47.349071 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:47.349072 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:47.349072 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:47.349073 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.349073 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.349074 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.349074 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:47.349074 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.349075 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.349075 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:47.349076 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:47.349076 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:47.349077 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:47.349077 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:47.349078 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:47.349079 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:47.349080 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:47.349080 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:47.349081 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:47.349081 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:47.349082 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:47.349082 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:47.349083 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:47.349083 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:47.349083 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.349084 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:47.349084 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:47.349085 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:47.349085 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:47.349086 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:47.349086 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:47.349087 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:47.349087 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:47.349088 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:47.349088 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:47.349088 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:47.349089 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:47.349089 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:47.349090 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:47.349090 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:47.349091 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:47.349091 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.349092 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.349092 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.349093 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:47.349093 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.349094 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:47.349250 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core/MANIFEST-000012 succeeded,manifest_file_number is 12, next_file_number is 16, last_sequence is 419, log_number is 5,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:47.349252 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 5 +2025/03/30-11:04:47.349279 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 4b14c4ec-22ca-4e6a-ba52-1f6b15a01faa +2025/03/30-11:04:47.349319 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087349318, "job": 1, "event": "recovery_started", "wal_files": [4, 11]} +2025/03/30-11:04:47.349320 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:47.349417 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #11 mode 2 +2025/03/30-11:04:47.349468 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087349467, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:47.349508 8029035584 [db/version_set.cc:5369] Creating manifest 18 +2025/03/30-11:04:47.350269 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x11f611c60 +2025/03/30-11:04:47.350291 8029035584 DB pointer 0x11f84fc00 +2025/03/30-11:04:47.350300 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:47.350839 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:47.350840 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:47.350840 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:47.350841 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:47.350841 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:47.350842 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:47.350842 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:47.350843 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.350843 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:47.350844 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:47.350844 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:47.350845 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:47.350845 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:47.350846 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.350846 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.350847 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.350847 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.350847 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.350848 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.350848 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.350849 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:47.350849 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:47.350850 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.350850 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.350851 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:47.350851 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:47.350852 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:47.350852 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.350853 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:47.350853 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:47.350854 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:47.350854 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:47.350855 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.350855 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:47.350855 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:47.350856 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:47.350856 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:47.350857 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:47.350857 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:47.350858 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:47.350858 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:47.350859 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:47.350859 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:47.350860 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:47.350860 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:47.350861 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:47.350861 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:47.350861 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:47.350862 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.350862 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.350863 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.350863 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:47.350864 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:47.350864 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-11:04:56.354844 6198161408 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-11:04:56.354975 6198161408 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 9.0 total, 9.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 1/0 33.65 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Sum 1/0 33.65 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 9.0 total, 9.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x600001a7cf18#98197 capacity: 64.00 MB seed: 152519891 usage: 1.01 KB table_size: 1024 occupancy: 3 collections: 1 last_copies: 0 last_secs: 0.000219 secs_since: 0 +Block cache entry stats(count,size,portion): FilterBlock(1,0.47 KB,0.000722706%) IndexBlock(1,0.29 KB,0.000436604%) Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOG.old.1743347058143088 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOG.old.1743347058143088 new file mode 100644 index 0000000..ec803e1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOG.old.1743347058143088 @@ -0,0 +1,335 @@ +2025/03/30-10:54:54.648341 8029035584 RocksDB version: 8.6.0 +2025/03/30-10:54:54.648363 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-10:54:54.648364 8029035584 DB SUMMARY +2025/03/30-10:54:54.648364 8029035584 DB Session ID: KY92ZR8LCBK63UYA6SDE +2025/03/30-10:54:54.648374 8029035584 SST files in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/core dir, Total Num: 0, files: +2025/03/30-10:54:54.648375 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/core: +2025/03/30-10:54:54.648375 8029035584 Options.error_if_exists: 0 +2025/03/30-10:54:54.648376 8029035584 Options.create_if_missing: 1 +2025/03/30-10:54:54.648376 8029035584 Options.paranoid_checks: 1 +2025/03/30-10:54:54.648377 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-10:54:54.648377 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-10:54:54.648378 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-10:54:54.648378 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-10:54:54.648379 8029035584 Options.env: 0x6000035a8f00 +2025/03/30-10:54:54.648379 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-10:54:54.648380 8029035584 Options.info_log: 0x12e70e468 +2025/03/30-10:54:54.648380 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-10:54:54.648381 8029035584 Options.statistics: 0x0 +2025/03/30-10:54:54.648381 8029035584 Options.use_fsync: 0 +2025/03/30-10:54:54.648382 8029035584 Options.max_log_file_size: 0 +2025/03/30-10:54:54.648382 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-10:54:54.648383 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-10:54:54.648383 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-10:54:54.648384 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-10:54:54.648384 8029035584 Options.allow_fallocate: 1 +2025/03/30-10:54:54.648385 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-10:54:54.648385 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-10:54:54.648386 8029035584 Options.use_direct_reads: 0 +2025/03/30-10:54:54.648386 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-10:54:54.648387 8029035584 Options.create_missing_column_families: 1 +2025/03/30-10:54:54.648387 8029035584 Options.db_log_dir: +2025/03/30-10:54:54.648388 8029035584 Options.wal_dir: +2025/03/30-10:54:54.648388 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-10:54:54.648389 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-10:54:54.648389 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-10:54:54.648390 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-10:54:54.648390 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-10:54:54.648391 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-10:54:54.648391 8029035584 Options.advise_random_on_open: 1 +2025/03/30-10:54:54.648392 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-10:54:54.648392 8029035584 Options.write_buffer_manager: 0x600002ab9ee0 +2025/03/30-10:54:54.648393 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-10:54:54.648393 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-10:54:54.648394 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-10:54:54.648394 8029035584 Options.rate_limiter: 0x0 +2025/03/30-10:54:54.648395 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-10:54:54.648395 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-10:54:54.648396 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-10:54:54.648396 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-10:54:54.648397 8029035584 Options.unordered_write: 0 +2025/03/30-10:54:54.648397 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-10:54:54.648398 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-10:54:54.648398 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-10:54:54.648399 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-10:54:54.648399 8029035584 Options.row_cache: None +2025/03/30-10:54:54.648400 8029035584 Options.wal_filter: None +2025/03/30-10:54:54.648400 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-10:54:54.648401 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-10:54:54.648401 8029035584 Options.two_write_queues: 0 +2025/03/30-10:54:54.648402 8029035584 Options.manual_wal_flush: 0 +2025/03/30-10:54:54.648402 8029035584 Options.wal_compression: 0 +2025/03/30-10:54:54.648403 8029035584 Options.atomic_flush: 0 +2025/03/30-10:54:54.648403 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-10:54:54.648404 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-10:54:54.648404 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-10:54:54.648404 8029035584 Options.log_readahead_size: 0 +2025/03/30-10:54:54.648405 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-10:54:54.648406 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-10:54:54.648406 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-10:54:54.648407 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-10:54:54.648407 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-10:54:54.648408 8029035584 Options.db_host_id: __hostname__ +2025/03/30-10:54:54.648408 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-10:54:54.648409 8029035584 Options.max_background_jobs: 12 +2025/03/30-10:54:54.648410 8029035584 Options.max_background_compactions: -1 +2025/03/30-10:54:54.648410 8029035584 Options.max_subcompactions: 1 +2025/03/30-10:54:54.648411 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-10:54:54.648412 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-10:54:54.648412 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-10:54:54.648413 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-10:54:54.648414 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-10:54:54.648414 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-10:54:54.648415 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-10:54:54.648415 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-10:54:54.648416 8029035584 Options.max_open_files: -1 +2025/03/30-10:54:54.648417 8029035584 Options.bytes_per_sync: 0 +2025/03/30-10:54:54.648417 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-10:54:54.648418 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-10:54:54.648418 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-10:54:54.648419 8029035584 Options.max_background_flushes: -1 +2025/03/30-10:54:54.648420 8029035584 Compression algorithms supported: +2025/03/30-10:54:54.648420 8029035584 kZSTD supported: 0 +2025/03/30-10:54:54.648421 8029035584 kZlibCompression supported: 0 +2025/03/30-10:54:54.648421 8029035584 kXpressCompression supported: 0 +2025/03/30-10:54:54.648422 8029035584 kSnappyCompression supported: 0 +2025/03/30-10:54:54.648423 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-10:54:54.648423 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-10:54:54.648424 8029035584 kLZ4Compression supported: 0 +2025/03/30-10:54:54.648424 8029035584 kBZip2Compression supported: 0 +2025/03/30-10:54:54.648428 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-10:54:54.648428 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-10:54:54.648696 8029035584 [db/db_impl/db_impl_open.cc:319] Creating manifest 1 +2025/03/30-10:54:54.648949 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/core/MANIFEST-000001 +2025/03/30-10:54:54.648968 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-10:54:54.648969 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-10:54:54.648969 8029035584 Options.merge_operator: None +2025/03/30-10:54:54.648970 8029035584 Options.compaction_filter: None +2025/03/30-10:54:54.648970 8029035584 Options.compaction_filter_factory: None +2025/03/30-10:54:54.648971 8029035584 Options.sst_partitioner_factory: None +2025/03/30-10:54:54.648971 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-10:54:54.648972 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-10:54:54.648978 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x60000118c5e0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x6000024a4a98 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-10:54:54.648979 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-10:54:54.648979 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-10:54:54.648980 8029035584 Options.compression: NoCompression +2025/03/30-10:54:54.648980 8029035584 Options.bottommost_compression: Disabled +2025/03/30-10:54:54.648981 8029035584 Options.prefix_extractor: nullptr +2025/03/30-10:54:54.648981 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-10:54:54.648982 8029035584 Options.num_levels: 7 +2025/03/30-10:54:54.648982 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-10:54:54.648983 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-10:54:54.648983 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-10:54:54.648984 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-10:54:54.648984 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-10:54:54.648985 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-10:54:54.648985 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.648986 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.648986 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.648987 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-10:54:54.648987 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.648988 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.648988 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-10:54:54.648989 8029035584 Options.compression_opts.level: 32767 +2025/03/30-10:54:54.648989 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-10:54:54.648990 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.648990 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.648991 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.648991 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.648992 8029035584 Options.compression_opts.enabled: false +2025/03/30-10:54:54.648992 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.648993 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.648993 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.648994 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.648994 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-10:54:54.648995 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-10:54:54.648995 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.648996 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-10:54:54.648996 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.648997 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-10:54:54.648997 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-10:54:54.648998 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-10:54:54.648998 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-10:54:54.648999 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-10:54:54.648999 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-10:54:54.649000 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-10:54:54.649000 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.649001 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.649001 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.649002 8029035584 Options.arena_block_size: 1048576 +2025/03/30-10:54:54.649002 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.649003 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.649004 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-10:54:54.649004 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-10:54:54.649005 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-10:54:54.649005 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-10:54:54.649006 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-10:54:54.649006 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-10:54:54.649007 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-10:54:54.649007 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-10:54:54.649009 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-10:54:54.649009 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-10:54:54.649010 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-10:54:54.649010 8029035584 Options.table_properties_collectors: +2025/03/30-10:54:54.649011 8029035584 Options.inplace_update_support: 0 +2025/03/30-10:54:54.649011 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-10:54:54.649012 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-10:54:54.649013 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.649013 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-10:54:54.649014 8029035584 Options.bloom_locality: 0 +2025/03/30-10:54:54.649014 8029035584 Options.max_successive_merges: 0 +2025/03/30-10:54:54.649014 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-10:54:54.649015 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-10:54:54.649015 8029035584 Options.force_consistency_checks: 1 +2025/03/30-10:54:54.649016 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-10:54:54.649016 8029035584 Options.ttl: 2592000 +2025/03/30-10:54:54.649017 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-10:54:54.649018 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-10:54:54.649018 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-10:54:54.649018 8029035584 Options.enable_blob_files: false +2025/03/30-10:54:54.649019 8029035584 Options.min_blob_size: 0 +2025/03/30-10:54:54.649019 8029035584 Options.blob_file_size: 268435456 +2025/03/30-10:54:54.649020 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-10:54:54.649020 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-10:54:54.649021 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.649022 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.649022 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.649023 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-10:54:54.649023 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.649024 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-10:54:54.649173 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/core/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-10:54:54.649174 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-10:54:54.649194 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 4b14c4ec-22ca-4e6a-ba52-1f6b15a01faa +2025/03/30-10:54:54.649268 8029035584 [db/version_set.cc:5369] Creating manifest 5 +2025/03/30-10:54:54.649972 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12e711610 +2025/03/30-10:54:54.649986 8029035584 DB pointer 0x139087800 +2025/03/30-10:54:54.649993 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-10:54:54.650731 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-10:54:54.650733 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-10:54:54.650734 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-10:54:54.650735 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-10:54:54.650735 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-10:54:54.650736 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-10:54:54.650737 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-10:54:54.650738 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.650738 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-10:54:54.650739 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-10:54:54.650739 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-10:54:54.650740 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-10:54:54.650740 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-10:54:54.650741 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.650742 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.650742 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.650743 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.650743 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.650744 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.650744 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.650745 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-10:54:54.650746 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-10:54:54.650746 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.650747 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.650747 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-10:54:54.650748 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-10:54:54.650749 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-10:54:54.650750 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.650750 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-10:54:54.650751 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-10:54:54.650751 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-10:54:54.650752 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-10:54:54.650752 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.650753 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-10:54:54.650754 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-10:54:54.650754 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-10:54:54.650755 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-10:54:54.650755 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-10:54:54.650756 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-10:54:54.650757 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-10:54:54.650757 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-10:54:54.650758 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-10:54:54.650758 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-10:54:54.650759 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-10:54:54.650759 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-10:54:54.650760 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-10:54:54.650761 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-10:54:54.650761 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-10:54:54.650762 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.650762 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.650763 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.650764 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-10:54:54.650764 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-10:54:54.650765 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 +2025/03/30-10:55:06.651058 6142537728 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-10:55:06.651195 6142537728 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 12.0 total, 12.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 12.0 total, 12.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x6000024a4a98#97224 capacity: 64.00 MB seed: 152519891 usage: 0.08 KB table_size: 1024 occupancy: 1 collections: 1 last_copies: 0 last_secs: 0.000106 secs_since: 0 +Block cache entry stats(count,size,portion): Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOG.old.1743347087348750 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOG.old.1743347087348750 new file mode 100644 index 0000000..a4a8ce3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/LOG.old.1743347087348750 @@ -0,0 +1,304 @@ +2025/03/30-11:04:18.143276 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:18.143302 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:18.143303 8029035584 DB SUMMARY +2025/03/30-11:04:18.143304 8029035584 DB Session ID: 7MUCSF891X500MQRN1NI +2025/03/30-11:04:18.143339 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:18.143340 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:18.143344 8029035584 MANIFEST file: MANIFEST-000005 size: 83 Bytes +2025/03/30-11:04:18.143345 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core dir, Total Num: 0, files: +2025/03/30-11:04:18.143346 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core: 000004.log size: 58306 ; +2025/03/30-11:04:18.143347 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:18.143347 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:18.143348 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:18.143348 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:18.143349 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:18.143350 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:18.143350 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:18.143351 8029035584 Options.env: 0x600003b80ae0 +2025/03/30-11:04:18.143352 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:18.143352 8029035584 Options.info_log: 0x12d407218 +2025/03/30-11:04:18.143353 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:18.143353 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:18.143354 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:18.143355 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:18.143355 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:18.143356 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:18.143357 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:18.143357 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:18.143358 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:18.143358 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:18.143359 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:18.143360 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:18.143360 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:18.143361 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:18.143361 8029035584 Options.db_log_dir: +2025/03/30-11:04:18.143362 8029035584 Options.wal_dir: +2025/03/30-11:04:18.143363 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:18.143363 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:18.143364 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:18.143365 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:18.143365 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:18.143366 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:18.143366 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:18.143367 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:18.143368 8029035584 Options.write_buffer_manager: 0x6000024845b0 +2025/03/30-11:04:18.143368 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:18.143369 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:18.143370 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:18.143370 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:18.143371 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:18.143371 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:18.143372 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:18.143373 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:18.143373 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:18.143374 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:18.143374 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:18.143375 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:18.143376 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:18.143376 8029035584 Options.row_cache: None +2025/03/30-11:04:18.143377 8029035584 Options.wal_filter: None +2025/03/30-11:04:18.143378 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:18.143378 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:18.143379 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:18.143379 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:18.143380 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:18.143381 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:18.143381 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:18.143382 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:18.143382 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:18.143383 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:18.143384 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:18.143384 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:18.143385 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:18.143386 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:18.143386 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:18.143387 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:18.143387 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:18.143388 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:18.143389 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:18.143389 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:18.143390 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:18.143391 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:18.143391 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:18.143392 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:18.143392 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:18.143393 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:18.143394 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:18.143394 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:18.143395 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:18.143396 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:18.143396 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:18.143397 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:18.143397 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:18.143398 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:18.143399 8029035584 Compression algorithms supported: +2025/03/30-11:04:18.143399 8029035584 kZSTD supported: 0 +2025/03/30-11:04:18.143400 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:18.143401 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:18.143401 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:18.143402 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:18.143403 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:18.143403 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:18.143404 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:18.143408 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:18.143408 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:18.143638 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core/MANIFEST-000005 +2025/03/30-11:04:18.143778 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:18.143779 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:18.143780 8029035584 Options.merge_operator: None +2025/03/30-11:04:18.143781 8029035584 Options.compaction_filter: None +2025/03/30-11:04:18.143781 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:18.143782 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:18.143783 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:18.143783 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:18.143797 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001f97480) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600002a80918 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:18.143798 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:18.143798 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:18.143799 8029035584 Options.compression: NoCompression +2025/03/30-11:04:18.143800 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:18.143800 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:18.143801 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:18.143802 8029035584 Options.num_levels: 7 +2025/03/30-11:04:18.143802 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:18.143803 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:18.143804 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:18.143804 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:18.143805 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:18.143806 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:18.143806 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.143807 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.143808 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.143808 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:18.143809 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.143809 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.143810 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:18.143811 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:18.143811 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:18.143812 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.143813 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.143813 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.143814 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.143815 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:18.143815 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.143816 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.143816 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.143817 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.143818 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:18.143818 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:18.143819 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.143820 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:18.143820 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.143821 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:18.143822 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:18.143822 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:18.143823 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:18.143824 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:18.143824 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:18.143825 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:18.143826 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.143826 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.143827 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.143828 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:18.143828 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.143829 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.143829 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:18.143830 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:18.143831 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:18.143831 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:18.143832 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:18.143833 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:18.143834 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:18.143835 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:18.143836 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:18.143837 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:18.143837 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:18.143838 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:18.143839 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:18.143839 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:18.143840 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:18.143841 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.143841 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:18.143842 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:18.143842 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:18.143843 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:18.143844 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:18.143844 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:18.143845 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:18.143846 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:18.143846 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:18.143847 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:18.143847 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:18.143848 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:18.143849 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:18.143849 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:18.143850 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:18.143851 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:18.143851 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.143852 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.143853 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.143853 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:18.143854 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.143854 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:18.144025 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/core/MANIFEST-000005 succeeded,manifest_file_number is 5, next_file_number is 9, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:18.144027 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-11:04:18.144203 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 4b14c4ec-22ca-4e6a-ba52-1f6b15a01faa +2025/03/30-11:04:18.144259 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058144257, "job": 1, "event": "recovery_started", "wal_files": [4]} +2025/03/30-11:04:18.144260 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:18.145296 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058145284, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 10, "file_size": 34457, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 1, "largest_seqno": 419, "table_properties": {"data_size": 32716, "index_size": 210, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 453, "raw_key_size": 28143, "raw_average_key_size": 85, "raw_value_size": 16227, "raw_average_value_size": 49, "num_data_blocks": 3, "num_entries": 331, "num_filter_entries": 331, "num_deletions": 22, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "bloomfilter", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "NoCompression", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1743347058, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "4b14c4ec-22ca-4e6a-ba52-1f6b15a01faa", "db_session_id": "7MUCSF891X500MQRN1NI", "orig_file_number": 10, "seqno_to_time_mapping": "N/A"}} +2025/03/30-11:04:18.145374 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058145373, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:18.145441 8029035584 [db/version_set.cc:5369] Creating manifest 12 +2025/03/30-11:04:18.146448 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12d410530 +2025/03/30-11:04:18.146470 8029035584 DB pointer 0x12d84e600 +2025/03/30-11:04:18.146480 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:18.147125 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:18.147126 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:18.147127 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:18.147127 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:18.147128 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:18.147129 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:18.147129 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:18.147130 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.147131 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:18.147131 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:18.147132 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:18.147133 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:18.147133 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:18.147134 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.147134 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.147135 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.147136 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.147136 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.147137 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.147138 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.147138 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:18.147139 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:18.147139 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.147140 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.147141 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:18.147141 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:18.147143 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:18.147143 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.147144 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:18.147144 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:18.147145 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:18.147146 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:18.147146 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.147147 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:18.147147 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:18.147148 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:18.147149 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:18.147149 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:18.147150 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:18.147150 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:18.147151 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:18.147152 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:18.147152 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:18.147153 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:18.147153 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:18.147154 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:18.147155 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:18.147155 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:18.147156 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.147157 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.147157 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.147158 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:18.147158 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:18.147159 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/MANIFEST-000018 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/MANIFEST-000018 new file mode 100644 index 0000000..6a46541 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/MANIFEST-000018 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/OPTIONS-000020 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/OPTIONS-000020 new file mode 100644 index 0000000..01cd046 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/OPTIONS-000020 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/OPTIONS-000022 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/OPTIONS-000022 new file mode 100644 index 0000000..275e01e Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/core/OPTIONS-000022 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000004.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000004.log new file mode 100644 index 0000000..27c0a08 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000004.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000010.sst b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000010.sst new file mode 100644 index 0000000..9571710 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000010.sst differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000011.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000011.log new file mode 100644 index 0000000..4238ae7 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000011.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000017.log b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000017.log new file mode 100644 index 0000000..afde903 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/000017.log differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/CURRENT b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/CURRENT new file mode 100644 index 0000000..0dc913a Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/CURRENT differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/IDENTITY b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/IDENTITY new file mode 100644 index 0000000..08ee74d Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/IDENTITY differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOCK b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOG b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOG new file mode 100644 index 0000000..fdd2f18 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOG @@ -0,0 +1,342 @@ +2025/03/30-11:04:47.341622 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:47.341791 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:47.341792 8029035584 DB SUMMARY +2025/03/30-11:04:47.341793 8029035584 DB Session ID: 5WJ1J1MXYEBJX1PPHEZ2 +2025/03/30-11:04:47.341820 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:47.341821 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:47.341824 8029035584 MANIFEST file: MANIFEST-000012 size: 199 Bytes +2025/03/30-11:04:47.341825 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet dir, Total Num: 1, files: 000010.sst +2025/03/30-11:04:47.341825 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet: 000004.log size: 189 ; 000011.log size: 60 ; +2025/03/30-11:04:47.341826 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:47.341827 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:47.341827 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:47.341828 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:47.341828 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:47.341829 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:47.341829 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:47.341829 8029035584 Options.env: 0x600000b744e0 +2025/03/30-11:04:47.341830 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:47.341830 8029035584 Options.info_log: 0x11f705ca8 +2025/03/30-11:04:47.341831 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:47.341831 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:47.341832 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:47.341832 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:47.341832 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:47.341833 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:47.341833 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:47.341834 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:47.341834 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:47.341834 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:47.341835 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:47.341835 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:47.341836 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:47.341836 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:47.341836 8029035584 Options.db_log_dir: +2025/03/30-11:04:47.341837 8029035584 Options.wal_dir: +2025/03/30-11:04:47.341837 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:47.341838 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:47.341838 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:47.341839 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:47.341839 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:47.341839 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:47.341840 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:47.341840 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:47.341841 8029035584 Options.write_buffer_manager: 0x6000014741a0 +2025/03/30-11:04:47.341841 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:47.341841 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:47.341842 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:47.341842 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:47.341843 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:47.341843 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:47.341843 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:47.341844 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:47.341844 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:47.341845 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:47.341845 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:47.341845 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:47.341846 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:47.341846 8029035584 Options.row_cache: None +2025/03/30-11:04:47.341847 8029035584 Options.wal_filter: None +2025/03/30-11:04:47.341847 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:47.341848 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:47.341848 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:47.341848 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:47.341849 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:47.341849 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:47.341849 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:47.341850 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:47.341850 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:47.341851 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:47.341851 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:47.341852 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:47.341852 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:47.341852 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:47.341853 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:47.341853 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:47.341854 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:47.341854 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:47.341855 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:47.341855 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:47.341855 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:47.341856 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:47.341856 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:47.341857 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:47.341857 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:47.341858 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:47.341858 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:47.341858 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:47.341859 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:47.341859 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:47.341860 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:47.341860 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:47.341860 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:47.341861 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:47.341861 8029035584 Compression algorithms supported: +2025/03/30-11:04:47.341862 8029035584 kZSTD supported: 0 +2025/03/30-11:04:47.341862 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:47.341863 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:47.341863 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:47.341864 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:47.341864 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:47.341864 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:47.341865 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:47.341868 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:47.341869 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:47.341932 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet/MANIFEST-000012 +2025/03/30-11:04:47.341961 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:47.341962 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:47.341962 8029035584 Options.merge_operator: None +2025/03/30-11:04:47.341963 8029035584 Options.compaction_filter: None +2025/03/30-11:04:47.341963 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:47.341964 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:47.341964 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:47.341964 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:47.341993 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600002f7fce0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600001a70318 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:47.341994 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:47.341995 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:47.341995 8029035584 Options.compression: NoCompression +2025/03/30-11:04:47.341996 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:47.341996 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:47.341997 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:47.341997 8029035584 Options.num_levels: 7 +2025/03/30-11:04:47.341998 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:47.341998 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:47.341998 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:47.341999 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:47.341999 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:47.342000 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:47.342000 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.342001 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.342001 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.342001 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:47.342002 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.342002 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.342003 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:47.342003 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:47.342004 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:47.342004 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:47.342004 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:47.342005 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:47.342005 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:47.342006 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:47.342006 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:47.342006 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.342007 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.342007 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.342008 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:47.342008 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:47.342009 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.342009 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:47.342009 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.342010 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:47.342010 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:47.342011 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:47.342011 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:47.342012 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:47.342012 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:47.342013 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:47.342013 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.342013 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.342014 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.342014 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:47.342015 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.342015 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.342015 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:47.342016 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:47.342016 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:47.342017 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:47.342017 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:47.342018 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:47.342019 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:47.342019 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:47.342020 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:47.342021 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:47.342021 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:47.342022 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:47.342022 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:47.342023 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:47.342023 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:47.342024 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.342024 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:47.342024 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:47.342025 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:47.342025 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:47.342026 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:47.342026 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:47.342027 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:47.342027 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:47.342027 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:47.342028 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:47.342028 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:47.342029 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:47.342029 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:47.342029 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:47.342030 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:47.342030 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:47.342031 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.342031 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.342032 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.342032 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:47.342033 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.342033 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:47.342212 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet/MANIFEST-000012 succeeded,manifest_file_number is 12, next_file_number is 16, last_sequence is 3, log_number is 5,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:47.342214 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 5 +2025/03/30-11:04:47.342236 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 8896721e-486d-4dd8-a43e-d90bdd21d6b6 +2025/03/30-11:04:47.342282 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087342279, "job": 1, "event": "recovery_started", "wal_files": [4, 11]} +2025/03/30-11:04:47.342284 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:47.342308 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #11 mode 2 +2025/03/30-11:04:47.342401 8029035584 EVENT_LOG_v1 {"time_micros": 1743347087342400, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:47.342461 8029035584 [db/version_set.cc:5369] Creating manifest 18 +2025/03/30-11:04:47.343492 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x11f7067d0 +2025/03/30-11:04:47.343509 8029035584 DB pointer 0x12001e800 +2025/03/30-11:04:47.343524 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:47.343620 6198161408 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-11:04:47.343624 6198161408 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 0.0 total, 0.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 1/0 1.29 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Sum 1/0 1.29 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 0.0 total, 0.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x600001a70318#98197 capacity: 64.00 MB seed: 152519891 usage: 0.46 KB table_size: 1024 occupancy: 3 collections: 1 last_copies: 0 last_secs: 1.5e-05 secs_since: 0 +Block cache entry stats(count,size,portion): FilterBlock(1,0.10 KB,0.000150502%) IndexBlock(1,0.10 KB,0.000159442%) Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** +2025/03/30-11:04:47.344085 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:47.344086 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:47.344087 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:47.344087 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:47.344088 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:47.344088 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:47.344089 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:47.344089 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:47.344090 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:47.344090 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:47.344091 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:47.344091 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:47.344091 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:47.344092 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:47.344092 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:47.344093 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:47.344093 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:47.344094 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:47.344094 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:47.344094 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:47.344095 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:47.344095 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:47.344096 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:47.344096 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:47.344097 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:47.344097 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:47.344098 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:47.344099 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:47.344099 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:47.344099 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:47.344100 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:47.344100 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:47.344101 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:47.344101 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:47.344102 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:47.344102 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:47.344102 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:47.344103 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:47.344103 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:47.344104 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:47.344104 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:47.344105 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:47.344105 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:47.344105 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:47.344106 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:47.344106 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:47.344107 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:47.344107 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:47.344108 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:47.344108 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:47.344109 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:47.344109 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:47.344109 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:47.344110 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOG.old.1743347058130915 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOG.old.1743347058130915 new file mode 100644 index 0000000..75a4bc8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOG.old.1743347058130915 @@ -0,0 +1,335 @@ +2025/03/30-10:54:54.636329 8029035584 RocksDB version: 8.6.0 +2025/03/30-10:54:54.636595 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-10:54:54.636597 8029035584 DB SUMMARY +2025/03/30-10:54:54.636598 8029035584 DB Session ID: KY92ZR8LCBK63UYA6SDI +2025/03/30-10:54:54.636629 8029035584 SST files in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/wallet dir, Total Num: 0, files: +2025/03/30-10:54:54.636631 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/wallet: +2025/03/30-10:54:54.636632 8029035584 Options.error_if_exists: 0 +2025/03/30-10:54:54.636633 8029035584 Options.create_if_missing: 1 +2025/03/30-10:54:54.636634 8029035584 Options.paranoid_checks: 1 +2025/03/30-10:54:54.636634 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-10:54:54.636635 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-10:54:54.636636 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-10:54:54.636636 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-10:54:54.636637 8029035584 Options.env: 0x6000035a0240 +2025/03/30-10:54:54.636638 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-10:54:54.636639 8029035584 Options.info_log: 0x12e506348 +2025/03/30-10:54:54.636640 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-10:54:54.636641 8029035584 Options.statistics: 0x0 +2025/03/30-10:54:54.636641 8029035584 Options.use_fsync: 0 +2025/03/30-10:54:54.636642 8029035584 Options.max_log_file_size: 0 +2025/03/30-10:54:54.636643 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-10:54:54.636643 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-10:54:54.636644 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-10:54:54.636645 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-10:54:54.636646 8029035584 Options.allow_fallocate: 1 +2025/03/30-10:54:54.636646 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-10:54:54.636647 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-10:54:54.636648 8029035584 Options.use_direct_reads: 0 +2025/03/30-10:54:54.636648 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-10:54:54.636649 8029035584 Options.create_missing_column_families: 1 +2025/03/30-10:54:54.636650 8029035584 Options.db_log_dir: +2025/03/30-10:54:54.636651 8029035584 Options.wal_dir: +2025/03/30-10:54:54.636651 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-10:54:54.636652 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-10:54:54.636653 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-10:54:54.636653 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-10:54:54.636654 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-10:54:54.636655 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-10:54:54.636656 8029035584 Options.advise_random_on_open: 1 +2025/03/30-10:54:54.636656 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-10:54:54.636657 8029035584 Options.write_buffer_manager: 0x600002abc270 +2025/03/30-10:54:54.636658 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-10:54:54.636659 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-10:54:54.636659 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-10:54:54.636660 8029035584 Options.rate_limiter: 0x0 +2025/03/30-10:54:54.636661 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-10:54:54.636662 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-10:54:54.636663 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-10:54:54.636663 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-10:54:54.636664 8029035584 Options.unordered_write: 0 +2025/03/30-10:54:54.636665 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-10:54:54.636666 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-10:54:54.636666 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-10:54:54.636667 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-10:54:54.636668 8029035584 Options.row_cache: None +2025/03/30-10:54:54.636668 8029035584 Options.wal_filter: None +2025/03/30-10:54:54.636669 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-10:54:54.636670 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-10:54:54.636671 8029035584 Options.two_write_queues: 0 +2025/03/30-10:54:54.636672 8029035584 Options.manual_wal_flush: 0 +2025/03/30-10:54:54.636672 8029035584 Options.wal_compression: 0 +2025/03/30-10:54:54.636673 8029035584 Options.atomic_flush: 0 +2025/03/30-10:54:54.636674 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-10:54:54.636674 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-10:54:54.636675 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-10:54:54.636676 8029035584 Options.log_readahead_size: 0 +2025/03/30-10:54:54.636677 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-10:54:54.636677 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-10:54:54.636678 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-10:54:54.636679 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-10:54:54.636680 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-10:54:54.636680 8029035584 Options.db_host_id: __hostname__ +2025/03/30-10:54:54.636681 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-10:54:54.636682 8029035584 Options.max_background_jobs: 12 +2025/03/30-10:54:54.636683 8029035584 Options.max_background_compactions: -1 +2025/03/30-10:54:54.636684 8029035584 Options.max_subcompactions: 1 +2025/03/30-10:54:54.636684 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-10:54:54.636685 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-10:54:54.636686 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-10:54:54.636687 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-10:54:54.636687 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-10:54:54.636688 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-10:54:54.636689 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-10:54:54.636690 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-10:54:54.636690 8029035584 Options.max_open_files: -1 +2025/03/30-10:54:54.636691 8029035584 Options.bytes_per_sync: 0 +2025/03/30-10:54:54.636692 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-10:54:54.636692 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-10:54:54.636693 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-10:54:54.636694 8029035584 Options.max_background_flushes: -1 +2025/03/30-10:54:54.636695 8029035584 Compression algorithms supported: +2025/03/30-10:54:54.636696 8029035584 kZSTD supported: 0 +2025/03/30-10:54:54.636696 8029035584 kZlibCompression supported: 0 +2025/03/30-10:54:54.636697 8029035584 kXpressCompression supported: 0 +2025/03/30-10:54:54.636698 8029035584 kSnappyCompression supported: 0 +2025/03/30-10:54:54.636699 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-10:54:54.636700 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-10:54:54.636700 8029035584 kLZ4Compression supported: 0 +2025/03/30-10:54:54.636701 8029035584 kBZip2Compression supported: 0 +2025/03/30-10:54:54.636707 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-10:54:54.636708 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-10:54:54.637211 8029035584 [db/db_impl/db_impl_open.cc:319] Creating manifest 1 +2025/03/30-10:54:54.637529 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/wallet/MANIFEST-000001 +2025/03/30-10:54:54.637575 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-10:54:54.637577 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-10:54:54.637578 8029035584 Options.merge_operator: None +2025/03/30-10:54:54.637578 8029035584 Options.compaction_filter: None +2025/03/30-10:54:54.637579 8029035584 Options.compaction_filter_factory: None +2025/03/30-10:54:54.637579 8029035584 Options.sst_partitioner_factory: None +2025/03/30-10:54:54.637580 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-10:54:54.637580 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-10:54:54.637590 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001194ac0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x6000024b8318 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-10:54:54.637591 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-10:54:54.637592 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-10:54:54.637592 8029035584 Options.compression: NoCompression +2025/03/30-10:54:54.637593 8029035584 Options.bottommost_compression: Disabled +2025/03/30-10:54:54.637594 8029035584 Options.prefix_extractor: nullptr +2025/03/30-10:54:54.637594 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-10:54:54.637595 8029035584 Options.num_levels: 7 +2025/03/30-10:54:54.637595 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-10:54:54.637596 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-10:54:54.637596 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-10:54:54.637597 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-10:54:54.637597 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-10:54:54.637598 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-10:54:54.637598 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.637599 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.637599 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.637600 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-10:54:54.637600 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.637601 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.637601 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-10:54:54.637602 8029035584 Options.compression_opts.level: 32767 +2025/03/30-10:54:54.637602 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-10:54:54.637603 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-10:54:54.637603 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-10:54:54.637604 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-10:54:54.637604 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-10:54:54.637605 8029035584 Options.compression_opts.enabled: false +2025/03/30-10:54:54.637605 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-10:54:54.637606 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.637606 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.637606 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.637607 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-10:54:54.637607 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-10:54:54.637608 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.637609 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-10:54:54.637609 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.637610 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-10:54:54.637610 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-10:54:54.637611 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-10:54:54.637611 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-10:54:54.637612 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-10:54:54.637612 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-10:54:54.637613 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-10:54:54.637613 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.637614 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.637614 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.637615 8029035584 Options.arena_block_size: 1048576 +2025/03/30-10:54:54.637615 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.637616 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.637616 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-10:54:54.637617 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-10:54:54.637618 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-10:54:54.637618 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-10:54:54.637619 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-10:54:54.637619 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-10:54:54.637620 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-10:54:54.637620 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-10:54:54.637622 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-10:54:54.637622 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-10:54:54.637623 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-10:54:54.637624 8029035584 Options.table_properties_collectors: +2025/03/30-10:54:54.637624 8029035584 Options.inplace_update_support: 0 +2025/03/30-10:54:54.637625 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-10:54:54.637625 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-10:54:54.637626 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.637626 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-10:54:54.637627 8029035584 Options.bloom_locality: 0 +2025/03/30-10:54:54.637627 8029035584 Options.max_successive_merges: 0 +2025/03/30-10:54:54.637628 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-10:54:54.637628 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-10:54:54.637629 8029035584 Options.force_consistency_checks: 1 +2025/03/30-10:54:54.637629 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-10:54:54.637629 8029035584 Options.ttl: 2592000 +2025/03/30-10:54:54.637630 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-10:54:54.637631 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-10:54:54.637631 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-10:54:54.637631 8029035584 Options.enable_blob_files: false +2025/03/30-10:54:54.637632 8029035584 Options.min_blob_size: 0 +2025/03/30-10:54:54.637632 8029035584 Options.blob_file_size: 268435456 +2025/03/30-10:54:54.637633 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-10:54:54.637633 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-10:54:54.637634 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.637635 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.637635 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.637636 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-10:54:54.637636 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.637637 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-10:54:54.637876 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/nextgraph-rs/.ng/server/storage/wallet/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-10:54:54.637877 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-10:54:54.637905 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 8896721e-486d-4dd8-a43e-d90bdd21d6b6 +2025/03/30-10:54:54.638039 8029035584 [db/version_set.cc:5369] Creating manifest 5 +2025/03/30-10:54:54.639017 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12e506e70 +2025/03/30-10:54:54.639042 8029035584 DB pointer 0x138813c00 +2025/03/30-10:54:54.639069 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-10:54:54.639140 6142537728 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-10:54:54.639143 6142537728 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 0.0 total, 0.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 0.0 total, 0.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x6000024b8318#97224 capacity: 64.00 MB seed: 152519891 usage: 0.08 KB table_size: 1024 occupancy: 1 collections: 1 last_copies: 0 last_secs: 1.7e-05 secs_since: 0 +Block cache entry stats(count,size,portion): Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** +2025/03/30-10:54:54.639755 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-10:54:54.639756 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-10:54:54.639757 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-10:54:54.639757 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-10:54:54.639758 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-10:54:54.639759 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-10:54:54.639759 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-10:54:54.639760 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-10:54:54.639760 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-10:54:54.639761 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-10:54:54.639761 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-10:54:54.639762 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-10:54:54.639762 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-10:54:54.639763 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-10:54:54.639763 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-10:54:54.639764 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-10:54:54.639764 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-10:54:54.639765 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-10:54:54.639765 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-10:54:54.639766 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-10:54:54.639766 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-10:54:54.639767 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-10:54:54.639767 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-10:54:54.639768 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-10:54:54.639768 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-10:54:54.639769 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-10:54:54.639770 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-10:54:54.639771 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-10:54:54.639771 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-10:54:54.639772 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-10:54:54.639772 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-10:54:54.639773 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-10:54:54.639773 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-10:54:54.639774 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-10:54:54.639774 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-10:54:54.639775 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-10:54:54.639775 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-10:54:54.639776 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-10:54:54.639776 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-10:54:54.639777 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-10:54:54.639777 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-10:54:54.639778 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-10:54:54.639778 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-10:54:54.639779 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-10:54:54.639779 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-10:54:54.639780 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-10:54:54.639780 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-10:54:54.639781 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-10:54:54.639781 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-10:54:54.639782 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-10:54:54.639783 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-10:54:54.639783 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-10:54:54.639784 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-10:54:54.639784 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOG.old.1743347087341443 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOG.old.1743347087341443 new file mode 100644 index 0000000..aef8d46 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/LOG.old.1743347087341443 @@ -0,0 +1,343 @@ +2025/03/30-11:04:18.131239 8029035584 RocksDB version: 8.6.0 +2025/03/30-11:04:18.131506 8029035584 Compile date 2023-06-15 05:32:14 +2025/03/30-11:04:18.131508 8029035584 DB SUMMARY +2025/03/30-11:04:18.131509 8029035584 DB Session ID: 7MUCSF891X500MQRN1NH +2025/03/30-11:04:18.131573 8029035584 CURRENT file: CURRENT +2025/03/30-11:04:18.131575 8029035584 IDENTITY file: IDENTITY +2025/03/30-11:04:18.131579 8029035584 MANIFEST file: MANIFEST-000005 size: 83 Bytes +2025/03/30-11:04:18.131581 8029035584 SST files in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet dir, Total Num: 0, files: +2025/03/30-11:04:18.131582 8029035584 Write Ahead Log file in /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet: 000004.log size: 189 ; +2025/03/30-11:04:18.131584 8029035584 Options.error_if_exists: 0 +2025/03/30-11:04:18.131585 8029035584 Options.create_if_missing: 1 +2025/03/30-11:04:18.131585 8029035584 Options.paranoid_checks: 1 +2025/03/30-11:04:18.131586 8029035584 Options.flush_verify_memtable_count: 1 +2025/03/30-11:04:18.131587 8029035584 Options.compaction_verify_record_count: 1 +2025/03/30-11:04:18.131588 8029035584 Options.track_and_verify_wals_in_manifest: 0 +2025/03/30-11:04:18.131588 8029035584 Options.verify_sst_unique_id_in_manifest: 1 +2025/03/30-11:04:18.131589 8029035584 Options.env: 0x600003b9c540 +2025/03/30-11:04:18.131590 8029035584 Options.fs: EncryptedFileSystem +2025/03/30-11:04:18.131591 8029035584 Options.info_log: 0x12d305b48 +2025/03/30-11:04:18.131592 8029035584 Options.max_file_opening_threads: 16 +2025/03/30-11:04:18.131593 8029035584 Options.statistics: 0x0 +2025/03/30-11:04:18.131593 8029035584 Options.use_fsync: 0 +2025/03/30-11:04:18.131594 8029035584 Options.max_log_file_size: 0 +2025/03/30-11:04:18.131595 8029035584 Options.max_manifest_file_size: 1073741824 +2025/03/30-11:04:18.131596 8029035584 Options.log_file_time_to_roll: 0 +2025/03/30-11:04:18.131597 8029035584 Options.keep_log_file_num: 1000 +2025/03/30-11:04:18.131597 8029035584 Options.recycle_log_file_num: 0 +2025/03/30-11:04:18.131598 8029035584 Options.allow_fallocate: 1 +2025/03/30-11:04:18.131599 8029035584 Options.allow_mmap_reads: 0 +2025/03/30-11:04:18.131600 8029035584 Options.allow_mmap_writes: 0 +2025/03/30-11:04:18.131600 8029035584 Options.use_direct_reads: 0 +2025/03/30-11:04:18.131601 8029035584 Options.use_direct_io_for_flush_and_compaction: 0 +2025/03/30-11:04:18.131602 8029035584 Options.create_missing_column_families: 1 +2025/03/30-11:04:18.131603 8029035584 Options.db_log_dir: +2025/03/30-11:04:18.131603 8029035584 Options.wal_dir: +2025/03/30-11:04:18.131604 8029035584 Options.table_cache_numshardbits: 6 +2025/03/30-11:04:18.131605 8029035584 Options.WAL_ttl_seconds: 0 +2025/03/30-11:04:18.131606 8029035584 Options.WAL_size_limit_MB: 0 +2025/03/30-11:04:18.131606 8029035584 Options.max_write_batch_group_size_bytes: 1048576 +2025/03/30-11:04:18.131607 8029035584 Options.manifest_preallocation_size: 4194304 +2025/03/30-11:04:18.131608 8029035584 Options.is_fd_close_on_exec: 1 +2025/03/30-11:04:18.131609 8029035584 Options.advise_random_on_open: 1 +2025/03/30-11:04:18.131609 8029035584 Options.db_write_buffer_size: 67108864 +2025/03/30-11:04:18.131610 8029035584 Options.write_buffer_manager: 0x60000249c1a0 +2025/03/30-11:04:18.131611 8029035584 Options.access_hint_on_compaction_start: 1 +2025/03/30-11:04:18.131612 8029035584 Options.random_access_max_buffer_size: 1048576 +2025/03/30-11:04:18.131612 8029035584 Options.use_adaptive_mutex: 0 +2025/03/30-11:04:18.131613 8029035584 Options.rate_limiter: 0x0 +2025/03/30-11:04:18.131614 8029035584 Options.sst_file_manager.rate_bytes_per_sec: 0 +2025/03/30-11:04:18.131615 8029035584 Options.wal_recovery_mode: 2 +2025/03/30-11:04:18.131616 8029035584 Options.enable_thread_tracking: 0 +2025/03/30-11:04:18.131617 8029035584 Options.enable_pipelined_write: 0 +2025/03/30-11:04:18.131617 8029035584 Options.unordered_write: 0 +2025/03/30-11:04:18.131618 8029035584 Options.allow_concurrent_memtable_write: 1 +2025/03/30-11:04:18.131619 8029035584 Options.enable_write_thread_adaptive_yield: 1 +2025/03/30-11:04:18.131619 8029035584 Options.write_thread_max_yield_usec: 100 +2025/03/30-11:04:18.131620 8029035584 Options.write_thread_slow_yield_usec: 3 +2025/03/30-11:04:18.131621 8029035584 Options.row_cache: None +2025/03/30-11:04:18.131622 8029035584 Options.wal_filter: None +2025/03/30-11:04:18.131623 8029035584 Options.avoid_flush_during_recovery: 0 +2025/03/30-11:04:18.131623 8029035584 Options.allow_ingest_behind: 0 +2025/03/30-11:04:18.131624 8029035584 Options.two_write_queues: 0 +2025/03/30-11:04:18.131625 8029035584 Options.manual_wal_flush: 0 +2025/03/30-11:04:18.131626 8029035584 Options.wal_compression: 0 +2025/03/30-11:04:18.131626 8029035584 Options.atomic_flush: 0 +2025/03/30-11:04:18.131627 8029035584 Options.avoid_unnecessary_blocking_io: 0 +2025/03/30-11:04:18.131628 8029035584 Options.persist_stats_to_disk: 0 +2025/03/30-11:04:18.131629 8029035584 Options.write_dbid_to_manifest: 0 +2025/03/30-11:04:18.131629 8029035584 Options.log_readahead_size: 0 +2025/03/30-11:04:18.131630 8029035584 Options.file_checksum_gen_factory: Unknown +2025/03/30-11:04:18.131631 8029035584 Options.best_efforts_recovery: 0 +2025/03/30-11:04:18.131632 8029035584 Options.max_bgerror_resume_count: 2147483647 +2025/03/30-11:04:18.131632 8029035584 Options.bgerror_resume_retry_interval: 1000000 +2025/03/30-11:04:18.131633 8029035584 Options.allow_data_in_errors: 0 +2025/03/30-11:04:18.131634 8029035584 Options.db_host_id: __hostname__ +2025/03/30-11:04:18.131635 8029035584 Options.enforce_single_del_contracts: true +2025/03/30-11:04:18.131636 8029035584 Options.max_background_jobs: 12 +2025/03/30-11:04:18.131637 8029035584 Options.max_background_compactions: -1 +2025/03/30-11:04:18.131637 8029035584 Options.max_subcompactions: 1 +2025/03/30-11:04:18.131638 8029035584 Options.avoid_flush_during_shutdown: 0 +2025/03/30-11:04:18.131639 8029035584 Options.writable_file_max_buffer_size: 1048576 +2025/03/30-11:04:18.131640 8029035584 Options.delayed_write_rate : 16777216 +2025/03/30-11:04:18.131640 8029035584 Options.max_total_wal_size: 1073741824 +2025/03/30-11:04:18.131641 8029035584 Options.delete_obsolete_files_period_micros: 21600000000 +2025/03/30-11:04:18.131642 8029035584 Options.stats_dump_period_sec: 600 +2025/03/30-11:04:18.131643 8029035584 Options.stats_persist_period_sec: 600 +2025/03/30-11:04:18.131644 8029035584 Options.stats_history_buffer_size: 1048576 +2025/03/30-11:04:18.131644 8029035584 Options.max_open_files: -1 +2025/03/30-11:04:18.131645 8029035584 Options.bytes_per_sync: 0 +2025/03/30-11:04:18.131646 8029035584 Options.wal_bytes_per_sync: 0 +2025/03/30-11:04:18.131647 8029035584 Options.strict_bytes_per_sync: 0 +2025/03/30-11:04:18.131647 8029035584 Options.compaction_readahead_size: 2097152 +2025/03/30-11:04:18.131648 8029035584 Options.max_background_flushes: -1 +2025/03/30-11:04:18.131649 8029035584 Compression algorithms supported: +2025/03/30-11:04:18.131650 8029035584 kZSTD supported: 0 +2025/03/30-11:04:18.131651 8029035584 kZlibCompression supported: 0 +2025/03/30-11:04:18.131652 8029035584 kXpressCompression supported: 0 +2025/03/30-11:04:18.131653 8029035584 kSnappyCompression supported: 0 +2025/03/30-11:04:18.131653 8029035584 kZSTDNotFinalCompression supported: 0 +2025/03/30-11:04:18.131654 8029035584 kLZ4HCCompression supported: 0 +2025/03/30-11:04:18.131655 8029035584 kLZ4Compression supported: 0 +2025/03/30-11:04:18.131656 8029035584 kBZip2Compression supported: 0 +2025/03/30-11:04:18.131661 8029035584 Fast CRC32 supported: Supported on Arm64 +2025/03/30-11:04:18.131662 8029035584 DMutex implementation: pthread_mutex_t +2025/03/30-11:04:18.131973 8029035584 [db/version_set.cc:5858] Recovering from manifest file: /Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet/MANIFEST-000005 +2025/03/30-11:04:18.132196 8029035584 [db/column_family.cc:617] --------------- Options for column family [default]: +2025/03/30-11:04:18.132197 8029035584 Options.comparator: leveldb.BytewiseComparator +2025/03/30-11:04:18.132198 8029035584 Options.merge_operator: None +2025/03/30-11:04:18.132198 8029035584 Options.compaction_filter: None +2025/03/30-11:04:18.132199 8029035584 Options.compaction_filter_factory: None +2025/03/30-11:04:18.132199 8029035584 Options.sst_partitioner_factory: None +2025/03/30-11:04:18.132200 8029035584 Options.memtable_factory: SkipListFactory +2025/03/30-11:04:18.132200 8029035584 Options.table_factory: BlockBasedTable +2025/03/30-11:04:18.132219 8029035584 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600001fa44a0) + cache_index_and_filter_blocks: 1 + cache_index_and_filter_blocks_with_high_priority: 1 + pin_l0_filter_and_index_blocks_in_cache: 1 + pin_top_level_index_and_filter: 1 + index_type: 0 + data_block_index_type: 0 + index_shortening: 1 + data_block_hash_table_util_ratio: 0.750000 + checksum: 4 + no_block_cache: 0 + block_cache: 0x600002a98318 + block_cache_name: LRUCache + block_cache_options: + capacity : 67108864 + num_shard_bits : 6 + strict_capacity_limit : 0 + memory_allocator : None + high_pri_pool_ratio: 0.500 + low_pri_pool_ratio: 0.000 + persistent_cache: 0x0 + block_size: 16384 + block_size_deviation: 10 + block_restart_interval: 16 + index_block_restart_interval: 1 + metadata_block_size: 4096 + partition_filters: 0 + use_delta_encoding: 1 + filter_policy: bloomfilter + whole_key_filtering: 1 + verify_compression: 0 + read_amp_bytes_per_bit: 0 + format_version: 6 + enable_index_compression: 1 + block_align: 0 + max_auto_readahead_size: 262144 + prepopulate_block_cache: 0 + initial_auto_readahead_size: 8192 + num_file_reads_for_auto_readahead: 2 +2025/03/30-11:04:18.132220 8029035584 Options.write_buffer_size: 67108864 +2025/03/30-11:04:18.132221 8029035584 Options.max_write_buffer_number: 2 +2025/03/30-11:04:18.132221 8029035584 Options.compression: NoCompression +2025/03/30-11:04:18.132222 8029035584 Options.bottommost_compression: Disabled +2025/03/30-11:04:18.132222 8029035584 Options.prefix_extractor: nullptr +2025/03/30-11:04:18.132223 8029035584 Options.memtable_insert_with_hint_prefix_extractor: nullptr +2025/03/30-11:04:18.132224 8029035584 Options.num_levels: 7 +2025/03/30-11:04:18.132224 8029035584 Options.min_write_buffer_number_to_merge: 1 +2025/03/30-11:04:18.132225 8029035584 Options.max_write_buffer_number_to_maintain: 0 +2025/03/30-11:04:18.132225 8029035584 Options.max_write_buffer_size_to_maintain: 134217728 +2025/03/30-11:04:18.132225 8029035584 Options.bottommost_compression_opts.window_bits: -14 +2025/03/30-11:04:18.132226 8029035584 Options.bottommost_compression_opts.level: 32767 +2025/03/30-11:04:18.132227 8029035584 Options.bottommost_compression_opts.strategy: 0 +2025/03/30-11:04:18.132227 8029035584 Options.bottommost_compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.132228 8029035584 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.132228 8029035584 Options.bottommost_compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.132229 8029035584 Options.bottommost_compression_opts.enabled: false +2025/03/30-11:04:18.132229 8029035584 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.132230 8029035584 Options.bottommost_compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.132230 8029035584 Options.compression_opts.window_bits: -14 +2025/03/30-11:04:18.132231 8029035584 Options.compression_opts.level: 32767 +2025/03/30-11:04:18.132231 8029035584 Options.compression_opts.strategy: 0 +2025/03/30-11:04:18.132232 8029035584 Options.compression_opts.max_dict_bytes: 0 +2025/03/30-11:04:18.132232 8029035584 Options.compression_opts.zstd_max_train_bytes: 0 +2025/03/30-11:04:18.132233 8029035584 Options.compression_opts.use_zstd_dict_trainer: true +2025/03/30-11:04:18.132233 8029035584 Options.compression_opts.parallel_threads: 1 +2025/03/30-11:04:18.132234 8029035584 Options.compression_opts.enabled: false +2025/03/30-11:04:18.132234 8029035584 Options.compression_opts.max_dict_buffer_bytes: 0 +2025/03/30-11:04:18.132235 8029035584 Options.level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.132235 8029035584 Options.level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.132236 8029035584 Options.level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.132236 8029035584 Options.target_file_size_base: 67108864 +2025/03/30-11:04:18.132237 8029035584 Options.target_file_size_multiplier: 10 +2025/03/30-11:04:18.132237 8029035584 Options.max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.132237 8029035584 Options.level_compaction_dynamic_level_bytes: 1 +2025/03/30-11:04:18.132238 8029035584 Options.max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.132239 8029035584 Options.max_bytes_for_level_multiplier_addtl[0]: 1 +2025/03/30-11:04:18.132239 8029035584 Options.max_bytes_for_level_multiplier_addtl[1]: 1 +2025/03/30-11:04:18.132240 8029035584 Options.max_bytes_for_level_multiplier_addtl[2]: 1 +2025/03/30-11:04:18.132240 8029035584 Options.max_bytes_for_level_multiplier_addtl[3]: 1 +2025/03/30-11:04:18.132241 8029035584 Options.max_bytes_for_level_multiplier_addtl[4]: 1 +2025/03/30-11:04:18.132241 8029035584 Options.max_bytes_for_level_multiplier_addtl[5]: 1 +2025/03/30-11:04:18.132242 8029035584 Options.max_bytes_for_level_multiplier_addtl[6]: 1 +2025/03/30-11:04:18.132242 8029035584 Options.max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.132243 8029035584 Options.max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.132243 8029035584 Options.ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.132244 8029035584 Options.arena_block_size: 1048576 +2025/03/30-11:04:18.132244 8029035584 Options.soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.132245 8029035584 Options.hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.132245 8029035584 Options.disable_auto_compactions: 1 +2025/03/30-11:04:18.132246 8029035584 Options.compaction_style: kCompactionStyleLevel +2025/03/30-11:04:18.132246 8029035584 Options.compaction_pri: kMinOverlappingRatio +2025/03/30-11:04:18.132247 8029035584 Options.compaction_options_universal.size_ratio: 1 +2025/03/30-11:04:18.132247 8029035584 Options.compaction_options_universal.min_merge_width: 2 +2025/03/30-11:04:18.132248 8029035584 Options.compaction_options_universal.max_merge_width: 4294967295 +2025/03/30-11:04:18.132249 8029035584 Options.compaction_options_universal.max_size_amplification_percent: 200 +2025/03/30-11:04:18.132250 8029035584 Options.compaction_options_universal.compression_size_percent: -1 +2025/03/30-11:04:18.132250 8029035584 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize +2025/03/30-11:04:18.132251 8029035584 Options.compaction_options_fifo.max_table_files_size: 1073741824 +2025/03/30-11:04:18.132251 8029035584 Options.compaction_options_fifo.allow_compaction: 0 +2025/03/30-11:04:18.132252 8029035584 Options.table_properties_collectors: +2025/03/30-11:04:18.132253 8029035584 Options.inplace_update_support: 0 +2025/03/30-11:04:18.132253 8029035584 Options.inplace_update_num_locks: 10000 +2025/03/30-11:04:18.132254 8029035584 Options.memtable_prefix_bloom_size_ratio: 0.000000 +2025/03/30-11:04:18.132254 8029035584 Options.memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.132255 8029035584 Options.memtable_huge_page_size: 0 +2025/03/30-11:04:18.132255 8029035584 Options.bloom_locality: 0 +2025/03/30-11:04:18.132256 8029035584 Options.max_successive_merges: 0 +2025/03/30-11:04:18.132256 8029035584 Options.optimize_filters_for_hits: 0 +2025/03/30-11:04:18.132257 8029035584 Options.paranoid_file_checks: 0 +2025/03/30-11:04:18.132257 8029035584 Options.force_consistency_checks: 1 +2025/03/30-11:04:18.132258 8029035584 Options.report_bg_io_stats: 0 +2025/03/30-11:04:18.132258 8029035584 Options.ttl: 2592000 +2025/03/30-11:04:18.132259 8029035584 Options.periodic_compaction_seconds: 0 +2025/03/30-11:04:18.132259 8029035584 Options.preclude_last_level_data_seconds: 0 +2025/03/30-11:04:18.132260 8029035584 Options.preserve_internal_time_seconds: 0 +2025/03/30-11:04:18.132260 8029035584 Options.enable_blob_files: false +2025/03/30-11:04:18.132261 8029035584 Options.min_blob_size: 0 +2025/03/30-11:04:18.132261 8029035584 Options.blob_file_size: 268435456 +2025/03/30-11:04:18.132262 8029035584 Options.blob_compression_type: NoCompression +2025/03/30-11:04:18.132262 8029035584 Options.enable_blob_garbage_collection: false +2025/03/30-11:04:18.132263 8029035584 Options.blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.132263 8029035584 Options.blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.132264 8029035584 Options.blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.132264 8029035584 Options.blob_file_starting_level: 0 +2025/03/30-11:04:18.132265 8029035584 Options.experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.132265 8029035584 Options.memtable_max_range_deletions: 0 +2025/03/30-11:04:18.132499 8029035584 [db/version_set.cc:5909] Recovered from manifest file:/Users/jacksonmorgan/O/ldo/packages/connected-nextgraph/./test/nextgraph-data/server/storage/wallet/MANIFEST-000005 succeeded,manifest_file_number is 5, next_file_number is 9, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 +2025/03/30-11:04:18.132501 8029035584 [db/version_set.cc:5918] Column family [default] (ID 0), log number is 0 +2025/03/30-11:04:18.132559 8029035584 [db/db_impl/db_impl_open.cc:639] DB ID: 8896721e-486d-4dd8-a43e-d90bdd21d6b6 +2025/03/30-11:04:18.132622 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058132619, "job": 1, "event": "recovery_started", "wal_files": [4]} +2025/03/30-11:04:18.132624 8029035584 [db/db_impl/db_impl_open.cc:1134] Recovering log #4 mode 2 +2025/03/30-11:04:18.132998 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058132987, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 10, "file_size": 1321, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 1, "largest_seqno": 3, "table_properties": {"data_size": 164, "index_size": 24, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 69, "raw_key_size": 48, "raw_average_key_size": 16, "raw_value_size": 96, "raw_average_value_size": 32, "num_data_blocks": 1, "num_entries": 3, "num_filter_entries": 3, "num_deletions": 0, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "bloomfilter", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "NoCompression", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1743347058, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "8896721e-486d-4dd8-a43e-d90bdd21d6b6", "db_session_id": "7MUCSF891X500MQRN1NH", "orig_file_number": 10, "seqno_to_time_mapping": "N/A"}} +2025/03/30-11:04:18.133078 8029035584 EVENT_LOG_v1 {"time_micros": 1743347058133077, "job": 1, "event": "recovery_finished"} +2025/03/30-11:04:18.133149 8029035584 [db/version_set.cc:5369] Creating manifest 12 +2025/03/30-11:04:18.134067 8029035584 [db/db_impl/db_impl_open.cc:2121] SstFileManager instance 0x12d306670 +2025/03/30-11:04:18.134085 8029035584 DB pointer 0x12f01a600 +2025/03/30-11:04:18.134100 8029035584 [WARN] [utilities/transactions/pessimistic_transaction_db.cc:262] Transaction write_policy is 0 +2025/03/30-11:04:18.134219 6130839552 [db/db_impl/db_impl.cc:1091] ------- DUMPING STATS ------- +2025/03/30-11:04:18.134224 6130839552 [db/db_impl/db_impl.cc:1092] +** DB Stats ** +Uptime(secs): 0.0 total, 0.0 interval +Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s +Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent +Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s +Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s +Interval stall: 00:00:0.000 H:M:S, 0.0 percent +Write Stall (count): write-buffer-manager-limit-stops: 0 + +** Compaction Stats [default] ** +Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + L0 1/0 1.29 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.9 0.00 0.00 1 0.000 0 0 0.0 0.0 + Sum 1/0 1.29 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.9 0.00 0.00 1 0.000 0 0 0.0 0.0 + Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.9 0.00 0.00 1 0.000 0 0 0.0 0.0 + +** Compaction Stats [default] ** +Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +User 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.9 0.00 0.00 1 0.000 0 0 0.0 0.0 + +Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 + +Uptime(secs): 0.0 total, 0.0 interval +Flush(GB): cumulative 0.000, interval 0.000 +AddFile(GB): cumulative 0.000, interval 0.000 +AddFile(Total Files): cumulative 0, interval 0 +AddFile(L0 Files): cumulative 0, interval 0 +AddFile(Keys): cumulative 0, interval 0 +Cumulative compaction: 0.00 GB write, 0.63 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Interval compaction: 0.00 GB write, 0.63 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds +Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0 +Block cache LRUCache@0x600002a98318#98164 capacity: 64.00 MB seed: 152519891 usage: 0.46 KB table_size: 1024 occupancy: 3 collections: 1 last_copies: 0 last_secs: 4.6e-05 secs_since: 0 +Block cache entry stats(count,size,portion): FilterBlock(1,0.10 KB,0.000150502%) IndexBlock(1,0.10 KB,0.000159442%) Misc(1,0.00 KB,0%) + +** File Read Latency Histogram By Level [default] ** +2025/03/30-11:04:18.134824 8029035584 [db/db_impl/db_impl.cc:1195] SetOptions() on column family [default], inputs: +2025/03/30-11:04:18.134825 8029035584 [db/db_impl/db_impl.cc:1198] disable_auto_compactions: false +2025/03/30-11:04:18.134826 8029035584 [db/db_impl/db_impl.cc:1202] [default] SetOptions() succeeded +2025/03/30-11:04:18.134826 8029035584 [options/cf_options.cc:1042] write_buffer_size: 67108864 +2025/03/30-11:04:18.134827 8029035584 [options/cf_options.cc:1044] max_write_buffer_number: 2 +2025/03/30-11:04:18.134828 8029035584 [options/cf_options.cc:1047] arena_block_size: 1048576 +2025/03/30-11:04:18.134828 8029035584 [options/cf_options.cc:1049] memtable_prefix_bloom_ratio: 0.000000 +2025/03/30-11:04:18.134829 8029035584 [options/cf_options.cc:1051] memtable_whole_key_filtering: 0 +2025/03/30-11:04:18.134829 8029035584 [options/cf_options.cc:1054] memtable_huge_page_size: 0 +2025/03/30-11:04:18.134830 8029035584 [options/cf_options.cc:1057] max_successive_merges: 0 +2025/03/30-11:04:18.134830 8029035584 [options/cf_options.cc:1060] inplace_update_num_locks: 10000 +2025/03/30-11:04:18.134831 8029035584 [options/cf_options.cc:1064] prefix_extractor: nullptr +2025/03/30-11:04:18.134831 8029035584 [options/cf_options.cc:1066] disable_auto_compactions: 0 +2025/03/30-11:04:18.134832 8029035584 [options/cf_options.cc:1068] soft_pending_compaction_bytes_limit: 68719476736 +2025/03/30-11:04:18.134832 8029035584 [options/cf_options.cc:1070] hard_pending_compaction_bytes_limit: 274877906944 +2025/03/30-11:04:18.134833 8029035584 [options/cf_options.cc:1072] level0_file_num_compaction_trigger: 4 +2025/03/30-11:04:18.134833 8029035584 [options/cf_options.cc:1074] level0_slowdown_writes_trigger: 20 +2025/03/30-11:04:18.134834 8029035584 [options/cf_options.cc:1076] level0_stop_writes_trigger: 36 +2025/03/30-11:04:18.134834 8029035584 [options/cf_options.cc:1078] max_compaction_bytes: 1677721600 +2025/03/30-11:04:18.134835 8029035584 [options/cf_options.cc:1080] ignore_max_compaction_bytes_for_input: true +2025/03/30-11:04:18.134835 8029035584 [options/cf_options.cc:1082] target_file_size_base: 67108864 +2025/03/30-11:04:18.134836 8029035584 [options/cf_options.cc:1084] target_file_size_multiplier: 10 +2025/03/30-11:04:18.134836 8029035584 [options/cf_options.cc:1086] max_bytes_for_level_base: 268435456 +2025/03/30-11:04:18.134837 8029035584 [options/cf_options.cc:1088] max_bytes_for_level_multiplier: 10.000000 +2025/03/30-11:04:18.134838 8029035584 [options/cf_options.cc:1090] ttl: 2592000 +2025/03/30-11:04:18.134838 8029035584 [options/cf_options.cc:1092] periodic_compaction_seconds: 0 +2025/03/30-11:04:18.134839 8029035584 [options/cf_options.cc:1106] max_bytes_for_level_multiplier_additional: 1, 1, 1, 1, 1, 1, 1 +2025/03/30-11:04:18.134840 8029035584 [options/cf_options.cc:1108] max_sequential_skip_in_iterations: 8 +2025/03/30-11:04:18.134840 8029035584 [options/cf_options.cc:1110] check_flush_compaction_key_order: 1 +2025/03/30-11:04:18.134841 8029035584 [options/cf_options.cc:1112] paranoid_file_checks: 0 +2025/03/30-11:04:18.134841 8029035584 [options/cf_options.cc:1114] report_bg_io_stats: 0 +2025/03/30-11:04:18.134842 8029035584 [options/cf_options.cc:1116] compression: 0 +2025/03/30-11:04:18.134842 8029035584 [options/cf_options.cc:1119] experimental_mempurge_threshold: 0.000000 +2025/03/30-11:04:18.134843 8029035584 [options/cf_options.cc:1123] compaction_options_universal.size_ratio : 1 +2025/03/30-11:04:18.134843 8029035584 [options/cf_options.cc:1125] compaction_options_universal.min_merge_width : 2 +2025/03/30-11:04:18.134844 8029035584 [options/cf_options.cc:1127] compaction_options_universal.max_merge_width : -1 +2025/03/30-11:04:18.134844 8029035584 [options/cf_options.cc:1130] compaction_options_universal.max_size_amplification_percent : 200 +2025/03/30-11:04:18.134845 8029035584 [options/cf_options.cc:1133] compaction_options_universal.compression_size_percent : -1 +2025/03/30-11:04:18.134845 8029035584 [options/cf_options.cc:1135] compaction_options_universal.stop_style : 1 +2025/03/30-11:04:18.134846 8029035584 [options/cf_options.cc:1138] compaction_options_universal.allow_trivial_move : 0 +2025/03/30-11:04:18.134846 8029035584 [options/cf_options.cc:1140] compaction_options_universal.incremental : 0 +2025/03/30-11:04:18.134847 8029035584 [options/cf_options.cc:1144] compaction_options_fifo.max_table_files_size : 1073741824 +2025/03/30-11:04:18.134847 8029035584 [options/cf_options.cc:1146] compaction_options_fifo.allow_compaction : 0 +2025/03/30-11:04:18.134848 8029035584 [options/cf_options.cc:1150] enable_blob_files: false +2025/03/30-11:04:18.134848 8029035584 [options/cf_options.cc:1152] min_blob_size: 0 +2025/03/30-11:04:18.134849 8029035584 [options/cf_options.cc:1154] blob_file_size: 268435456 +2025/03/30-11:04:18.134849 8029035584 [options/cf_options.cc:1156] blob_compression_type: NoCompression +2025/03/30-11:04:18.134850 8029035584 [options/cf_options.cc:1158] enable_blob_garbage_collection: false +2025/03/30-11:04:18.134850 8029035584 [options/cf_options.cc:1160] blob_garbage_collection_age_cutoff: 0.250000 +2025/03/30-11:04:18.134851 8029035584 [options/cf_options.cc:1162] blob_garbage_collection_force_threshold: 1.000000 +2025/03/30-11:04:18.134851 8029035584 [options/cf_options.cc:1164] blob_compaction_readahead_size: 0 +2025/03/30-11:04:18.134852 8029035584 [options/cf_options.cc:1166] blob_file_starting_level: 0 +2025/03/30-11:04:18.134852 8029035584 [options/cf_options.cc:1170] prepopulate_blob_cache: disable +2025/03/30-11:04:18.134853 8029035584 [options/cf_options.cc:1172] last_level_temperature: 0 diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/MANIFEST-000018 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/MANIFEST-000018 new file mode 100644 index 0000000..26d9346 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/MANIFEST-000018 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/OPTIONS-000020 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/OPTIONS-000020 new file mode 100644 index 0000000..3ec8861 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/OPTIONS-000020 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/OPTIONS-000022 b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/OPTIONS-000022 new file mode 100644 index 0000000..0b1cab5 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/nextgraph-data/server/storage/wallet/OPTIONS-000022 differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/ngd b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/ngd new file mode 100755 index 0000000..bd99400 Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/test/ngd differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/tsconfig.cjs.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/tsconfig.cjs.json new file mode 100644 index 0000000..affce40 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.cjs.json", + "compilerOptions": { + "outDir": "./dist/cjs", + "rootDir": "./src" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/tsconfig.esm.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/tsconfig.esm.json new file mode 100644 index 0000000..09f99c2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/tsconfig.esm.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "outDir": "./dist/esm", + "rootDir": "./src", + "declarationDir": "./dist/types" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/typedoc.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/typedoc.json new file mode 100644 index 0000000..3319c33 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/typedoc.json @@ -0,0 +1,8 @@ +{ + "entryPoints": ["src/index.ts"], + "out": "docs", + "tsconfig": "tsconfig.build.json", + "allReflectionsHaveOwnDocument": true, + "hideInPageTOC": true, + "hideBreadcrumbs": true, +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/vitest.config.js b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/vitest.config.js new file mode 100644 index 0000000..9713f14 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-nextgraph/vitest.config.js @@ -0,0 +1,9 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + coverage: { + provider: "istanbul", + }, + }, +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/.gitignore b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/.gitignore new file mode 100644 index 0000000..869539a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/.gitignore @@ -0,0 +1,2 @@ +test/data +node_modules \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/README.md b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/README.md new file mode 100644 index 0000000..2a0b772 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/README.md @@ -0,0 +1,228 @@ +# @ldo/connected-solid + +@ldo/solid is a client that implements the Solid specification with the use of Linked Data Objects. + +## Installation + +Navigate into your project's root folder and run the following command: +``` +cd my_project/ +npx run @ldo/cli init +``` + +Now install the @ldo/connected-solid library + +``` +npm i @ldo/connected-solid +``` + +
+ +Manual Installation + + +If you already have generated ShapeTypes, you may install the `@ldo/ldo` and `@ldo/solid` libraries independently. + +``` +npm i @ldo/ldo @ldo/solid +``` +
+ +## Simple Examples + +Below is a simple example of @ldo/solid. Assume that a ShapeType was previously generated and placed at `./.ldo/foafProfile.shapeTypes`. Also assume we have a shape type for social media at `./.ldo/socialMediaPost.shapeTypes` + +```typescript +import { changeData, commitData } from "@ldo/connected"; +import { createSolidLdoDataset } from "@ldo/solid"; +import { fetch, getDefaultSession } from "@inrupt/solid-client-authn-browser"; +import { FoafProfileShapeType } from "./.ldo/foafProfile.shapeTypes.js"; +import { SocialMediaPostShapeType } from "./.ldo/socialMediaPost.shapeTypes.js"; + +async function main() { + /** + * =========================================================================== + * READING DATA FROM A POD + * =========================================================================== + */ + + // Before we begin using @ldo/solid. Let's get the WebId of the current user + const webIdUri = getDefaultSession().info.webId; + if (!webIdUri) throw new Error("User is not logged in"); + + // Now let's proceed with @ldo/solid. Our first step is setting up a + // SolidLdoDataset. You can think of this dataset as a local store for all the + // information in the Solidverse. Don't forget to pass the authenticated fetch + // function to do your queries! + const solidLdoDataset = createSolidLdoDataset(); + solidLdoDataset.setContext({ fetch }); + + // We'll start with getting a representation of our WebId's resource + const webIdResource = solidLdoDataset.getResource(webIdUri); + + // This resource is currently unfetched + console.log(webIdResource.isUnfetched()); // Logs true + + // So let's fetch it! Running the `read` command will make a request to get + // the WebId. + const readResult = await webIdResource.read(); + + // @ldo/solid will never throw an error. Instead, it will return errors. This + // design decision was made to force you to handle any errors. It may seem a + // bit annoying at first, but it will result in more resiliant code. You can + // easily follow intellisense tooltips to see what kinds of errors each action + // can throw. + if (readResult.isError) { + switch (readResult.type) { + case "serverError": + console.error("The solid server had an error:", readResult.message); + return; + case "noncompliantPodError": + console.error("The Pod responded in a way not compliant with the spec"); + return; + default: + console.error("Some other error was detected:", readResult.message); + } + } + + // When fetching a data resource, read triples will automatically be added to + // the solidLdoDataset. You can access them using Linked Data Objects. In + // the following example we're using a Profile Linked Data Object that was + // generated with the init step. + const profile = solidLdoDataset + .usingType(FoafProfileShapeType) + .fromSubject(webIdUri); + + // Now you can read "profile" like any JSON. + console.log(profile.name); + + /** + * =========================================================================== + * MODIFYING DATA + * =========================================================================== + */ + + // When we want to modify data the first step is to use the `changeData` + // function. We pass in an object that we want to change (in this case, + // "profile") as well an a list of any resources to which we want those + // changes to be applied (in this case, just the webIdResource). This gives + // us a new variable (conventionally named with a c for "changed") that we can + // write changes to. + const cProfile = changeData(profile, webIdResource); + + // We can make changes just like it's regular JSON + cProfile.name = "Captain Cool Dude"; + + // Committing data is as easy as running the "commitData" function. + const commitResult = await commitData(cProfile); + + // Remember to check for and handle errors! We'll keep it short this time. + if (commitResult.isError) throw commitResult; + + /** + * =========================================================================== + * CREATING NEW RESOURCES + * =========================================================================== + */ + + // Let's create some social media posts to be stored on the Solid Pod! + // Our first step is going to be finding where to place these posts. In the + // future, there will be advanced ways to determine the location of resources + // but for now, let's throw it in the root folder. + + // But, first, let's find out where the root folder is. We can take our WebId + // resource and call `getRootContainer`. Let's assume the root container has + // a URI "https://example.com/" + const rootContainer = await webIdResource.getRootContainer(); + if (rootContainer.isError) throw rootContainer; + + // Now, let's create a container for our posts + const createPostContainerResult = + await rootContainer.createChildIfAbsent("social-posts/"); + if (createPostContainerResult.isError) throw createPostContainerResult; + + // Most results store the affected resource in the "resource" field. This + // container has the URI "https://example.com/social-posts/" + const postContainer = createPostContainerResult.resource; + + // Now that we have our container, let's make a Post resource! This is a data + // resource, which means we can put raw Solid Data (RDF) into it. + const postResourceResult = + await postContainer.createChildAndOverwrite("post1.ttl"); + if (postResourceResult.isError) throw postResourceResult; + const postResource = postResourceResult.resource; + + // We can also create binary resources with things like images + const imageResourceResult = await postContainer.uploadChildAndOverwrite( + // name of the binary + "image1.svg", + // A blob for the binary + new Blob([``]), + // mime type of the binary + "image/svg+xml", + ); + if (imageResourceResult.isError) throw imageResourceResult; + const imageResource = imageResourceResult.resource; + + /** + * =========================================================================== + * CREATING NEW DATA + * =========================================================================== + */ + + // We create data in a similar way to the way we modify data. We can use the + // "createData" method. + const cPost = solidLdoDataset.createData( + // An LDO ShapeType saying that this is a social media psot + SocialMediaPostShapeType, + // The URI of the post (in this case we'll make it the same as the resource) + postResource.uri, + // The resource we should write it to + postResource, + ); + + // We can add new data + cPost.text = "Check out this bad svg:"; + cPost.image = { "@id": imageResource.uri }; + + // And now we commit data + const newDataResult = await commitData(cPost); + if (newDataResult.isError) throw newDataResult; + + /** + * =========================================================================== + * DELETING RESOURCES + * =========================================================================== + */ + + // Deleting resources can be done with a single method call. In this case, + // the container will be deleted along with all its contained resources + const deleteResult = await postContainer.delete(); + if (deleteResult.isError) throw deleteResult; +} +main(); +``` + +## API Details + +SolidLdoDataset + + - [createSolidLdoDataset](https://ldo.js.org/latest/api/solid/functions/createSolidLdoDataset/) + +Resources (Manage batching requests) + + - [SolidResource](https://ldo.js.org/latest/api/classes/SolidResource/) + - [SolidLeafUri](https://ldo.js.org/latest/api/solid/types/SolidLeafUri/) + - [SolidContainerUri](https://ldo.js.org/latest/api/solid/types/SolidContainerUri/) + - [SolidLeaf](https://ldo.js.org/latest/api/solid/classes/SolidLeaf/) + - [SolidContainer](https://ldo.js.org/latest/api/solid/classes/SolidContainer/) + + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/babel.config.cjs b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/babel.config.cjs new file mode 100644 index 0000000..24d5e76 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/babel.config.cjs @@ -0,0 +1,3 @@ +module.exports = { + presets: [["@babel/preset-env", { targets: { node: "current" } }]], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/jest.config.cjs b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/jest.config.cjs new file mode 100644 index 0000000..774f038 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/jest.config.cjs @@ -0,0 +1,9 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +// packages/connected-solid/jest.config.cjs +const sharedConfig = require("../../jest.esm.config.js"); + +module.exports = { + ...sharedConfig, + rootDir: "./", + collectCoverageFrom: ["src/**/*.ts", "!src/**/*.d.ts"], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/package.json new file mode 100644 index 0000000..78f83bb --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/package.json @@ -0,0 +1,69 @@ +{ + "name": "@ldo/connected-solid", + "version": "1.0.0-alpha.32", + "description": "A plugin for @ldo/connected to work with the Solid ecosystem.", + "type": "module", + "main": "./dist/cjs/index.cjs", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.cjs" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "rimraf dist && npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --project tsconfig.cjs.json && node ../../scripts/rename-to-cjs.js", + "build:esm": "tsc --project tsconfig.esm.json", + "test": "vitest run --coverage", + "prepublishOnly": " npm run build", + "build:ldo": "ldo build --input src/.shapes --output src/.ldo", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "docs": "typedoc --plugin typedoc-plugin-markdown", + "remove-dist": "rimraf dist/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/solid#readme", + "devDependencies": { + "@inrupt/solid-client-authn-core": "^3.0.0", + "@ldo/cli": "^1.0.0-alpha.32", + "@ldo/test-solid-server": "^1.0.0-alpha.28", + "@rdfjs/types": "^1.0.1", + "@solid-notifications/types": "^0.1.2", + "@solid/community-server": "8.0.0-alpha.0", + "cross-env": "^7.0.3", + "ts-node": "^10.9.1", + "typed-emitter": "^2.1.0", + "typedoc": "^0.25.4", + "typedoc-plugin-markdown": "^3.17.1" + }, + "dependencies": { + "@ldo/connected": "^1.0.0-alpha.32", + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@solid-notifications/subscription": "^0.1.2", + "cross-fetch": "^3.1.6", + "http-link-header": "^1.1.1", + "ws": "^8.18.0" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "gitHead": "840910c56ec3f61416f031cc76771a5673af6757" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.context.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.context.ts new file mode 100644 index 0000000..7f50b27 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.context.ts @@ -0,0 +1,108 @@ +import { LdoJsonldContext } from "@ldo/ldo"; + +/** + * ============================================================================= + * solidContext: JSONLD Context for solid + * ============================================================================= + */ +export const solidContext: LdoJsonldContext = { + type: { + "@id": "@type", + "@isCollection": true, + }, + Container: { + "@id": "http://www.w3.org/ns/ldp#Container", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + modified: { + "@id": "http://purl.org/dc/terms/modified", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + contains: { + "@id": "http://www.w3.org/ns/ldp#contains", + "@type": "@id", + "@isCollection": true, + }, + mtime: { + "@id": "http://www.w3.org/ns/posix/stat#mtime", + "@type": "http://www.w3.org/2001/XMLSchema#decimal", + }, + size: { + "@id": "http://www.w3.org/ns/posix/stat#size", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + }, + }, + Resource: { + "@id": "http://www.w3.org/ns/ldp#Resource", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + modified: { + "@id": "http://purl.org/dc/terms/modified", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + contains: { + "@id": "http://www.w3.org/ns/ldp#contains", + "@type": "@id", + "@isCollection": true, + }, + mtime: { + "@id": "http://www.w3.org/ns/posix/stat#mtime", + "@type": "http://www.w3.org/2001/XMLSchema#decimal", + }, + size: { + "@id": "http://www.w3.org/ns/posix/stat#size", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + }, + }, + modified: { + "@id": "http://purl.org/dc/terms/modified", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + contains: { + "@id": "http://www.w3.org/ns/ldp#contains", + "@type": "@id", + "@isCollection": true, + }, + Resource2: { + "@id": "http://www.w3.org/ns/iana/media-types/text/turtle#Resource", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + modified: { + "@id": "http://purl.org/dc/terms/modified", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + mtime: { + "@id": "http://www.w3.org/ns/posix/stat#mtime", + "@type": "http://www.w3.org/2001/XMLSchema#decimal", + }, + size: { + "@id": "http://www.w3.org/ns/posix/stat#size", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + }, + }, + mtime: { + "@id": "http://www.w3.org/ns/posix/stat#mtime", + "@type": "http://www.w3.org/2001/XMLSchema#decimal", + }, + size: { + "@id": "http://www.w3.org/ns/posix/stat#size", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.schema.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.schema.ts new file mode 100644 index 0000000..4d9adc0 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.schema.ts @@ -0,0 +1,233 @@ +import { Schema } from "shexj"; + +/** + * ============================================================================= + * solidSchema: ShexJ Schema for solid + * ============================================================================= + */ +export const solidSchema: Schema = { + type: "Schema", + shapes: [ + { + id: "http://www.w3.org/ns/lddps#Container", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + id: "http://www.w3.org/ns/lddps#ContainerShape", + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/ns/ldp#Container", + "http://www.w3.org/ns/ldp#Resource", + ], + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "A container on a Solid server", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://purl.org/dc/terms/modified", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Date modified", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/ldp#contains", + valueExpr: "http://www.w3.org/ns/lddps#Resource", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines a Solid Resource", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/posix/stat#mtime", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#decimal", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "?", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/posix/stat#size", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#integer", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "size of this container", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "http://www.w3.org/ns/lddps#Resource", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + id: "http://www.w3.org/ns/lddps#ResourceShape", + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/ns/ldp#Resource", + "http://www.w3.org/ns/iana/media-types/text/turtle#Resource", + ], + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Any resource on a Solid server", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://purl.org/dc/terms/modified", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Date modified", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/posix/stat#mtime", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#decimal", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "?", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/posix/stat#size", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#integer", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "size of this container", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "http://www.w3.org/ns/lddps#ProfileWithStorage", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + id: "http://www.w3.org/ns/lddps#ProfileWithStorageShape", + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#storage", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + ], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.shapeTypes.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.shapeTypes.ts new file mode 100644 index 0000000..53bf9e1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.shapeTypes.ts @@ -0,0 +1,37 @@ +import { ShapeType } from "@ldo/ldo"; +import { solidSchema } from "./solid.schema.js"; +import { solidContext } from "./solid.context.js"; +import { Container, Resource, ProfileWithStorage } from "./solid.typings.js"; + +/** + * ============================================================================= + * LDO ShapeTypes solid + * ============================================================================= + */ + +/** + * Container ShapeType + */ +export const ContainerShapeType: ShapeType = { + schema: solidSchema, + shape: "http://www.w3.org/ns/lddps#Container", + context: solidContext, +}; + +/** + * Resource ShapeType + */ +export const ResourceShapeType: ShapeType = { + schema: solidSchema, + shape: "http://www.w3.org/ns/lddps#Resource", + context: solidContext, +}; + +/** + * ProfileWithStorage ShapeType + */ +export const ProfileWithStorageShapeType: ShapeType = { + schema: solidSchema, + shape: "http://www.w3.org/ns/lddps#ProfileWithStorage", + context: solidContext, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.typings.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.typings.ts new file mode 100644 index 0000000..0405e75 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/solid.typings.ts @@ -0,0 +1,84 @@ +import { LdoJsonldContext, LdSet } from "@ldo/ldo"; + +/** + * ============================================================================= + * Typescript Typings for solid + * ============================================================================= + */ + +/** + * Container Type + */ +export interface Container { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * A container on a Solid server + */ + type?: LdSet< + | { + "@id": "Container"; + } + | { + "@id": "Resource"; + } + >; + /** + * Date modified + */ + modified?: string; + /** + * Defines a Solid Resource + */ + contains?: LdSet; + /** + * ? + */ + mtime?: number; + /** + * size of this container + */ + size?: number; +} + +/** + * Resource Type + */ +export interface Resource { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * Any resource on a Solid server + */ + type?: LdSet< + | { + "@id": "Resource"; + } + | { + "@id": "Resource2"; + } + >; + /** + * Date modified + */ + modified?: string; + /** + * ? + */ + mtime?: number; + /** + * size of this container + */ + size?: number; +} + +/** + * ProfileWithStorage Type + */ +export interface ProfileWithStorage { + "@id"?: string; + "@context"?: LdoJsonldContext; + storage?: LdSet<{ + "@id": string; + }>; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.context.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.context.ts new file mode 100644 index 0000000..6f6c9fd --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.context.ts @@ -0,0 +1,78 @@ +import { LdoJsonldContext } from "@ldo/ldo"; + +/** + * ============================================================================= + * wacContext: JSONLD Context for wac + * ============================================================================= + */ +export const wacContext: LdoJsonldContext = { + type: { + "@id": "@type", + }, + Authorization: { + "@id": "http://www.w3.org/ns/auth/acl#Authorization", + "@context": { + type: { + "@id": "@type", + }, + accessTo: { + "@id": "http://www.w3.org/ns/auth/acl#accessTo", + "@type": "@id", + }, + default: { + "@id": "http://www.w3.org/ns/auth/acl#default", + "@type": "@id", + }, + agent: { + "@id": "http://www.w3.org/ns/auth/acl#agent", + "@type": "@id", + "@isCollection": true, + }, + agentGroup: { + "@id": "http://www.w3.org/ns/auth/acl#agentGroup", + "@type": "@id", + "@isCollection": true, + }, + agentClass: { + "@id": "http://www.w3.org/ns/auth/acl#agentClass", + "@isCollection": true, + }, + mode: { + "@id": "http://www.w3.org/ns/auth/acl#mode", + "@isCollection": true, + }, + }, + }, + accessTo: { + "@id": "http://www.w3.org/ns/auth/acl#accessTo", + "@type": "@id", + }, + default: { + "@id": "http://www.w3.org/ns/auth/acl#default", + "@type": "@id", + }, + agent: { + "@id": "http://www.w3.org/ns/auth/acl#agent", + "@type": "@id", + "@isCollection": true, + }, + agentGroup: { + "@id": "http://www.w3.org/ns/auth/acl#agentGroup", + "@type": "@id", + "@isCollection": true, + }, + agentClass: { + "@id": "http://www.w3.org/ns/auth/acl#agentClass", + "@isCollection": true, + }, + AuthenticatedAgent: "http://www.w3.org/ns/auth/acl#AuthenticatedAgent", + Agent: "http://xmlns.com/foaf/0.1/Agent", + mode: { + "@id": "http://www.w3.org/ns/auth/acl#mode", + "@isCollection": true, + }, + Read: "http://www.w3.org/ns/auth/acl#Read", + Write: "http://www.w3.org/ns/auth/acl#Write", + Append: "http://www.w3.org/ns/auth/acl#Append", + Control: "http://www.w3.org/ns/auth/acl#Control", +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.schema.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.schema.ts new file mode 100644 index 0000000..2d54115 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.schema.ts @@ -0,0 +1,169 @@ +import { Schema } from "shexj"; + +/** + * ============================================================================= + * wacSchema: ShexJ Schema for wac + * ============================================================================= + */ +export const wacSchema: Schema = { + type: "Schema", + shapes: [ + { + id: "http://www.w3.org/ns/auth/acls#Authorization", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + id: "http://www.w3.org/ns/auth/acls#AuthorizationShape", + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://www.w3.org/ns/auth/acl#Authorization"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Denotes this as an acl:Authorization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#accessTo", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The subject of this authorization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#default", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The container subject of this authorization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#agent", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "An agent is a person, social entity or software identified by a URI, e.g., a WebID denotes an agent", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#agentGroup", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Denotes a group of agents being given the access permission", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#agentClass", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/ns/auth/acl#AuthenticatedAgent", + "http://xmlns.com/foaf/0.1/Agent", + ], + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "An agent class is a class of persons or entities identified by a URI.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#mode", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/ns/auth/acl#Read", + "http://www.w3.org/ns/auth/acl#Write", + "http://www.w3.org/ns/auth/acl#Append", + "http://www.w3.org/ns/auth/acl#Control", + ], + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Denotes a class of operations that the agents can perform on a resource.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + ], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.shapeTypes.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.shapeTypes.ts new file mode 100644 index 0000000..7b25491 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.shapeTypes.ts @@ -0,0 +1,19 @@ +import { ShapeType } from "@ldo/ldo"; +import { wacSchema } from "./wac.schema.js"; +import { wacContext } from "./wac.context.js"; +import { Authorization } from "./wac.typings.js"; + +/** + * ============================================================================= + * LDO ShapeTypes wac + * ============================================================================= + */ + +/** + * Authorization ShapeType + */ +export const AuthorizationShapeType: ShapeType = { + schema: wacSchema, + shape: "http://www.w3.org/ns/auth/acls#Authorization", + context: wacContext, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.typings.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.typings.ts new file mode 100644 index 0000000..40860e0 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.ldo/wac.typings.ts @@ -0,0 +1,73 @@ +import { LdoJsonldContext, LdSet } from "@ldo/ldo"; + +/** + * ============================================================================= + * Typescript Typings for wac + * ============================================================================= + */ + +/** + * Authorization Type + */ +export interface Authorization { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * Denotes this as an acl:Authorization + */ + type: { + "@id": "Authorization"; + }; + /** + * The subject of this authorization + */ + accessTo?: { + "@id": string; + }; + /** + * The container subject of this authorization + */ + default?: { + "@id": string; + }; + /** + * An agent is a person, social entity or software identified by a URI, e.g., a WebID denotes an agent + */ + agent?: LdSet<{ + "@id": string; + }>; + /** + * Denotes a group of agents being given the access permission + */ + agentGroup?: LdSet<{ + "@id": string; + }>; + /** + * An agent class is a class of persons or entities identified by a URI. + */ + agentClass?: LdSet< + | { + "@id": "AuthenticatedAgent"; + } + | { + "@id": "Agent"; + } + >; + /** + * Denotes a class of operations that the agents can perform on a resource. + */ + mode?: LdSet< + | { + "@id": "Read"; + } + | { + "@id": "Write"; + } + | { + "@id": "Append"; + } + | { + "@id": "Control"; + } + >; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.shapes/solid.shex b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.shapes/solid.shex new file mode 100644 index 0000000..f90f1b5 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.shapes/solid.shex @@ -0,0 +1,43 @@ +PREFIX xsd: +PREFIX rdf: +PREFIX rdfs: +PREFIX ldp: +PREFIX ldps: +PREFIX dct: +PREFIX stat: +PREFIX tur: +PREFIX pim: + +ldps:Container EXTRA a { + $ldps:ContainerShape ( + a [ ldp:Container ldp:Resource ]* + // rdfs:comment "A container on a Solid server"; + dct:modified xsd:string? + // rdfs:comment "Date modified"; + ldp:contains @ldps:Resource* + // rdfs:comment "Defines a Solid Resource"; + stat:mtime xsd:decimal? + // rdfs:comment "?"; + stat:size xsd:integer? + // rdfs:comment "size of this container"; + ) +} + +ldps:Resource EXTRA a { + $ldps:ResourceShape ( + a [ ldp:Resource tur:Resource ]* + // rdfs:comment "Any resource on a Solid server"; + dct:modified xsd:string? + // rdfs:comment "Date modified"; + stat:mtime xsd:decimal? + // rdfs:comment "?"; + stat:size xsd:integer? + // rdfs:comment "size of this container"; + ) +} + +ldps:ProfileWithStorage EXTRA a { + $ldps:ProfileWithStorageShape ( + pim:storage IRI *; + ) +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.shapes/wac.shex b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.shapes/wac.shex new file mode 100644 index 0000000..5ff19cd --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/.shapes/wac.shex @@ -0,0 +1,23 @@ +PREFIX acl: +PREFIX acls: +PREFIX foaf: +PREFIX rdfs: + +acls:Authorization EXTRA a { + $acls:AuthorizationShape ( + a [ acl:Authorization ] + // rdfs:comment "Denotes this as an acl:Authorization"; + acl:accessTo IRI? + // rdfs:comment "The subject of this authorization"; + acl:default IRI? + // rdfs:comment "The container subject of this authorization"; + acl:agent IRI* + // rdfs:comment "An agent is a person, social entity or software identified by a URI, e.g., a WebID denotes an agent"; + acl:agentGroup IRI* + // rdfs:comment "Denotes a group of agents being given the access permission"; + acl:agentClass [ acl:AuthenticatedAgent foaf:Agent ]* + // rdfs:comment "An agent class is a class of persons or entities identified by a URI."; + acl:mode [ acl:Read acl:Write acl:Append acl:Control ]* + // rdfs:comment "Denotes a class of operations that the agents can perform on a resource."; + ) +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/SolidConnectedPlugin.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/SolidConnectedPlugin.ts new file mode 100644 index 0000000..1ee48cb --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/SolidConnectedPlugin.ts @@ -0,0 +1,90 @@ +import type { ConnectedContext, ConnectedPlugin } from "@ldo/connected"; +import type { SolidContainerUri, SolidLeafUri, SolidUri } from "./types.js"; +import { SolidLeaf } from "./resources/SolidLeaf.js"; +import { SolidContainer } from "./resources/SolidContainer.js"; +import { isSolidContainerUri, isSolidUri } from "./util/isSolidUri.js"; + +/** + * The Type of the SolidConnectedContext + */ +export interface SolidConnectedContext { + fetch?: typeof fetch; +} +export interface SolidConnectedPlugin + extends ConnectedPlugin< + "solid", + SolidUri, + SolidLeaf | SolidContainer, + SolidConnectedContext, + undefined + > { + name: "solid"; + getResource: + | ((uri: SolidLeafUri, context: ConnectedContext) => SolidLeaf) + | (( + uri: SolidContainerUri, + context: ConnectedContext, + ) => SolidContainer); + createResource(context: ConnectedContext): Promise; +} + +function getResource( + uri: SolidLeafUri, + context: ConnectedContext, +): SolidLeaf; +function getResource( + uri: SolidContainerUri, + context: ConnectedContext, +): SolidContainer; +function getResource( + uri: SolidLeafUri | SolidContainerUri, + context: ConnectedContext, +): SolidLeaf | SolidContainer { + if (isSolidContainerUri(uri)) { + return new SolidContainer(uri, context); + } else { + return new SolidLeaf(uri, context); + } +} + +/** + * This plugin can be given to a ConnectedDataset to let it connect to Solid + * servers. + * + * @example + * ``` + * import { createConnectedLdoDataset } from "@ldo/connected"; + * import { solidConnectedPlugin } from "@ldo/connected-solid"; + * + * const solidConnectedDataset = createConnectedLdoDataset([ + * solidConnectedPlugin + * ]); + * ``` + */ +export const solidConnectedPlugin: SolidConnectedPlugin = { + name: "solid", + + getResource, + + createResource: function (): Promise { + throw new Error("Function not implemented."); + }, + + isUriValid: function (uri: string): uri is SolidLeafUri | SolidContainerUri { + return isSolidUri(uri); + }, + + initialContext: { + fetch: undefined, + }, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore "Types" only exists for the typing system + types: {}, + + normalizeUri(uri: SolidUri): SolidUri { + const url = new URL(uri); + url.hash = ""; + url.search = ""; + return url.toString() as SolidUri; + }, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/createSolidLdoDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/createSolidLdoDataset.ts new file mode 100644 index 0000000..10e92e3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/createSolidLdoDataset.ts @@ -0,0 +1,24 @@ +import { ConnectedLdoDataset } from "@ldo/connected"; +import { solidConnectedPlugin } from "./SolidConnectedPlugin.js"; +import { createDatasetFactory } from "@ldo/dataset"; +import { createTransactionDatasetFactory } from "@ldo/subscribable-dataset"; + +/** + * Creates a ConnectedLdoDataset with the Solid plugin + * @returns a ConnectedLdoDataset + * + * @example + * ```typescript + * import { createSolidLdoDataset } from "@ldo/connected-solid"; + * + * const connectedSolidDataset = createSolidLdoDataset(); + * ``` + */ +export function createSolidLdoDataset() { + const solidLdoDataset = new ConnectedLdoDataset( + [solidConnectedPlugin], + createDatasetFactory(), + createTransactionDatasetFactory(), + ); + return solidLdoDataset; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/getStorageFromWebId.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/getStorageFromWebId.ts new file mode 100644 index 0000000..9854e80 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/getStorageFromWebId.ts @@ -0,0 +1,61 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { ConnectedLdoDataset, ConnectedPlugin } from "@ldo/connected"; +import type { SolidContainerUri, SolidLeafUri } from "./types.js"; +import { GetStorageContainerFromWebIdSuccess } from "./requester/results/success/CheckRootContainerSuccess.js"; +import type { CheckRootResultError } from "./requester/requests/checkRootContainer.js"; +import type { ReadResultError } from "./requester/requests/readResource.js"; +import type { NoRootContainerError } from "./requester/results/error/NoRootContainerError.js"; +import type { SolidLeaf } from "./resources/SolidLeaf.js"; +import type { SolidContainer } from "./resources/SolidContainer.js"; +import type { SolidConnectedPlugin } from "./SolidConnectedPlugin.js"; +import { ProfileWithStorageShapeType } from "./.ldo/solid.shapeTypes.js"; + +/** + * Gets a list of root storage containers for a user given their WebId + * @param webId: The webId for the user + * @returns A list of storages if successful, an error if not + * @example + * ```typescript + * import { getStorageFromWebId } from "@ldo/connected-solid"; + * + * const result = await getStorageFromWebId( + * solidLdoDataset, + * "https://example.com/profile/card#me" + * ); + * if (result.isError) { + * // Do something + * } + * console.log(result.storageContainer[0].uri); + * ``` + */ +export async function getStorageFromWebId( + webId: SolidLeafUri, + dataset: ConnectedLdoDataset<(SolidConnectedPlugin | ConnectedPlugin)[]>, +): Promise< + | GetStorageContainerFromWebIdSuccess + | CheckRootResultError + | ReadResultError + | NoRootContainerError +> { + const webIdResource = dataset.getResource(webId) as SolidLeaf; + const readResult = await webIdResource.readIfUnfetched(); + if (readResult.isError) return readResult; + const profile = dataset + .usingType(ProfileWithStorageShapeType) + .fromSubject(webId); + if (profile.storage && profile.storage.size > 0) { + const containers = profile.storage + .map((storageNode) => + dataset.getResource(storageNode["@id"] as SolidContainerUri), + ) + .filter((container): container is SolidContainer => { + return container.type === "SolidContainer"; + }); + + return new GetStorageContainerFromWebIdSuccess(containers); + } + const getContainerResult = await webIdResource.getRootContainer(); + if (getContainerResult.type === "SolidContainer") + return new GetStorageContainerFromWebIdSuccess([getContainerResult]); + return getContainerResult; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/index.ts new file mode 100644 index 0000000..5c3fa65 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/index.ts @@ -0,0 +1,50 @@ +export * from "./types.js"; +export * from "./SolidConnectedPlugin.js"; +export * from "./createSolidLdoDataset.js"; +export * from "./getStorageFromWebId.js"; + +export * from "./resources/SolidResource.js"; +export * from "./resources/SolidContainer.js"; +export * from "./resources/SolidLeaf.js"; + +export * from "./requester/BatchedRequester.js"; +export * from "./requester/ContainerBatchedRequester.js"; +export * from "./requester/LeafBatchedRequester.js"; + +export * from "./requester/requests/checkRootContainer.js"; +export * from "./requester/requests/createDataResource.js"; +export * from "./requester/requests/deleteResource.js"; +export * from "./requester/requests/readResource.js"; +export * from "./requester/requests/requestOptions.js"; +export * from "./requester/requests/updateDataResource.js"; +export * from "./requester/requests/uploadResource.js"; + +export * from "./requester/results/success/CheckRootContainerSuccess.js"; +export * from "./requester/results/success/CreateSuccess.js"; +export * from "./requester/results/success/DeleteSuccess.js"; +export * from "./requester/results/success/SolidReadSuccess.js"; + +export * from "./requester/results/error/AccessControlError.js"; +export * from "./requester/results/error/HttpErrorResult.js"; +export * from "./requester/results/error/NoRootContainerError.js"; +export * from "./requester/results/error/NoncompliantPodError.js"; + +export * from "./requester/util/modifyQueueFuntions.js"; + +export * from "./util/isSolidUri.js"; +export * from "./util/guaranteeFetch.js"; +export * from "./util/rdfUtils.js"; +export * from "./util/RequestBatcher.js"; + +export * from "./wac/getWacRule.js"; +export * from "./wac/getWacUri.js"; +export * from "./wac/setWacRule.js"; +export * from "./wac/WacRule.js"; +export * from "./wac/results/GetWacRuleSuccess.js"; +export * from "./wac/results/GetWacUriSuccess.js"; +export * from "./wac/results/SetWacRuleSuccess.js"; +export * from "./wac/results/WacRuleAbsent.js"; + +export * from "./notifications/SolidNotificationMessage.js"; +export * from "./notifications/Websocket2023NotificationSubscription.js"; +export * from "./notifications/results/NotificationErrors.js"; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/notifications/SolidNotificationMessage.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/notifications/SolidNotificationMessage.ts new file mode 100644 index 0000000..32a8696 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/notifications/SolidNotificationMessage.ts @@ -0,0 +1,10 @@ +/** + * A message sent from the Pod as a notification + */ +export interface SolidNotificationMessage { + "@context": string | string[]; + id: string; + type: "Update" | "Delete" | "Remove" | "Add"; + object: string; + published: string; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/notifications/Websocket2023NotificationSubscription.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/notifications/Websocket2023NotificationSubscription.ts new file mode 100644 index 0000000..966f929 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/notifications/Websocket2023NotificationSubscription.ts @@ -0,0 +1,149 @@ +import { SubscriptionClient } from "@solid-notifications/subscription"; +import { WebSocket } from "ws"; +import { + DisconnectedAttemptingReconnectError, + DisconnectedNotAttemptingReconnectError, + UnsupportedNotificationError, +} from "./results/NotificationErrors.js"; +import type { SolidNotificationMessage } from "./SolidNotificationMessage.js"; +import { UnexpectedResourceError, type ConnectedContext } from "@ldo/connected"; +import type { + ChannelType, + NotificationChannel, +} from "@solid-notifications/types"; +import { NotificationSubscription } from "@ldo/connected"; +import type { SolidConnectedPlugin } from "../SolidConnectedPlugin.js"; +import type { SolidLeaf } from "../resources/SolidLeaf.js"; +import type { SolidContainer } from "../resources/SolidContainer.js"; +import { guaranteeFetch } from "../util/guaranteeFetch.js"; + +const CHANNEL_TYPE = + "http://www.w3.org/ns/solid/notifications#WebSocketChannel2023"; + +/** + * @internal + * An implementation of the Websocket2023 notifiction spec + */ +export class Websocket2023NotificationSubscription extends NotificationSubscription< + SolidConnectedPlugin, + SolidNotificationMessage +> { + private socket: WebSocket | undefined; + private createWebsocket: (address: string) => WebSocket; + + // Reconnection data + // How often we should attempt a reconnection + private reconnectInterval = 5000; + // How many attempts have already been tried for a reconnection + private reconnectAttempts = 0; + // Whether or not the socket was manually closes + private isManualClose = false; + // Maximum number of attempts to reconnect + private maxReconnectAttempts = 6; + + constructor( + resource: SolidLeaf | SolidContainer, + parentSubscription: (message: SolidNotificationMessage) => void, + context: ConnectedContext, + createWebsocket?: (address: string) => WebSocket, + ) { + super(resource, parentSubscription, context); + this.createWebsocket = createWebsocket ?? createWebsocketDefault; + } + + async open(): Promise { + try { + const notificationChannel = await this.discoverNotificationChannel(); + await this.subscribeToWebsocket(notificationChannel); + } catch (err) { + if ( + err instanceof Error && + err.message.startsWith("Discovery did not succeed") + ) { + this.onNotificationError( + new UnsupportedNotificationError(this.resource, err.message), + ); + } else { + this.onNotificationError( + UnexpectedResourceError.fromThrown(this.resource, err), + ); + } + this.onClose(); + } + } + + public async discoverNotificationChannel(): Promise { + const client = new SubscriptionClient( + guaranteeFetch(this.context.solid.fetch), + ); + return await client.subscribe( + this.resource.uri, + CHANNEL_TYPE as ChannelType, + ); + } + + public async subscribeToWebsocket( + notificationChannel: NotificationChannel, + ): Promise { + this.socket = this.createWebsocket( + notificationChannel.receiveFrom as string, + ); + + this.socket.onopen = () => { + this.reconnectAttempts = 0; // Reset attempts on successful connection + this.isManualClose = false; // Reset manual close flag + }; + + this.socket.onmessage = (message) => { + const messageData = message.data.toString(); + // TODO uncompliant Pod error on misformatted message + this.onNotification(JSON.parse(messageData) as SolidNotificationMessage); + }; + + this.socket.onclose = () => { + this.onClose(); + }; + + this.socket.onerror = (err) => { + this.onNotificationError( + new UnexpectedResourceError(this.resource, err.error), + ); + }; + return; + } + + private onClose() { + if (!this.isManualClose) { + // Attempt to reconnect only if the disconnection was unintentional + if (this.reconnectAttempts < this.maxReconnectAttempts) { + this.reconnectAttempts++; + setTimeout(() => { + this.open(); + }, this.reconnectInterval); + this.onNotificationError( + new DisconnectedAttemptingReconnectError( + this.resource, + `Attempting to reconnect to Websocket for ${this.resource.uri}.`, + ), + ); + } else { + this.onNotificationError( + new DisconnectedNotAttemptingReconnectError( + this.resource, + `Lost connection to websocket for ${this.resource.uri}.`, + ), + ); + } + } + } + + protected async close(): Promise { + this.socket?.close(); + } +} + +function createWebsocketDefault(address: string): WebSocket { + const WebSocketImpl = + typeof window !== "undefined" ? window.WebSocket : WebSocket; + return new WebSocketImpl(address) as WebSocket; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/notifications/results/NotificationErrors.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/notifications/results/NotificationErrors.ts new file mode 100644 index 0000000..494a030 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/notifications/results/NotificationErrors.ts @@ -0,0 +1,36 @@ +import type { Resource, UnexpectedResourceError } from "@ldo/connected"; +import { ResourceError } from "@ldo/connected"; + +export type NotificationCallbackError = + | DisconnectedAttemptingReconnectError + | DisconnectedNotAttemptingReconnectError + | UnsupportedNotificationError + | UnexpectedResourceError; + +/** + * Indicates that the requested method for receiving notifications is not + * supported by this Pod. + */ +export class UnsupportedNotificationError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "unsupportedNotificationError" as const; +} + +/** + * Indicates that the socket has disconnected and is attempting to reconnect. + */ +export class DisconnectedAttemptingReconnectError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "disconnectedAttemptingReconnectError" as const; +} + +/** + * Indicates that the socket has disconnected and is attempting to reconnect. + */ +export class DisconnectedNotAttemptingReconnectError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "disconnectedNotAttemptingReconnectError" as const; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/BatchedRequester.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/BatchedRequester.ts new file mode 100644 index 0000000..929cba7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/BatchedRequester.ts @@ -0,0 +1,203 @@ +import { ANY_KEY, RequestBatcher } from "../util/RequestBatcher.js"; +import type { ConnectedContext } from "@ldo/connected"; +import type { + ContainerCreateAndOverwriteResult, + ContainerCreateIfAbsentResult, + LeafCreateAndOverwriteResult, + LeafCreateIfAbsentResult, +} from "./requests/createDataResource.js"; +import { createDataResource } from "./requests/createDataResource.js"; +import type { + ReadContainerResult, + ReadLeafResult, +} from "./requests/readResource.js"; +import { readResource } from "./requests/readResource.js"; +import type { DeleteResult } from "./requests/deleteResource.js"; +import { deleteResource } from "./requests/deleteResource.js"; +import { modifyQueueByMergingEventsWithTheSameKeys } from "./util/modifyQueueFuntions.js"; +import type { SolidConnectedPlugin } from "../SolidConnectedPlugin.js"; +import type { SolidContainer } from "../resources/SolidContainer.js"; +import type { SolidLeaf } from "../resources/SolidLeaf.js"; + +const READ_KEY = "read"; +const CREATE_KEY = "createDataResource"; +const DELETE_KEY = "delete"; + +/** + * @internal + * + * A singleton for handling batched requests + */ +export abstract class BatchedRequester< + ResourceType extends SolidContainer | SolidLeaf, +> { + /** + * @internal + * A request batcher to maintain state for ongoing requests + */ + protected readonly requestBatcher = new RequestBatcher(); + + /** + * The uri of the resource + */ + abstract readonly resource: ResourceType; + + /** + * @internal + * ConnectedContext for the parent Dataset + */ + protected context: ConnectedContext; + + /** + * @param context - SolidLdoDatasetContext for the parent SolidLdoDataset + */ + constructor(context: ConnectedContext) { + this.context = context; + } + + /** + * Checks if the resource is currently making any request + * @returns true if the resource is making any requests + */ + isLoading(): boolean { + return this.requestBatcher.isLoading(ANY_KEY); + } + + /** + * Checks if the resource is currently executing a create request + * @returns true if the resource is currently executing a create request + */ + isCreating(): boolean { + return this.requestBatcher.isLoading(CREATE_KEY); + } + + /** + * Checks if the resource is currently executing a read request + * @returns true if the resource is currently executing a read request + */ + isReading(): boolean { + return this.requestBatcher.isLoading(READ_KEY); + } + + /** + * Checks if the resource is currently executing a delete request + * @returns true if the resource is currently executing a delete request + */ + isDeletinng(): boolean { + return this.requestBatcher.isLoading(DELETE_KEY); + } + + /** + * Read this resource. + * @returns A ReadLeafResult or a ReadContainerResult depending on the uri of + * this resource + */ + async read(): Promise { + const transaction = this.context.dataset.startTransaction(); + const result = await this.requestBatcher.queueProcess({ + name: READ_KEY, + args: [ + this.resource, + { dataset: transaction, fetch: this.context.solid.fetch }, + ], + perform: readResource, + modifyQueue: modifyQueueByMergingEventsWithTheSameKeys(READ_KEY), + after: (result) => { + if (!result.isError) { + transaction.commit(); + } + }, + }); + return result; + } + + /** + * Delete this resource + * @returns A DeleteResult + */ + async delete(): Promise> { + const transaction = this.context.dataset.startTransaction(); + const result = await this.requestBatcher.queueProcess({ + name: DELETE_KEY, + args: [ + this.resource, + { dataset: transaction, fetch: this.context.solid.fetch }, + ], + perform: deleteResource, + modifyQueue: modifyQueueByMergingEventsWithTheSameKeys(DELETE_KEY), + after: (result) => { + if (!result.isError) { + transaction.commit(); + } + }, + }); + return result as DeleteResult; + } + + /** + * Creates a Resource + * @param overwrite - If true, this will orverwrite the resource if it already + * exists + * @returns A ContainerCreateAndOverwriteResult or a + * LeafCreateAndOverwriteResult depending on this resource's URI + */ + createDataResource( + overwrite: true, + ): Promise; + createDataResource( + overwrite?: false, + ): Promise; + createDataResource( + overwrite?: boolean, + ): Promise< + | ContainerCreateAndOverwriteResult + | LeafCreateAndOverwriteResult + | ContainerCreateIfAbsentResult + | LeafCreateIfAbsentResult + >; + async createDataResource( + overwrite?: boolean, + ): Promise< + | ContainerCreateAndOverwriteResult + | LeafCreateAndOverwriteResult + | ContainerCreateIfAbsentResult + | LeafCreateIfAbsentResult + > { + const transaction = this.context.dataset.startTransaction(); + const result = await this.requestBatcher.queueProcess({ + name: CREATE_KEY, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore Apparently this is a nasty type and I can't be bothered to fix it + args: [ + this.resource, + overwrite ?? false, + { dataset: transaction, fetch: this.context.solid.fetch }, + ], + perform: createDataResource, + modifyQueue: (queue, currentlyLoading, args) => { + const lastElementInQueue = queue[queue.length - 1]; + if ( + lastElementInQueue && + lastElementInQueue.name === CREATE_KEY && + !!lastElementInQueue.args[1] === !!args[1] + ) { + return lastElementInQueue; + } + if ( + currentlyLoading && + currentlyLoading.name === CREATE_KEY && + !!currentlyLoading.args[1] === !!args[1] + ) { + return currentlyLoading; + } + return undefined; + }, + after: (result) => { + if (!result.isError) { + transaction.commit(); + } + }, + }); + return result; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/ContainerBatchedRequester.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/ContainerBatchedRequester.ts new file mode 100644 index 0000000..84c9a0d --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/ContainerBatchedRequester.ts @@ -0,0 +1,83 @@ +import type { ConnectedContext } from "@ldo/connected"; +import type { SolidContainer } from "../resources/SolidContainer.js"; +import { BatchedRequester } from "./BatchedRequester.js"; +import type { CheckRootResult } from "./requests/checkRootContainer.js"; +import { checkRootContainer } from "./requests/checkRootContainer.js"; +import type { + ContainerCreateAndOverwriteResult, + ContainerCreateIfAbsentResult, +} from "./requests/createDataResource.js"; +import type { ReadContainerResult } from "./requests/readResource.js"; +import { modifyQueueByMergingEventsWithTheSameKeys } from "./util/modifyQueueFuntions.js"; +import type { SolidConnectedPlugin } from "../SolidConnectedPlugin.js"; + +export const IS_ROOT_CONTAINER_KEY = "isRootContainer"; + +/** + * @internal + * + * A singleton to handle batched requests for containers + */ +export class ContainerBatchedRequester extends BatchedRequester { + /** + * The URI of the container + */ + readonly resource: SolidContainer; + + /** + * @param uri - The URI of the container + * @param context - ConnectedContext of the parent dataset + */ + constructor( + resource: SolidContainer, + context: ConnectedContext, + ) { + super(context); + this.resource = resource; + } + + /** + * Reads the container + * @returns A ReadContainerResult + */ + read(): Promise { + return super.read() as Promise; + } + + /** + * Creates the container + * @param overwrite - If true, this will orverwrite the resource if it already + * exists + */ + createDataResource( + overwrite: true, + ): Promise; + createDataResource(overwrite?: false): Promise; + createDataResource( + overwrite?: boolean, + ): Promise; + createDataResource( + overwrite?: boolean, + ): Promise< + ContainerCreateIfAbsentResult | ContainerCreateAndOverwriteResult + > { + return super.createDataResource(overwrite) as Promise< + ContainerCreateIfAbsentResult | ContainerCreateAndOverwriteResult + >; + } + + /** + * Checks to see if this container is a root container + * @returns A CheckRootResult + */ + async isRootContainer(): Promise { + return this.requestBatcher.queueProcess({ + name: IS_ROOT_CONTAINER_KEY, + args: [this.resource, { fetch: this.context.solid.fetch }], + perform: checkRootContainer, + modifyQueue: modifyQueueByMergingEventsWithTheSameKeys( + IS_ROOT_CONTAINER_KEY, + ), + }); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/LeafBatchedRequester.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/LeafBatchedRequester.ts new file mode 100644 index 0000000..5472648 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/LeafBatchedRequester.ts @@ -0,0 +1,180 @@ +import type { DatasetChanges } from "@ldo/rdf-utils"; +import { mergeDatasetChanges } from "@ldo/subscribable-dataset"; +import type { Quad } from "@rdfjs/types"; +import { BatchedRequester } from "./BatchedRequester.js"; +import type { + LeafCreateAndOverwriteResult, + LeafCreateIfAbsentResult, +} from "./requests/createDataResource.js"; +import type { ReadLeafResult } from "./requests/readResource.js"; +import type { UpdateResult } from "./requests/updateDataResource.js"; +import { updateDataResource } from "./requests/updateDataResource.js"; +import { uploadResource } from "./requests/uploadResource.js"; +import type { SolidLeaf } from "../resources/SolidLeaf.js"; +import type { ConnectedContext } from "@ldo/connected"; +import type { SolidConnectedPlugin } from "../SolidConnectedPlugin.js"; + +export const UPDATE_KEY = "update"; +export const UPLOAD_KEY = "upload"; + +/** + * @internal + * + * A singleton to handle batched requests for leafs + */ +export class LeafBatchedRequester extends BatchedRequester { + /** + * The URI of the leaf + */ + readonly resource: SolidLeaf; + + /** + * @param uri - the URI of the leaf + * @param context - SolidLdoDatasetContext of the parent dataset + */ + constructor( + resource: SolidLeaf, + context: ConnectedContext, + ) { + super(context); + this.resource = resource; + } + + /** + * Checks if the resource is currently executing an update request + * @returns true if the resource is currently executing an update request + */ + isUpdating(): boolean { + return this.requestBatcher.isLoading(UPDATE_KEY); + } + + /** + * Checks if the resource is currently executing an upload request + * @returns true if the resource is currently executing an upload request + */ + isUploading(): boolean { + return this.requestBatcher.isLoading(UPLOAD_KEY); + } + + /** + * Reads the leaf + * @returns A ReadLeafResult + */ + async read(): Promise { + return super.read() as Promise; + } + + /** + * Creates the leaf as a data resource + * @param overwrite - If true, this will orverwrite the resource if it already + * exists + */ + createDataResource(overwrite: true): Promise; + createDataResource(overwrite?: false): Promise; + createDataResource( + overwrite?: boolean, + ): Promise; + createDataResource( + overwrite?: boolean, + ): Promise { + return super.createDataResource(overwrite) as Promise< + LeafCreateIfAbsentResult | LeafCreateAndOverwriteResult + >; + } + + /** + * Update the data on this resource + * @param changes - DatasetChanges that should be applied to the Pod + */ + async updateDataResource( + changes: DatasetChanges, + ): Promise> { + const result = await this.requestBatcher.queueProcess({ + name: UPDATE_KEY, + args: [ + this.resource, + changes, + { + fetch: this.context.solid.fetch, + dataset: this.context.dataset, + }, + ], + perform: updateDataResource, + modifyQueue: (queue, currentlyProcessing, [, changes]) => { + if (queue[queue.length - 1]?.name === UPDATE_KEY) { + // Merge Changes + const originalChanges = queue[queue.length - 1].args[1]; + mergeDatasetChanges(originalChanges, changes); + return queue[queue.length - 1]; + } + return undefined; + }, + }); + return result as UpdateResult; + } + + /** + * Upload a binary at this resource's URI + * @param blob - A binary blob + * @param mimeType - the mime type of the blob + * @param overwrite: If true, will overwrite an existing file + */ + upload( + blob: Blob, + mimeType: string, + overwrite: true, + ): Promise; + upload( + blob: Blob, + mimeType: string, + overwrite?: false, + ): Promise; + upload( + blob: Blob, + mimeType: string, + overwrite?: boolean, + ): Promise; + async upload( + blob: Blob, + mimeType: string, + overwrite?: boolean, + ): Promise { + const transaction = this.context.dataset.startTransaction(); + const result = await this.requestBatcher.queueProcess({ + name: UPLOAD_KEY, + args: [ + this.resource, + blob, + mimeType, + // Hack: Something's up with these types. I can't be bothered to fix it + overwrite as false, + { dataset: transaction, fetch: this.context.solid.fetch }, + ], + perform: uploadResource, + modifyQueue: (queue, currentlyLoading, args) => { + const lastElementInQueue = queue[queue.length - 1]; + if ( + lastElementInQueue && + lastElementInQueue.name === UPLOAD_KEY && + !!lastElementInQueue.args[3] === !!args[3] + ) { + return lastElementInQueue; + } + if ( + currentlyLoading && + currentlyLoading.name === UPLOAD_KEY && + !!currentlyLoading.args[3] === !!args[3] + ) { + return currentlyLoading; + } + return undefined; + }, + after: (result) => { + if (!result.isError) { + transaction.commit(); + } + }, + }); + return result; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/checkRootContainer.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/checkRootContainer.ts new file mode 100644 index 0000000..d1c0e10 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/checkRootContainer.ts @@ -0,0 +1,85 @@ +import type { BasicRequestOptions } from "./requestOptions.js"; +import * as httpLinkHeader from "http-link-header"; +import { CheckRootContainerSuccess } from "../results/success/CheckRootContainerSuccess.js"; +import type { + HttpErrorResultType, + UnexpectedHttpError, +} from "../results/error/HttpErrorResult.js"; +import { HttpErrorResult } from "../results/error/HttpErrorResult.js"; +import { UnexpectedResourceError } from "@ldo/connected"; +import type { SolidContainer } from "../../resources/SolidContainer.js"; +import { guaranteeFetch } from "../../util/guaranteeFetch.js"; + +const parseLinkHeader: (typeof httpLinkHeader)["default"]["parse"] = + httpLinkHeader.default.parse; + +/** + * checkRootContainer result + */ +export type CheckRootResult = CheckRootContainerSuccess | CheckRootResultError; + +/** + * All possible errors checkRootResult can return + */ +export type CheckRootResultError = + | HttpErrorResultType + | UnexpectedHttpError + | UnexpectedResourceError; + +/** + * @internal + * Checks provided headers to see if a given URI is a root container as defined + * in the [solid specification section 4.1](https://solidproject.org/TR/protocol#storage-resource) + * + * @param uri - the URI of the container resource + * @param headers - headers returned when making a GET request to the resource + * @returns CheckRootContainerSuccess if there is not error + */ +export function checkHeadersForRootContainer( + resource: SolidContainer, + headers: Headers, +): CheckRootContainerSuccess { + const linkHeader = headers.get("link"); + if (!linkHeader) { + return new CheckRootContainerSuccess(resource, false); + } + const parsedLinkHeader = parseLinkHeader(linkHeader); + const types = parsedLinkHeader.get("rel", "type"); + const isRootContainer = types.some( + (type) => type.uri === "http://www.w3.org/ns/pim/space#Storage", + ); + return new CheckRootContainerSuccess(resource, isRootContainer); +} + +/** + * @internal + * + * Performs a request to the Pod to check if the given URI is a root container + * as defined in the [solid specification section 4.1](https://solidproject.org/TR/protocol#storage-resource) + * + * @param resource - the the container resource + * @param options - options variable to pass a fetch function + * @returns CheckResourceSuccess if there is no error + */ +export async function checkRootContainer( + resource: SolidContainer, + options?: BasicRequestOptions, +): Promise { + try { + const fetch = guaranteeFetch(options?.fetch); + // Fetch options to determine the document type + // Note cache: "no-store": we don't want to depend on cached results because + // web browsers do not cache link headers + // https://github.com/CommunitySolidServer/CommunitySolidServer/issues/1959 + const response = await fetch(resource.uri, { + method: "HEAD", + cache: "no-store", + }); + const httpErrorResult = HttpErrorResult.checkResponse(resource, response); + if (httpErrorResult) return httpErrorResult; + + return checkHeadersForRootContainer(resource, response.headers); + } catch (err) { + return UnexpectedResourceError.fromThrown(resource, err); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/createDataResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/createDataResource.ts new file mode 100644 index 0000000..8ce1748 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/createDataResource.ts @@ -0,0 +1,199 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { guaranteeFetch } from "../../util/guaranteeFetch.js"; +import type { AbsentReadSuccess, Resource } from "@ldo/connected"; +import { UnexpectedResourceError } from "@ldo/connected"; +import type { HttpErrorResultType } from "../results/error/HttpErrorResult.js"; +import { HttpErrorResult } from "../results/error/HttpErrorResult.js"; +import { CreateSuccess } from "../results/success/CreateSuccess.js"; +import type { DeleteResultError } from "./deleteResource.js"; +import { deleteResource } from "./deleteResource.js"; +import type { + ReadContainerResult, + ReadLeafResult, + ReadResultError, +} from "./readResource.js"; +import { readResource } from "./readResource.js"; +import type { DatasetRequestOptions } from "./requestOptions.js"; +import type { SolidLeaf } from "../../resources/SolidLeaf.js"; +import type { SolidContainer } from "../../resources/SolidContainer.js"; +import { + addResourceRdfToContainer, + getParentUri, + getSlug, +} from "../../util/rdfUtils.js"; + +/** + * All possible return values when creating and overwriting a container + */ +export type ContainerCreateAndOverwriteResult = + | CreateSuccess + | CreateAndOverwriteResultErrors; + +/** + * All possible return values when creating and overwriting a leaf + */ +export type LeafCreateAndOverwriteResult = + | CreateSuccess + | CreateAndOverwriteResultErrors; + +/** + * All possible return values when creating a container if absent + */ +export type ContainerCreateIfAbsentResult = + | CreateSuccess + | Exclude> + | CreateIfAbsentResultErrors; + +/** + * All possible return values when creating a leaf if absent + */ +export type LeafCreateIfAbsentResult = + | CreateSuccess + | Exclude> + | CreateIfAbsentResultErrors; + +/** + * All possible errors returned by creating and overwriting a resource + */ +export type CreateAndOverwriteResultErrors = + | DeleteResultError + | CreateErrors; + +/** + * All possible errors returned by creating a resource if absent + */ +export type CreateIfAbsentResultErrors = + | ReadResultError + | CreateErrors; + +/** + * All possible errors returned by creating a resource + */ +export type CreateErrors = + | HttpErrorResultType + | UnexpectedResourceError; + +/** + * @internal + * Creates a data resource (RDF resource) at the provided URI. This resource + * could also be a container. + * + * @param resource - The resource + * @param overwrite - If true, the request will overwrite any previous resource + * at this URI. + * @param options - Options to provide a fetch function and a local dataset to + * update. + * @returns One of many create results depending on the input + */ +export function createDataResource( + resource: SolidLeaf, + overwrite: true, + options?: DatasetRequestOptions, +): Promise; +export function createDataResource( + resouce: SolidLeaf, + overwrite: true, + options?: DatasetRequestOptions, +): Promise; +export function createDataResource( + resouce: SolidContainer, + overwrite?: false, + options?: DatasetRequestOptions, +): Promise; +export function createDataResource( + resouce: SolidLeaf, + overwrite?: false, + options?: DatasetRequestOptions, +): Promise; +export function createDataResource( + resouce: SolidContainer, + overwrite?: boolean, + options?: DatasetRequestOptions, +): Promise; +export function createDataResource( + resouce: SolidLeaf, + overwrite?: boolean, + options?: DatasetRequestOptions, +): Promise; +export function createDataResource( + resource: SolidContainer | SolidLeaf, + overwrite: true, + options?: DatasetRequestOptions, +): Promise; +export function createDataResource( + resource: SolidContainer | SolidLeaf, + overwrite?: false, + options?: DatasetRequestOptions, +): Promise; +export function createDataResource( + resource: SolidContainer | SolidLeaf, + overwrite?: boolean, + options?: DatasetRequestOptions, +): Promise< + | ContainerCreateAndOverwriteResult + | LeafCreateAndOverwriteResult + | ContainerCreateIfAbsentResult + | LeafCreateIfAbsentResult +>; +export async function createDataResource( + resource: SolidContainer | SolidLeaf, + overwrite?: boolean, + options?: DatasetRequestOptions, +): Promise< + | ContainerCreateAndOverwriteResult + | LeafCreateAndOverwriteResult + | ContainerCreateIfAbsentResult + | LeafCreateIfAbsentResult +> { + try { + const fetch = guaranteeFetch(options?.fetch); + let didOverwrite = false; + if (overwrite) { + const deleteResult = await deleteResource(resource, options); + // Return if it wasn't deleted + if (deleteResult.isError) + return deleteResult as + | DeleteResultError + | DeleteResultError; + didOverwrite = deleteResult.resourceExisted; + } else { + // Perform a read to check if it exists + const readResult = await readResource(resource, options); + + // If it does exist stop and return. + if (readResult.type !== "absentReadSuccess") { + return readResult; + } + } + // Create the document + const parentUri = getParentUri(resource.uri)!; + const headers: HeadersInit = { + "content-type": "text/turtle", + slug: getSlug(resource.uri), + }; + if (resource.type === "SolidContainer") { + headers.link = '; rel="type"'; + } + const response = await fetch(parentUri, { + method: "post", + headers, + }); + + const httpError = HttpErrorResult.checkResponse(resource, response); + if (httpError) + return httpError as + | HttpErrorResultType + | HttpErrorResultType; + + if (options?.dataset) { + addResourceRdfToContainer(resource.uri, options.dataset); + } + return new CreateSuccess(resource, didOverwrite) as + | CreateSuccess + | CreateSuccess; + } catch (err) { + return UnexpectedResourceError.fromThrown(resource, err) as + | UnexpectedResourceError + | UnexpectedResourceError; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/deleteResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/deleteResource.ts new file mode 100644 index 0000000..ff94716 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/deleteResource.ts @@ -0,0 +1,90 @@ +import { namedNode } from "@ldo/rdf-utils"; +import { guaranteeFetch } from "../../util/guaranteeFetch.js"; +import { deleteResourceRdfFromContainer } from "../../util/rdfUtils.js"; +import type { Resource } from "@ldo/connected"; +import { UnexpectedResourceError } from "@ldo/connected"; +import type { HttpErrorResultType } from "../results/error/HttpErrorResult.js"; +import { UnexpectedHttpError } from "../results/error/HttpErrorResult.js"; +import { HttpErrorResult } from "../results/error/HttpErrorResult.js"; +import { DeleteSuccess } from "../results/success/DeleteSuccess.js"; +import type { DatasetRequestOptions } from "./requestOptions.js"; +import type { IBulkEditableDataset } from "@ldo/subscribable-dataset"; +import type { Quad } from "@rdfjs/types"; +import type { SolidContainer } from "../../resources/SolidContainer.js"; +import type { SolidLeaf } from "../../resources/SolidLeaf.js"; + +/** + * All possible return values for deleteResource + */ +export type DeleteResult = + | DeleteSuccess + | DeleteResultError; + +/** + * All possible errors that can be returned by deleteResource + */ +export type DeleteResultError = + | HttpErrorResultType + | UnexpectedResourceError; + +/** + * @internal + * Deletes a resource on a Pod at a given URL. + * + * @param uri - The URI for the resource that should be deleted + * @param options - Options to provide a fetch function and a local dataset to + * update. + * @returns a DeleteResult + */ +export async function deleteResource( + resource: SolidContainer, + options?: DatasetRequestOptions, +): Promise>; +export async function deleteResource( + resource: SolidLeaf, + options?: DatasetRequestOptions, +): Promise>; +export async function deleteResource( + resource: SolidContainer | SolidLeaf, + options?: DatasetRequestOptions, +): Promise>; +export async function deleteResource( + resource: SolidContainer | SolidLeaf, + options?: DatasetRequestOptions, +): Promise> { + try { + const fetch = guaranteeFetch(options?.fetch); + const response = await fetch(resource.uri, { + method: "delete", + }); + const errorResult = HttpErrorResult.checkResponse(resource, response); + if (errorResult) return errorResult; + + // Specifically check for a 205. Annoyingly, the server will return 200 even + // if it hasn't been deleted when you're unauthenticated. 404 happens when + // the document never existed + if (response.status === 205 || response.status === 404) { + if (options?.dataset) + updateDatasetOnSuccessfulDelete(resource.uri, options.dataset); + return new DeleteSuccess(resource, response.status === 205); + } + return new UnexpectedHttpError(resource, response); + } catch (err) { + return UnexpectedResourceError.fromThrown(resource, err); + } +} + +/** + * Assuming a successful delete has just been performed, this function updates + * datastores to reflect that. + * + * @param uri - The uri of the resouce that was removed + * @param dataset - The dataset that should be updated + */ +export function updateDatasetOnSuccessfulDelete( + uri: string, + dataset: IBulkEditableDataset, +): void { + dataset.deleteMatches(undefined, undefined, undefined, namedNode(uri)); + deleteResourceRdfFromContainer(uri, dataset); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/readResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/readResource.ts new file mode 100644 index 0000000..8087d6b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/readResource.ts @@ -0,0 +1,156 @@ +import type { UnexpectedHttpError } from "../results/error/HttpErrorResult.js"; +import { + HttpErrorResult, + type HttpErrorResultType, +} from "../results/error/HttpErrorResult.js"; +import type { DatasetRequestOptions } from "./requestOptions.js"; +import { + BinaryReadSuccess, + DataReadSuccess, +} from "../results/success/SolidReadSuccess.js"; +import { ContainerReadSuccess } from "../results/success/SolidReadSuccess.js"; +import { NoncompliantPodError } from "../results/error/NoncompliantPodError.js"; +import { guaranteeFetch } from "../../util/guaranteeFetch.js"; +import type { Resource } from "@ldo/connected"; +import { UnexpectedResourceError, AbsentReadSuccess } from "@ldo/connected"; +import { checkHeadersForRootContainer } from "./checkRootContainer.js"; +import { namedNode } from "@ldo/rdf-utils"; +import type { SolidLeaf } from "../../resources/SolidLeaf.js"; +import type { SolidContainer } from "../../resources/SolidContainer.js"; +import { + addRawTurtleToDataset, + addResourceRdfToContainer, +} from "../../util/rdfUtils.js"; + +/** + * All possible return values for reading a leaf + */ +export type ReadLeafResult = + | BinaryReadSuccess + | DataReadSuccess + | AbsentReadSuccess + | ReadResultError; + +/** + * All possible return values for reading a container + */ +export type ReadContainerResult = + | ContainerReadSuccess + | AbsentReadSuccess + | ReadResultError; + +/** + * All possible errors the readResource function can return + */ +export type ReadResultError = + | HttpErrorResultType + | NoncompliantPodError + | UnexpectedHttpError + | UnexpectedResourceError; + +/** + * @internal + * Reads resource at a provided URI and returns the result + * + * @param uri - The URI of the resource + * @param options - Options to provide a fetch function and a local dataset to + * update. + * @returns ReadResult + */ +export async function readResource( + resource: SolidLeaf, + options?: DatasetRequestOptions, +): Promise; +export async function readResource( + resource: SolidContainer, + options?: DatasetRequestOptions, +): Promise; +export async function readResource( + resource: SolidLeaf | SolidContainer, + options?: DatasetRequestOptions, +): Promise; +export async function readResource( + resource: SolidLeaf | SolidContainer, + options?: DatasetRequestOptions, +): Promise { + try { + const fetch = guaranteeFetch(options?.fetch); + // Fetch options to determine the document type + const response = await fetch(resource.uri, { + headers: { accept: "text/turtle, */*" }, + }); + if (response.status === 404) { + // Clear existing data if present + if (options?.dataset) { + options.dataset.deleteMatches( + undefined, + undefined, + undefined, + namedNode(resource.uri), + ); + } + + return new AbsentReadSuccess(resource, false) as + | AbsentReadSuccess + | AbsentReadSuccess; + } + const httpErrorResult = HttpErrorResult.checkResponse(resource, response); + if (httpErrorResult) + return httpErrorResult as + | HttpErrorResultType + | HttpErrorResultType; + + // Add this resource to the container + if (options?.dataset) { + addResourceRdfToContainer(resource.uri, options.dataset); + } + + const contentType = response.headers.get("content-type"); + if (!contentType) { + return new NoncompliantPodError( + resource, + "Resource requests must return a content-type header.", + ) as + | NoncompliantPodError + | NoncompliantPodError; + } + + if (contentType.startsWith("text/turtle")) { + // Parse Turtle + const rawTurtle = await response.text(); + if (options?.dataset) { + const result = await addRawTurtleToDataset( + rawTurtle, + options.dataset, + resource.uri, + ); + if (result) + return new NoncompliantPodError(resource, result.message) as + | NoncompliantPodError + | NoncompliantPodError; + } + if (resource.type === "SolidContainer") { + const result = checkHeadersForRootContainer(resource, response.headers); + return new ContainerReadSuccess( + resource, + false, + result.isRootContainer, + ); + } + return new DataReadSuccess(resource as SolidLeaf, false); + } else { + // Load Blob + const blob = await response.blob(); + return new BinaryReadSuccess( + resource as SolidLeaf, + false, + blob, + contentType, + ); + } + } catch (err) { + return UnexpectedResourceError.fromThrown(resource, err) as + | UnexpectedResourceError + | UnexpectedResourceError; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/requestOptions.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/requestOptions.ts new file mode 100644 index 0000000..376c043 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/requestOptions.ts @@ -0,0 +1,22 @@ +import type { IBulkEditableDataset } from "@ldo/subscribable-dataset"; +import type { Quad } from "@rdfjs/types"; + +/** + * Request Options to be passed to request functions + */ +export interface BasicRequestOptions { + /** + * A fetch function usually imported from @inrupt/solid-client-authn-js + */ + fetch?: typeof fetch; +} + +/** + * Request options with a dataset component + */ +export interface DatasetRequestOptions extends BasicRequestOptions { + /** + * A dataset to be modified with any new information obtained from a request + */ + dataset?: IBulkEditableDataset; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/updateDataResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/updateDataResource.ts new file mode 100644 index 0000000..e353d0a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/updateDataResource.ts @@ -0,0 +1,86 @@ +import type { DatasetChanges } from "@ldo/rdf-utils"; +import { changesToSparqlUpdate } from "@ldo/rdf-utils"; +import type { Quad } from "@rdfjs/types"; +import { guaranteeFetch } from "../../util/guaranteeFetch.js"; +import type { Resource } from "@ldo/connected"; +import { UnexpectedResourceError, UpdateSuccess } from "@ldo/connected"; +import type { HttpErrorResultType } from "../results/error/HttpErrorResult.js"; +import { HttpErrorResult } from "../results/error/HttpErrorResult.js"; +import type { DatasetRequestOptions } from "./requestOptions.js"; +import type { SolidContainer } from "../../resources/SolidContainer.js"; +import type { SolidLeaf } from "../../resources/SolidLeaf.js"; + +/** + * All return values for updateDataResource + */ +export type UpdateResult = + | UpdateSuccess + | UpdateResultError; + +/** + * All errors updateDataResource can return + */ +export type UpdateResultError = + | HttpErrorResultType + | UnexpectedResourceError; + +/** + * @internal + * Updates a specific data resource with the provided dataset changes + * + * @param uri - the URI of the data resource + * @param datasetChanges - A set of triples added and removed from this dataset + * @param options - Options to provide a fetch function and a local dataset to + * update. + * @returns An UpdateResult + */ +export async function updateDataResource( + resource: SolidLeaf, + datasetChanges: DatasetChanges, + options?: DatasetRequestOptions, +): Promise>; +export async function updateDataResource( + resource: SolidContainer, + datasetChanges: DatasetChanges, + options?: DatasetRequestOptions, +): Promise>; +export async function updateDataResource( + resource: SolidLeaf | SolidContainer, + datasetChanges: DatasetChanges, + options?: DatasetRequestOptions, +): Promise>; +export async function updateDataResource( + resource: SolidLeaf | SolidContainer, + datasetChanges: DatasetChanges, + options?: DatasetRequestOptions, +): Promise> { + try { + // Optimistically add data + options?.dataset?.bulk(datasetChanges); + const fetch = guaranteeFetch(options?.fetch); + + // Make request + const sparqlUpdate = await changesToSparqlUpdate(datasetChanges); + const response = await fetch(resource.uri, { + method: "PATCH", + body: sparqlUpdate, + headers: { + "Content-Type": "application/sparql-update", + }, + }); + const httpError = HttpErrorResult.checkResponse(resource, response); + if (httpError) { + // Handle error rollback + if (options?.dataset) { + options.dataset.bulk({ + added: datasetChanges.removed, + removed: datasetChanges.added, + }); + } + return httpError; + } + return new UpdateSuccess(resource); + } catch (err) { + return UnexpectedResourceError.fromThrown(resource, err); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/uploadResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/uploadResource.ts new file mode 100644 index 0000000..4f59beb --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/requests/uploadResource.ts @@ -0,0 +1,89 @@ +import { guaranteeFetch } from "../../util/guaranteeFetch.js"; +import { UnexpectedResourceError } from "@ldo/connected"; +import { HttpErrorResult } from "../results/error/HttpErrorResult.js"; +import type { + LeafCreateAndOverwriteResult, + LeafCreateIfAbsentResult, +} from "./createDataResource.js"; +import { deleteResource } from "./deleteResource.js"; +import { readResource } from "./readResource.js"; +import type { DatasetRequestOptions } from "./requestOptions.js"; +import type { SolidLeaf } from "../../resources/SolidLeaf.js"; +import { CreateSuccess } from "../results/success/CreateSuccess.js"; +import { + addResourceRdfToContainer, + getParentUri, + getSlug, +} from "../../util/rdfUtils.js"; + +/** + * @internal + * Uploads a binary resource at the provided URI + * + * @param uri - The URI of the resource + * @param overwrite - If true, the request will overwrite any previous resource + * at this URI. + * @param options - Options to provide a fetch function and a local dataset to + * update. + * @returns One of many create results depending on the input + */ +export function uploadResource( + resource: SolidLeaf, + blob: Blob, + mimeType: string, + overwrite: true, + options?: DatasetRequestOptions, +): Promise; +export function uploadResource( + resource: SolidLeaf, + blob: Blob, + mimeType: string, + overwrite?: false, + options?: DatasetRequestOptions, +): Promise; +export async function uploadResource( + resource: SolidLeaf, + blob: Blob, + mimeType: string, + overwrite?: boolean, + options?: DatasetRequestOptions, +): Promise { + try { + const fetch = guaranteeFetch(options?.fetch); + let didOverwrite = false; + if (overwrite) { + const deleteResult = await deleteResource(resource, options); + // Return if it wasn't deleted + if (deleteResult.isError) return deleteResult; + didOverwrite = deleteResult.resourceExisted; + } else { + // Perform a read to check if it exists + const readResult = await readResource(resource, options); + // If it does exist stop and return. + if (readResult.type !== "absentReadSuccess") { + return readResult; + } + } + // Create the document + const parentUri = getParentUri(resource.uri)!; + const response = await fetch(parentUri, { + method: "post", + headers: { + "content-type": mimeType, + slug: getSlug(resource.uri), + }, + body: blob, + }); + + const httpError = HttpErrorResult.checkResponse(resource, response); + if (httpError) return httpError; + + if (options?.dataset) { + addResourceRdfToContainer(resource.uri, options.dataset); + } + return new CreateSuccess(resource, didOverwrite); + } catch (err) { + const thing = UnexpectedResourceError.fromThrown(resource, err); + return thing; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/AccessControlError.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/AccessControlError.ts new file mode 100644 index 0000000..964233e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/AccessControlError.ts @@ -0,0 +1,24 @@ +/* istanbul ignore file */ +import type { Resource } from "@ldo/connected"; +import { ResourceError } from "@ldo/connected"; + +/** + * An error: Could not fetch access rules + */ +export class AccessRuleFetchError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "accessRuleFetchError" as const; + + /** + * @param resource - The resource for which access rules couldn't be + * fetched + * @param message - A custom message for the error + */ + constructor(resource: ResourceType, message?: string) { + super( + resource, + message ?? `${resource.uri} had trouble fetching access rules.`, + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/HttpErrorResult.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/HttpErrorResult.ts new file mode 100644 index 0000000..fe9e6e8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/HttpErrorResult.ts @@ -0,0 +1,176 @@ +import type { Resource } from "@ldo/connected"; +import { ResourceError } from "@ldo/connected"; + +/** + * A set of standard errors that can be returned as a result of an HTTP request + */ +export type HttpErrorResultType = + | ServerHttpError + | UnexpectedHttpError + | UnauthenticatedHttpError + | UnauthorizedHttpError; + +/** + * An error caused by an HTTP request + */ +export abstract class HttpErrorResult< + ResourceType extends Resource, +> extends ResourceError { + /** + * The status of the HTTP request + */ + public readonly status: number; + + /** + * Headers returned by the HTTP request + */ + public readonly headers: Headers; + + /** + * Response returned by the HTTP request + */ + public readonly response: Response; + + /** + * @param resource - the resource + * @param response - The response returned by the HTTP requests + * @param message - A custom message for the error + */ + constructor(resource: ResourceType, response: Response, message?: string) { + super( + resource, + message || + `Request for ${resource.uri} returned ${response.status} (${response.statusText}).`, + ); + this.status = response.status; + this.headers = response.headers; + this.response = response; + } + + /** + * Checks to see if a given response does not constitute an HTTP Error + * @param response - The response of the request + * @returns true if the response does not constitute an HTTP Error + */ + static isnt(response: Response) { + return ( + !(response.status >= 200 && response.status < 300) && + response.status !== 404 && + response.status !== 304 + ); + } + + /** + * Checks a given response to see if it is a ServerHttpError, an + * UnauthenticatedHttpError or a some unexpected error. + * @param uri - The uri of the request + * @param response - The response of the request + * @returns An error if the response calls for it. Undefined if not. + */ + static checkResponse( + resource: ResourceType, + response: Response, + ): HttpErrorResultType | undefined { + if (ServerHttpError.is(response)) { + return new ServerHttpError(resource, response); + } + if (UnauthenticatedHttpError.is(response)) { + return new UnauthenticatedHttpError(resource, response); + } + if (UnauthorizedHttpError.is(response)) { + return new UnauthorizedHttpError(resource, response); + } + if (HttpErrorResult.isnt(response)) { + return new UnexpectedHttpError(resource, response); + } + return undefined; + } +} + +/** + * An unexpected error as a result of an HTTP request. This is usually returned + * when the HTTP request returns a status code LDO does not recognize. + */ +export class UnexpectedHttpError< + ResourceType extends Resource, +> extends HttpErrorResult { + readonly type = "unexpectedHttpError" as const; +} + +/** + * An UnauthenticatedHttpError triggers when a Solid server returns a 401 status + * indicating that the request is not authenticated. + */ +export class UnauthenticatedHttpError< + ResourceType extends Resource, +> extends HttpErrorResult { + readonly type = "unauthenticatedError" as const; + + /** + * Indicates if a specific response constitutes an UnauthenticatedHttpError + * @param response - The request response + * @returns true if this response constitutes an UnauthenticatedHttpError + */ + static is(response: Response) { + return response.status === 401; + } +} + +/** + * An UnauthenticatedHttpError triggers when a Solid server returns a 403 status + * indicating that the request is not authorized. + */ +export class UnauthorizedHttpError< + ResourceType extends Resource, +> extends HttpErrorResult { + readonly type = "unauthorizedError" as const; + + /** + * Indicates if a specific response constitutes an UnauthenticatedHttpError + * @param response - The request response + * @returns true if this response constitutes an UnauthenticatedHttpError + */ + static is(response: Response) { + return response.status === 403; + } +} + +/** + * An NotFoundHttpError triggers when a Solid server returns a 404 status. This + * error is not returned in most cases as a "absent" resource is not considered + * an error, but it is thrown while trying for find a WAC rule for a resource + * that does not exist. + */ +export class NotFoundHttpError< + ResourceType extends Resource, +> extends HttpErrorResult { + readonly type = "notFoundError" as const; + + /** + * Indicates if a specific response constitutes an NotFoundHttpError + * @param response - The request response + * @returns true if this response constitutes an NotFoundHttpError + */ + static is(response: Response) { + return response.status === 404; + } +} + +/** + * A ServerHttpError triggers when a Solid server returns a 5XX status, + * indicating that an error happened on the server. + */ +export class ServerHttpError< + ResourceType extends Resource, +> extends HttpErrorResult { + readonly type = "serverError" as const; + + /** + * Indicates if a specific response constitutes a ServerHttpError + * @param response - The request response + * @returns true if this response constitutes a ServerHttpError + */ + static is(response: Response) { + return response.status >= 500 && response.status < 600; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/NoRootContainerError.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/NoRootContainerError.ts new file mode 100644 index 0000000..59ba768 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/NoRootContainerError.ts @@ -0,0 +1,20 @@ +import type { Resource } from "@ldo/connected"; +import { ResourceError } from "@ldo/connected"; + +/** + * A NoncompliantPodError is returned when the server responded in a way that is + * not compliant with the Solid specification. + */ +export class NoRootContainerError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "noRootContainerError" as const; + + /** + * @param resource - the requested resource + * @param message - a custom message for the error + */ + constructor(resource: ResourceType) { + super(resource, `${resource.uri} has not root container.`); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/NoncompliantPodError.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/NoncompliantPodError.ts new file mode 100644 index 0000000..8d496ae --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/error/NoncompliantPodError.ts @@ -0,0 +1,23 @@ +import type { Resource } from "@ldo/connected"; +import { ResourceError } from "@ldo/connected"; + +/** + * A NoncompliantPodError is returned when the server responded in a way that is + * not compliant with the Solid specification. + */ +export class NoncompliantPodError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "noncompliantPodError" as const; + + /** + * @param resource - the requested resource + * @param message - a custom message for the error + */ + constructor(resource: ResourceType, message?: string) { + super( + resource, + `Response from ${resource.uri} is not compliant with the Solid Specification: ${message}`, + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/CheckRootContainerSuccess.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/CheckRootContainerSuccess.ts new file mode 100644 index 0000000..1ee71ce --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/CheckRootContainerSuccess.ts @@ -0,0 +1,38 @@ +import type { SolidContainer } from "../../../resources/SolidContainer.js"; +import { ResourceSuccess, SuccessResult } from "@ldo/connected"; + +/** + * Indicates that the request to check if a resource is the root container was + * a success. + */ +export class CheckRootContainerSuccess extends ResourceSuccess { + type = "checkRootContainerSuccess" as const; + /** + * True if this resoure is the root container + */ + isRootContainer: boolean; + + constructor(resource: SolidContainer, isRootContainer: boolean) { + super(resource); + this.isRootContainer = isRootContainer; + } +} + +/** + * Indicates that the storage container has been successfully retireved from the + * webId. Call `GetStorageContainerFromWebIdSuccess.storageContainers` for a + * list of storage containers retrieved. + */ +export class GetStorageContainerFromWebIdSuccess extends SuccessResult { + type = "getStorageContainerFromWebIdSuccess" as const; + + /** + * The storage containers retrieved + */ + storageContainers: SolidContainer[]; + + constructor(storageContainers: SolidContainer[]) { + super(); + this.storageContainers = storageContainers; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/CreateSuccess.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/CreateSuccess.ts new file mode 100644 index 0000000..4b1648f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/CreateSuccess.ts @@ -0,0 +1,21 @@ +import { ResourceSuccess } from "@ldo/connected"; +import type { Resource } from "@ldo/connected"; + +/** + * Indicates that the request to create the resource was a success. + */ +export class CreateSuccess< + ResourceType extends Resource, +> extends ResourceSuccess { + type = "createSuccess" as const; + /** + * True if there was a resource that existed before at the given URI that was + * overwritten + */ + didOverwrite: boolean; + + constructor(resource: ResourceType, didOverwrite: boolean) { + super(resource); + this.didOverwrite = didOverwrite; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/DeleteSuccess.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/DeleteSuccess.ts new file mode 100644 index 0000000..ac6182e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/DeleteSuccess.ts @@ -0,0 +1,22 @@ +import type { Resource } from "@ldo/connected"; +import { ResourceSuccess } from "@ldo/connected"; + +/** + * Indicates that the request to delete a resource was a success. + */ +export class DeleteSuccess< + ResourceType extends Resource, +> extends ResourceSuccess { + type = "deleteSuccess" as const; + + /** + * True if there was a resource at the provided URI that was deleted. False if + * a resource didn't exist. + */ + resourceExisted: boolean; + + constructor(resource: ResourceType, resourceExisted: boolean) { + super(resource); + this.resourceExisted = resourceExisted; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/SolidReadSuccess.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/SolidReadSuccess.ts new file mode 100644 index 0000000..acb22a5 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/results/success/SolidReadSuccess.ts @@ -0,0 +1,77 @@ +import type { ConnectedResult } from "@ldo/connected"; +import { ReadSuccess, type Resource } from "@ldo/connected"; +import type { SolidLeaf } from "../../../resources/SolidLeaf.js"; +import type { SolidContainer } from "../../../resources/SolidContainer.js"; + +/** + * Indicates that the read request was successful and that the resource + * retrieved was a binary resource. + */ +export class BinaryReadSuccess extends ReadSuccess { + type = "binaryReadSuccess" as const; + /** + * The raw data for the binary resource + */ + blob: Blob; + /** + * The mime type of the binary resource + */ + mimeType: string; + + constructor( + resource: SolidLeaf, + recalledFromMemory: boolean, + blob: Blob, + mimeType: string, + ) { + super(resource, recalledFromMemory); + this.blob = blob; + this.mimeType = mimeType; + } +} + +/** + * Indicates that the read request was successful and that the resource + * retrieved was a data (RDF) resource. + */ +export class DataReadSuccess extends ReadSuccess { + type = "dataReadSuccess" as const; +} + +/** + * Indicates that the read request was successful and that the resource + * retrieved was a container resource. + */ +export class ContainerReadSuccess extends ReadSuccess { + type = "containerReadSuccess" as const; + /** + * True if this container is a root container + */ + isRootContainer: boolean; + + constructor( + resource: SolidContainer, + recalledFromMemory: boolean, + isRootContainer: boolean, + ) { + super(resource, recalledFromMemory); + this.isRootContainer = isRootContainer; + } +} + +/** + * A helper function that checks to see if a result is a ReadSuccess result + * + * @param result - the result to check + * @returns true if the result is a ReadSuccessResult result + */ +export function isReadSuccess( + result: ConnectedResult, +): result is ReadSuccess { + return ( + result.type === "binaryReadSuccess" || + result.type === "dataReadSuccess" || + result.type === "absentReadSuccess" || + result.type === "containerReadSuccess" + ); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/util/modifyQueueFuntions.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/util/modifyQueueFuntions.ts new file mode 100644 index 0000000..3eb88db --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/requester/util/modifyQueueFuntions.ts @@ -0,0 +1,26 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { WaitingProcess } from "../../util/RequestBatcher.js"; + +/** + * @internal + * + * A helper function for a common way to modify the batch queue. This merges + * the incoming request with the currently executing request or the last request + * in the queue if its keys are the same. + * + * @param key - the key of the incoming request + * @returns a modifyQueue function + */ +export function modifyQueueByMergingEventsWithTheSameKeys(key: string) { + return ( + queue: WaitingProcess[], + currentlyLoading: WaitingProcess | undefined, + ) => { + if (queue.length === 0 && currentlyLoading?.name === key) { + return currentlyLoading; + } else if (queue[queue.length - 1]?.name === key) { + return queue[queue.length - 1]; + } + return undefined; + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/resources/SolidContainer.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/resources/SolidContainer.ts new file mode 100644 index 0000000..5999aea --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/resources/SolidContainer.ts @@ -0,0 +1,589 @@ +import { namedNode } from "@ldo/rdf-utils"; +import { ContainerBatchedRequester } from "../requester/ContainerBatchedRequester.js"; +import type { + CheckRootResult, + CheckRootResultError, +} from "../requester/requests/checkRootContainer.js"; +import type { + ContainerCreateAndOverwriteResult, + ContainerCreateIfAbsentResult, + LeafCreateAndOverwriteResult, + LeafCreateIfAbsentResult, +} from "../requester/requests/createDataResource.js"; +import type { + DeleteResult, + DeleteResultError, +} from "../requester/requests/deleteResource.js"; +import type { + ReadContainerResult, + ReadResultError, +} from "../requester/requests/readResource.js"; +import type { DeleteSuccess } from "../requester/results/success/DeleteSuccess.js"; +import type { ContainerReadSuccess } from "../requester/results/success/SolidReadSuccess.js"; +import { getParentUri, ldpContains } from "../util/rdfUtils.js"; +import { NoRootContainerError } from "../requester/results/error/NoRootContainerError.js"; +import type { SharedStatuses } from "./SolidResource.js"; +import { SolidResource } from "./SolidResource.js"; +import type { + SolidContainerSlug, + SolidContainerUri, + SolidLeafSlug, +} from "../types.js"; +import type { ReadSuccess } from "@ldo/connected"; +import { AggregateSuccess, IgnoredInvalidUpdateSuccess } from "@ldo/connected"; +import { + Unfetched, + type ConnectedContext, + AggregateError, +} from "@ldo/connected"; +import type { SolidConnectedPlugin } from "../SolidConnectedPlugin.js"; +import type { SolidLeaf } from "./SolidLeaf.js"; +import type { HttpErrorResultType } from "../requester/results/error/HttpErrorResult.js"; +import type { DatasetChanges } from "@ldo/rdf-utils"; + +/** + * Represents the current status of a specific container on a Pod as known by + * LDO. + * + * @example + * ```typescript + * const container = solidLdoDataset + * .getResource("https://example.com/container/"); + * ``` + */ +export class SolidContainer extends SolidResource { + /** + * The URI of the container + */ + readonly uri: SolidContainerUri; + + /** + * @internal + * Batched Requester for the Container + */ + protected requester: ContainerBatchedRequester; + + /** + * @internal + * True if this is the root container, false if not, undefined if unknown + */ + protected rootContainer: boolean | undefined; + + /** + * Indicates that this resource is a container resource + */ + readonly type = "SolidContainer" as const; + + /** + * Indicates that this resource is not an error + */ + readonly isError = false as const; + + /** + * The status of the last request made for this container + */ + status: + | SharedStatuses + | ReadContainerResult + | ContainerCreateAndOverwriteResult + | ContainerCreateIfAbsentResult + | CheckRootResult; + + /** + * @param uri - The uri of the container + * @param context - SolidLdoDatasetContext for the parent dataset + */ + constructor( + uri: SolidContainerUri, + context: ConnectedContext, + ) { + super(context); + this.uri = uri; + this.requester = new ContainerBatchedRequester(this, context); + this.status = new Unfetched(this); + } + + /** + * Checks if this container is a root container + * @returns true if this container is a root container, false if not, and + * undefined if this is unknown at the moment. + * + * @example + * ```typescript + * // Returns "undefined" when the container is unfetched + * console.log(container.isRootContainer()); + * const result = await container.read(); + * if (!result.isError) { + * // Returns true or false + * console.log(container.isRootContainer()); + * } + * ``` + */ + isRootContainer(): boolean | undefined { + return this.rootContainer; + } + + /** + * =========================================================================== + * READ METHODS + * =========================================================================== + */ + + /** + * @internal + * A helper method updates this container's internal state upon read success + * @param result - the result of the read success + */ + protected updateWithReadSuccess( + result: ReadSuccess | ContainerReadSuccess, + ): void { + super.updateWithReadSuccess(result); + if (result.type === "containerReadSuccess") { + this.rootContainer = (result as ContainerReadSuccess).isRootContainer; + } + } + + /** + * Reads the container + * @returns A read result + * + * @example + * ```typescript + * const result = await container.read(); + * if (result.isError) { + * // Do something + * } + * ``` + */ + async read(): Promise { + const result = (await this.handleRead()) as ReadContainerResult; + return { ...result, resource: this }; + } + + /** + * @internal + * Converts the current state of this container to a readResult + * @returns a ReadContainerResult + */ + protected toReadResult(): ReadContainerResult { + if (this.isAbsent()) { + return { + isError: false, + type: "absentReadSuccess", + uri: this.uri, + recalledFromMemory: true, + resource: this, + }; + } else { + return { + isError: false, + type: "containerReadSuccess", + uri: this.uri, + recalledFromMemory: true, + isRootContainer: this.isRootContainer()!, + resource: this, + }; + } + } + + /** + * Makes a request to read this container if it hasn't been fetched yet. If it + * has, return the cached informtation + * @returns a ReadContainerResult + * + * @example + * ```typescript + * const result = await container.read(); + * if (!result.isError) { + * // Will execute without making a request + * const result2 = await container.readIfUnfetched(); + * } + * ``` + */ + async readIfUnfetched(): Promise { + return super.readIfUnfetched() as Promise; + } + + /** + * =========================================================================== + * PARENT CONTAINER METHODS + * =========================================================================== + */ + + /** + * @internal + * Checks if this container is a root container by making a request + * @returns CheckRootResult + */ + private async checkIfIsRootContainer(): Promise { + const rootContainerResult = await this.requester.isRootContainer(); + this.status = rootContainerResult; + if (rootContainerResult.isError) return rootContainerResult; + this.rootContainer = rootContainerResult.isRootContainer; + this.emit("update"); + return { ...rootContainerResult, resource: this }; + } + + /** + * Gets the root container of this container. If this container is the root + * container, this function returns itself. + * @returns The root container for this container or undefined if there is no + * root container. + * + * @example + * Suppose the root container is at `https://example.com/` + * + * ```typescript + * const container = ldoSolidDataset + * .getResource("https://example.com/container/"); + * const rootContainer = await container.getRootContainer(); + * if (!rootContainer.isError) { + * // logs "https://example.com/" + * console.log(rootContainer.uri); + * } + * ``` + */ + async getRootContainer(): Promise< + SolidContainer | CheckRootResultError | NoRootContainerError + > { + const parentContainerResult = await this.getParentContainer(); + if (parentContainerResult?.isError) return parentContainerResult; + if (!parentContainerResult) { + return this.isRootContainer() ? this : new NoRootContainerError(this); + } + return parentContainerResult.getRootContainer(); + } + + /** + * Gets the parent container for this container by making a request + * @returns The parent container or undefined if there is no parent container + * because this container is the root container + * + * @example + * Suppose the root container is at `https://example.com/` + * + * ```typescript + * const root = solidLdoDataset.getResource("https://example.com/"); + * const container = solidLdoDataset + * .getResource("https://example.com/container"); + * const rootParent = await root.getParentContainer(); + * console.log(rootParent); // Logs "undefined" + * const containerParent = await container.getParentContainer(); + * if (!containerParent.isError) { + * // Logs "https://example.com/" + * console.log(containerParent.uri); + * } + * ``` + */ + async getParentContainer(): Promise< + SolidContainer | CheckRootResultError | undefined + > { + if (this.rootContainer === undefined) { + const checkResult = await this.checkIfIsRootContainer(); + if (checkResult.isError) return checkResult; + } + if (this.rootContainer) return undefined; + const parentUri = getParentUri(this.uri); + if (!parentUri) { + return undefined; + } + return this.context.dataset.getResource(parentUri); + } + + /** + * Lists the currently cached children of this container (no request is made) + * @returns An array of children + * + * ```typescript + * const result = await container.read(); + * if (!result.isError) { + * const children = container.children(); + * children.forEach((child) => { + * console.log(child.uri); + * }); + * } + * ``` + */ + children(): (SolidContainer | SolidLeaf)[] { + const childQuads = this.context.dataset.match( + namedNode(this.uri), + ldpContains, + null, + namedNode(this.uri), + ); + return childQuads.toArray().map((childQuad) => { + return this.context.dataset.getResource(childQuad.object.value) as + | SolidContainer + | SolidLeaf; + }); + } + + /** + * Returns a child resource with a given name (slug) + * @param slug - the given name for that child resource + * @returns the child resource (either a Leaf or Container depending on the + * name) + * + * @example + * ```typescript + * const root = solidLdoDataset.getResource("https://example.com/"); + * const container = solidLdoDataset.child("container/"); + * // Logs "https://example.com/container/" + * console.log(container.uri); + * const resource = container.child("resource.ttl"); + * // Logs "https://example.com/container/resource.ttl" + * console.log(resource.uri); + * ``` + */ + child(slug: SolidContainerSlug): SolidContainer; + child(slug: SolidLeafSlug): SolidLeaf; + child(slug: string): SolidLeaf | SolidContainer; + child(slug: string): SolidLeaf | SolidContainer { + return this.context.dataset.getResource(`${this.uri}${slug}`) as + | SolidLeaf + | SolidContainer; + } + + /** + * =========================================================================== + * CHILD CREATORS + * =========================================================================== + */ + + /** + * Creates a resource and overwrites any existing resource that existed at the + * URI + * + * @param slug - the name of the resource + * @return the result of creating that resource + * + * @example + * ```typescript + * const container = solidLdoDataset + * .getResource("https://example.com/container/"); + * cosnt result = await container.createChildAndOverwrite("resource.ttl"); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + createChildAndOverwrite( + slug: SolidContainerSlug, + ): Promise; + createChildAndOverwrite( + slug: SolidLeafSlug, + ): Promise; + createChildAndOverwrite( + slug: string, + ): Promise; + createChildAndOverwrite( + slug: string, + ): Promise { + return this.child(slug).createAndOverwrite(); + } + + /** + * Creates a resource only if that resource doesn't already exist on the Solid + * Pod + * + * @param slug - the name of the resource + * @return the result of creating that resource + * + * @example + * ```typescript + * const container = solidLdoDataset + * .getResource("https://example.com/container/"); + * cosnt result = await container.createChildIfAbsent("resource.ttl"); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + createChildIfAbsent( + slug: SolidContainerSlug, + ): Promise; + createChildIfAbsent(slug: SolidLeafSlug): Promise; + createChildIfAbsent( + slug: string, + ): Promise; + createChildIfAbsent( + slug: string, + ): Promise { + return this.child(slug).createIfAbsent(); + } + + /** + * Creates a new binary resource and overwrites any existing resource that + * existed at the URI + * + * @param slug - the name of the resource + * @return the result of creating that resource + * + * @example + * ```typescript + * const container = solidLdoDataset + * .getResource("https://example.com/container/"); + * cosnt result = await container.uploadChildAndOverwrite( + * "resource.txt", + * new Blob("some text."), + * "text/txt", + * ); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + async uploadChildAndOverwrite( + slug: SolidLeafSlug, + blob: Blob, + mimeType: string, + ): Promise { + return this.child(slug).uploadAndOverwrite(blob, mimeType); + } + + /** + * Creates a new binary resource and overwrites any existing resource that + * existed at the URI + * + * @param slug - the name of the resource + * @return the result of creating that resource + * + * @example + * ```typescript + * const container = solidLdoDataset + * .getResource("https://example.com/container/"); + * cosnt result = await container.uploadChildIfAbsent( + * "resource.txt", + * new Blob("some text."), + * "text/txt", + * ); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + async uploadChildIfAbsent( + slug: SolidLeafSlug, + blob: Blob, + mimeType: string, + ): Promise { + return this.child(slug).uploadIfAbsent(blob, mimeType); + } + + /** + * Deletes all contents in this container + * @returns An AggregateSuccess or Aggregate error corresponding with all the + * deleted resources + * + * @example + * ```typescript + * const result = container.clear(); + * if (!result.isError) { + * console.log("All deleted resources:"); + * result.results.forEach((result) => console.log(result.uri)); + * } + * ``` + */ + async clear(): Promise< + | AggregateSuccess> + | AggregateError< + | DeleteResultError + | ReadResultError + > + > { + const readResult = await this.read(); + if (readResult.isError) return new AggregateError([readResult]); + const results = ( + await Promise.all( + this.children().map(async (child) => { + return child.delete(); + }), + ) + ).flat(); + const errors = results.filter( + (value): value is HttpErrorResultType => value.isError, + ); + if (errors.length > 0) { + return new AggregateError(errors); + } + return new AggregateSuccess( + results as DeleteSuccess[], + ); + } + + /** + * Deletes this container and all its contents + * @returns A Delete result for this container + * + * ```typescript + * const result = await container.delete(); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + async delete(): Promise< + | DeleteResult + | AggregateError< + | DeleteResultError + | ReadResultError + > + > { + const clearResult = await this.clear(); + if (clearResult.isError) return clearResult; + const deleteResult = await this.handleDelete(); + if (deleteResult.isError) return deleteResult; + return { ...deleteResult, resource: this }; + } + + protected async handleDelete(): Promise> { + return super.handleDelete() as Promise>; + } + + /** + * Creates a container at this URI and overwrites any that already exists + * @returns ContainerCreateAndOverwriteResult + * + * @example + * ```typescript + * const result = await container.createAndOverwrite(); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + async createAndOverwrite(): Promise { + const createResult = + (await this.handleCreateAndOverwrite()) as ContainerCreateAndOverwriteResult; + if (createResult.isError) return createResult; + return { ...createResult, resource: this }; + } + + /** + * Creates a container at this URI if the container doesn't already exist + * @returns ContainerCreateIfAbsentResult + * + * @example + * ```typescript + * const result = await container.createIfAbsent(); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + async createIfAbsent(): Promise { + const createResult = + (await this.handleCreateIfAbsent()) as ContainerCreateIfAbsentResult; + if (createResult.isError) return createResult; + return { ...createResult, resource: this }; + } + + /** + * You cannot update a Container, so we return an IgnoredInvalidUpdateSuccess + */ + async update( + _datasetChanges: DatasetChanges, + ): Promise> { + return new IgnoredInvalidUpdateSuccess(this); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/resources/SolidLeaf.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/resources/SolidLeaf.ts new file mode 100644 index 0000000..433e424 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/resources/SolidLeaf.ts @@ -0,0 +1,558 @@ +import type { DatasetChanges } from "@ldo/rdf-utils"; +import type { Quad } from "@rdfjs/types"; +import { LeafBatchedRequester } from "../requester/LeafBatchedRequester.js"; +import type { CheckRootResultError } from "../requester/requests/checkRootContainer.js"; +import type { + LeafCreateAndOverwriteResult, + LeafCreateIfAbsentResult, +} from "../requester/requests/createDataResource.js"; +import type { DeleteResult } from "../requester/requests/deleteResource.js"; +import type { ReadLeafResult } from "../requester/requests/readResource.js"; +import type { UpdateResult } from "../requester/requests/updateDataResource.js"; +import type { DeleteSuccess } from "../requester/results/success/DeleteSuccess.js"; +import { DataReadSuccess } from "../requester/results/success/SolidReadSuccess.js"; +import { BinaryReadSuccess } from "../requester/results/success/SolidReadSuccess.js"; +import { getParentUri } from "../util/rdfUtils.js"; +import type { NoRootContainerError } from "../requester/results/error/NoRootContainerError.js"; +import type { SharedStatuses } from "./SolidResource.js"; +import { SolidResource } from "./SolidResource.js"; +import type { SolidLeafUri } from "../types.js"; +import type { ResourceSuccess } from "@ldo/connected"; +import { + AbsentReadSuccess, + Unfetched, + type ConnectedContext, +} from "@ldo/connected"; +import type { SolidConnectedPlugin } from "../SolidConnectedPlugin.js"; +import type { SolidContainer } from "./SolidContainer.js"; + +/** + * Represents the current status of a specific Leaf on a Pod as known by LDO. + * + * @example + * ```typescript + * const leaf = solidLdoDataset + * .getResource("https://example.com/container/resource.ttl"); + * ``` + */ +export class SolidLeaf extends SolidResource { + /** + * The URI of the leaf + */ + readonly uri: SolidLeafUri; + + /** + * @internal + * Batched Requester for the Leaf + */ + protected requester: LeafBatchedRequester; + + /** + * Indicates that this resource is a leaf resource + */ + readonly type = "SolidLeaf" as const; + + /** + * Indicates that this resource is not an error + */ + readonly isError = false as const; + + /** + * The status of the last request made for this leaf + */ + status: + | SharedStatuses + | ReadLeafResult + | LeafCreateAndOverwriteResult + | LeafCreateIfAbsentResult + | UpdateResult; + + /** + * @internal + * The raw binary data if this leaf is a Binary resource + */ + protected binaryData: { blob: Blob; mimeType: string } | undefined; + + /** + * @param uri - The uri of the leaf + * @param context - SolidLdoDatasetContext for the parent dataset + */ + constructor( + uri: SolidLeafUri, + context: ConnectedContext, + ) { + super(context); + const uriObject = new URL(uri); + uriObject.hash = ""; + this.uri = uriObject.toString() as SolidLeafUri; + this.requester = new LeafBatchedRequester(this, context); + this.status = new Unfetched(this); + } + + /** + * =========================================================================== + * GETTERS + * =========================================================================== + */ + + /** + * Checks to see if the resource is currently uploading data + * @returns true if the current resource is uploading + * + * @example + * ```typescript + * leaf.uploadAndOverwrite(new Blob("some text"), "text/txt").then(() => { + * // Logs "false" + * console.log(leaf.isUploading()) + * }); + * // Logs "true" + * console.log(leaf.isUploading()); + * ``` + */ + isUploading(): boolean { + return this.requester.isUploading(); + } + + /** + * Checks to see if the resource is currently updating data + * @returns true if the current resource is updating + * + * @example + * ```typescript + * leaf.update(datasetChanges).then(() => { + * // Logs "false" + * console.log(leaf.isUpdating()) + * }); + * // Logs "true" + * console.log(leaf.isUpdating()); + * ``` + */ + isUpdating(): boolean { + return this.requester.isUpdating(); + } + + /** + * If this resource is a binary resource, returns the mime type + * @returns The mime type if this resource is a binary resource, undefined + * otherwise + * + * @example + * ```typescript + * // Logs "text/txt" + * console.log(leaf.getMimeType()); + * ``` + */ + getMimeType(): string | undefined { + return this.binaryData?.mimeType; + } + + /** + * If this resource is a binary resource, returns the Blob + * @returns The Blob if this resource is a binary resource, undefined + * otherwise + * + * @example + * ```typescript + * // Logs "some text." + * console.log(leaf.getBlob()?.toString()); + * ``` + */ + getBlob(): Blob | undefined { + return this.binaryData?.blob; + } + + /** + * Check if this resource is a binary resource + * @returns True if this resource is a binary resource, false if not, + * undefined if unknown + * + * @example + * ```typescript + * // Logs "undefined" + * console.log(leaf.isBinary()); + * const result = await leaf.read(); + * if (!result.isError) { + * // Logs "true" + * console.log(leaf.isBinary()); + * } + * ``` + */ + isBinary(): boolean | undefined { + if (!this.didInitialFetch) { + return undefined; + } + return !!this.binaryData; + } + + /** + * Check if this resource is a data (RDF) resource + * @returns True if this resource is a data resource, false if not, undefined + * if unknown + * + * @example + * ```typescript + * // Logs "undefined" + * console.log(leaf.isDataResource()); + * const result = await leaf.read(); + * if (!result.isError) { + * // Logs "true" + * console.log(leaf.isDataResource()); + * } + * ``` + */ + isDataResource(): boolean | undefined { + if (!this.didInitialFetch) { + return undefined; + } + return !this.binaryData; + } + + /** + * =========================================================================== + * READ METHODS + * =========================================================================== + */ + + /** + * @internal + * A helper method updates this leaf's internal state upon read success + * @param result - the result of the read success + */ + protected updateWithReadSuccess( + result: BinaryReadSuccess | DataReadSuccess | AbsentReadSuccess, + ): void { + super.updateWithReadSuccess(result); + if (result.type === "binaryReadSuccess") { + this.binaryData = { blob: result.blob, mimeType: result.mimeType }; + } else { + this.binaryData = undefined; + } + } + + /** + * Reads the leaf by making a request + * @returns A read result + * + * @example + * ```typescript + * const result = await leaf.read(); + * if (result.isError) { + * // Do something + * } + * ``` + */ + async read(): Promise { + const result = (await this.handleRead()) as ReadLeafResult; + if (result.isError) return result; + return { ...result, resource: this }; + } + + /** + * @internal + * Converts the current state of this leaf to a readResult + * @returns a ReadLeafResult + */ + protected toReadResult(): ReadLeafResult { + if (this.isAbsent()) { + return new AbsentReadSuccess(this, true); + } else if (this.isBinary()) { + return new BinaryReadSuccess( + this, + true, + this.binaryData!.blob, + this.binaryData!.mimeType, + ); + } else { + return new DataReadSuccess(this, true); + } + } + + /** + * Makes a request to read this leaf if it hasn't been fetched yet. If it has, + * return the cached informtation + * @returns a ReadLeafResult + * + * @example + * ```typescript + * const result = await leaf.read(); + * if (!result.isError) { + * // Will execute without making a request + * const result2 = await leaf.readIfUnfetched(); + * } + * ``` + */ + async readIfUnfetched(): Promise { + return super.readIfUnfetched() as Promise; + } + + /** + * =========================================================================== + * PARENT CONTAINER METHODS + * =========================================================================== + */ + + /** + * Gets the parent container for this leaf by making a request + * @returns The parent container + * + * @example + * ```typescript + * const leaf = solidLdoDataset + * .getResource("https://example.com/container/resource.ttl"); + * const leafParent = await leaf.getParentContainer(); + * if (!leafParent.isError) { + * // Logs "https://example.com/container/" + * console.log(leafParent.uri); + * } + * ``` + */ + async getParentContainer(): Promise { + const parentUri = getParentUri(this.uri)!; + return this.context.dataset.getResource(parentUri); + } + + /** + * Gets the root container for this leaf. + * @returns The root container for this leaf + * + * @example + * Suppose the root container is at `https://example.com/` + * + * ```typescript + * const leaf = ldoSolidDataset + * .getResource("https://example.com/container/resource.ttl"); + * const rootContainer = await leaf.getRootContainer(); + * if (!rootContainer.isError) { + * // logs "https://example.com/" + * console.log(rootContainer.uri); + * } + * ``` + */ + async getRootContainer(): Promise< + SolidContainer | CheckRootResultError | NoRootContainerError + > { + // Check to see if this document has a pim:storage if so, use that + + // If not, traverse the tree + const parent = await this.getParentContainer(); + return parent.getRootContainer(); + } + + /** + * =========================================================================== + * DELETE METHODS + * =========================================================================== + */ + + /** + * @internal + * A helper method updates this leaf's internal state upon delete success + * @param result - the result of the delete success + */ + public updateWithDeleteSuccess(result: DeleteSuccess) { + super.updateWithDeleteSuccess(result); + this.binaryData = undefined; + } + + /** + * Deletes this leaf and all its contents + * @returns A Delete result for this leaf + * + * ```typescript + * const result = await container.leaf(); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + async delete(): Promise> { + return this.handleDelete(); + } + + /** + * @internal + */ + protected async handleDelete(): Promise> { + return super.handleDelete() as Promise>; + } + + /** + * =========================================================================== + * CREATE METHODS + * =========================================================================== + */ + + /** + * A helper method updates this leaf's internal state upon create success + * @param _result - the result of the create success + */ + protected updateWithCreateSuccess(_result: ResourceSuccess): void { + this.binaryData = undefined; + } + + /** + * Creates a leaf at this URI and overwrites any that already exists + * @returns LeafCreateAndOverwriteResult + * + * @example + * ```typescript + * const result = await leaf.createAndOverwrite(); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + async createAndOverwrite(): Promise { + const createResult = + (await this.handleCreateAndOverwrite()) as LeafCreateAndOverwriteResult; + if (createResult.isError) return createResult; + return { ...createResult, resource: this }; + } + + /** + * Creates a leaf at this URI if the leaf doesn't already exist + * @returns LeafCreateIfAbsentResult + * + * @example + * ```typescript + * const result = await leaf.createIfAbsent(); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + async createIfAbsent(): Promise { + const createResult = + (await this.handleCreateIfAbsent()) as LeafCreateIfAbsentResult; + if (createResult.isError) return createResult; + return { ...createResult, resource: this }; + } + + /** + * =========================================================================== + * UPLOAD METHODS + * =========================================================================== + */ + + /** + * Uploads a binary resource to this URI. If there is already a resource + * present at this URI, it will be overwritten + * + * @param blob - the Blob of the binary + * @param mimeType - the MimeType of the binary + * @returns A LeafCreateAndOverwriteResult + * + * @example + * ```typescript + * const result = await leaf.uploadAndOverwrite( + * new Blob("some text."), + * "text/txt", + * ); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + async uploadAndOverwrite( + blob: Blob, + mimeType: string, + ): Promise { + const result = await this.requester.upload(blob, mimeType, true); + this.status = result; + if (result.isError) { + this.emit("update"); + return result; + } + super.updateWithCreateSuccess(result); + this.binaryData = { blob, mimeType }; + this.emitThisAndParent(); + return { ...result, resource: this }; + } + + /** + * Uploads a binary resource to this URI tf there not is already a resource + * present at this URI. + * + * @param blob - the Blob of the binary + * @param mimeType - the MimeType of the binary + * @returns A LeafCreateIfAbsentResult + * + * @example + * ```typescript + * const result = await leaf.uploadIfAbsent( + * new Blob("some text."), + * "text/txt", + * ); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + async uploadIfAbsent( + blob: Blob, + mimeType: string, + ): Promise { + const result = await this.requester.upload(blob, mimeType); + this.status = result; + if (result.isError) { + this.emit("update"); + return result; + } + super.updateWithCreateSuccess(result); + this.binaryData = { blob, mimeType }; + this.emitThisAndParent(); + return { ...result, resource: this }; + } + + /** + * =========================================================================== + * UPDATE METHODS + * =========================================================================== + */ + + /** + * Updates a data resource with the changes provided + * @param changes - Dataset changes that will be applied to the resoruce + * @returns An UpdateResult + * + * @example + * ```typescript + * import { + * updateDataResource, + * transactionChanges, + * changeData, + * createSolidLdoDataset, + * } from "@ldo/solid"; + * + * //... + * + * // Get a Linked Data Object + * const profile = solidLdoDataset + * .usingType(ProfileShapeType) + * .fromSubject("https://example.com/profile#me"); + * cosnt resource = solidLdoDataset + * .getResource("https://example.com/profile"); + * // Create a transaction to change data + * const cProfile = changeData(profile, resource); + * cProfile.name = "John Doe"; + * // Get data in "DatasetChanges" form + * const datasetChanges = transactionChanges(someLinkedDataObject); + * // Use "update" to apply the changes + * cosnt result = resource.update(datasetChanges); + * ``` + */ + async update( + changes: DatasetChanges, + ): Promise> { + const result = await this.requester.updateDataResource(changes); + this.status = result; + if (result.isError) { + this.emit("update"); + return result; + } + this.binaryData = undefined; + this.absent = false; + this.emitThisAndParent(); + return { ...result, resource: this }; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/resources/SolidResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/resources/SolidResource.ts new file mode 100644 index 0000000..e283636 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/resources/SolidResource.ts @@ -0,0 +1,871 @@ +import type { + ConnectedContext, + ConnectedResult, + IgnoredInvalidUpdateSuccess, + ReadSuccess, + Resource, + ResourceEventEmitter, + ResourceSuccess, + SubscriptionCallbacks, + Unfetched, +} from "@ldo/connected"; +import type { SolidContainerUri, SolidLeafUri } from "../types.js"; +import EventEmitter from "events"; +import type { SolidConnectedPlugin } from "../SolidConnectedPlugin.js"; +import type { BatchedRequester } from "../requester/BatchedRequester.js"; +import type { WacRule } from "../wac/WacRule.js"; +import type { NotificationSubscription } from "@ldo/connected"; +import { Websocket2023NotificationSubscription } from "../notifications/Websocket2023NotificationSubscription.js"; +import { getParentUri } from "../util/rdfUtils.js"; +import { isReadSuccess } from "../requester/results/success/SolidReadSuccess.js"; +import type { + ReadContainerResult, + ReadLeafResult, +} from "../requester/requests/readResource.js"; +import { DeleteSuccess } from "../requester/results/success/DeleteSuccess.js"; +import { + updateDatasetOnSuccessfulDelete, + type DeleteResult, +} from "../requester/requests/deleteResource.js"; +import type { + ContainerCreateAndOverwriteResult, + ContainerCreateIfAbsentResult, + LeafCreateAndOverwriteResult, + LeafCreateIfAbsentResult, +} from "../requester/requests/createDataResource.js"; +import type { SolidContainer } from "./SolidContainer.js"; +import type { CheckRootResultError } from "../requester/requests/checkRootContainer.js"; +import type { NoRootContainerError } from "../requester/results/error/NoRootContainerError.js"; +import type { SolidLeaf } from "./SolidLeaf.js"; +import type { GetWacUriError } from "../wac/getWacUri.js"; +import { getWacUri, type GetWacUriResult } from "../wac/getWacUri.js"; +import type { GetWacRuleError } from "../wac/getWacRule.js"; +import { getWacRuleWithAclUri } from "../wac/getWacRule.js"; +import type { SetWacRuleResult } from "../wac/setWacRule.js"; +import { setWacRuleForAclUri } from "../wac/setWacRule.js"; +import { NoncompliantPodError } from "../requester/results/error/NoncompliantPodError.js"; +import type { SolidNotificationMessage } from "../notifications/SolidNotificationMessage.js"; +import type { CreateSuccess } from "../requester/results/success/CreateSuccess.js"; +import { GetWacUriSuccess } from "../wac/results/GetWacUriSuccess.js"; +import { GetWacRuleSuccess } from "../wac/results/GetWacRuleSuccess.js"; +import type { DatasetChanges } from "@ldo/rdf-utils"; +import type { UpdateResult } from "../requester/requests/updateDataResource.js"; + +/** + * Statuses shared between both Leaf and Container + */ +export type SharedStatuses = + | Unfetched + | DeleteResult + | CreateSuccess; + +export abstract class SolidResource + extends (EventEmitter as new () => ResourceEventEmitter) + implements Resource +{ + /** + * @internal + * The ConnectedContext from the Parent Dataset + */ + protected readonly context: ConnectedContext; + + /** + * The uri of the resource + */ + abstract readonly uri: SolidLeafUri | SolidContainerUri; + + /** + * The type of resource (leaf or container) + */ + abstract readonly type: "SolidLeaf" | "SolidContainer"; + + /** + * The status of the last request made for this resource + */ + abstract status: ConnectedResult; + + /** + * @internal + * Batched Requester for the Resource + */ + protected abstract readonly requester: BatchedRequester< + SolidLeaf | SolidContainer + >; + + /** + * @internal + * True if this resource has been fetched at least once + */ + protected didInitialFetch: boolean = false; + + /** + * @internal + * True if this resource has been fetched but does not exist + */ + protected absent: boolean | undefined; + + /** + * @internal + * If a wac uri is fetched, it is cached here + */ + protected wacUri?: SolidLeafUri; + + /** + * @internal + * If a wac rule was fetched, it is cached here + */ + protected wacRule?: WacRule; + + /** + * @internal + * Handles notification subscriptions + */ + protected notificationSubscription: NotificationSubscription< + SolidConnectedPlugin, + SolidNotificationMessage + >; + + /** + * Indicates that resources are not errors + */ + public readonly isError: false = false as const; + + /** + * @param context - SolidLdoDatasetContext for the parent dataset + */ + constructor(context: ConnectedContext) { + super(); + this.context = context; + this.notificationSubscription = new Websocket2023NotificationSubscription( + this as unknown as SolidLeaf | SolidContainer, + this.onNotification.bind(this), + this.context, + ); + } + + /** + * =========================================================================== + * GETTERS + * =========================================================================== + */ + + /** + * Checks to see if this resource is loading in any way + * @returns true if the resource is currently loading + * + * @example + * ```typescript + * resource.read().then(() => { + * // Logs "false" + * console.log(resource.isLoading()) + * }); + * // Logs "true" + * console.log(resource.isLoading()); + * ``` + */ + isLoading(): boolean { + return this.requester.isLoading(); + } + + /** + * Checks to see if this resource is being created + * @returns true if the resource is currently being created + * + * @example + * ```typescript + * resource.read().then(() => { + * // Logs "false" + * console.log(resource.isCreating()) + * }); + * // Logs "true" + * console.log(resource.isCreating()); + * ``` + */ + isCreating(): boolean { + return this.requester.isCreating(); + } + + /** + * Checks to see if this resource is being read + * @returns true if the resource is currently being read + * + * @example + * ```typescript + * resource.read().then(() => { + * // Logs "false" + * console.log(resource.isReading()) + * }); + * // Logs "true" + * console.log(resource.isReading()); + * ``` + */ + isReading(): boolean { + return this.requester.isReading(); + } + + /** + * Checks to see if this resource is being deleted + * @returns true if the resource is currently being deleted + * + * @example + * ```typescript + * resource.read().then(() => { + * // Logs "false" + * console.log(resource.isDeleting()) + * }); + * // Logs "true" + * console.log(resource.isDeleting()); + * ``` + */ + isDeleting(): boolean { + return this.requester.isDeletinng(); + } + + /** + * Checks to see if this resource is being read for the first time + * @returns true if the resource is currently being read for the first time + * + * @example + * ```typescript + * resource.read().then(() => { + * // Logs "false" + * console.log(resource.isDoingInitialFetch()) + * }); + * // Logs "true" + * console.log(resource.isDoingInitialFetch()); + * ``` + */ + isDoingInitialFetch(): boolean { + return this.isReading() && !this.isFetched(); + } + + /** + * Checks to see if this resource is being read for a subsequent time + * @returns true if the resource is currently being read for a subsequent time + * + * @example + * ```typescript + * await resource.read(); + * resource.read().then(() => { + * // Logs "false" + * console.log(resource.isCreating()) + * }); + * // Logs "true" + * console.log(resource.isCreating()); + * ``` + */ + isReloading(): boolean { + return this.isReading() && this.isFetched(); + } + + /** + * =========================================================================== + * CHECKERS + * =========================================================================== + */ + + /** + * Check to see if this resource has been fetched + * @returns true if this resource has been fetched before + * + * @example + * ```typescript + * // Logs "false" + * console.log(resource.isFetched()); + * const result = await resource.read(); + * if (!result.isError) { + * // Logs "true" + * console.log(resource.isFetched()); + * } + * ``` + */ + isFetched(): boolean { + return this.didInitialFetch; + } + + /** + * Check to see if this resource is currently unfetched + * @returns true if the resource is currently unfetched + * + * @example + * ```typescript + * // Logs "true" + * console.log(resource.isUnetched()); + * const result = await resource.read(); + * if (!result.isError) { + * // Logs "false" + * console.log(resource.isUnfetched()); + * } + * ``` + */ + isUnfetched(): boolean { + return !this.didInitialFetch; + } + + /** + * Is this resource currently absent (it does not exist) + * @returns true if the resource is absent, false if not, undefined if unknown + * + * @example + * ```typescript + * // Logs "undefined" + * console.log(resource.isAbsent()); + * const result = await resource.read(); + * if (!result.isError) { + * // False if the resource exists, true if it does not + * console.log(resource.isAbsent()); + * } + * ``` + */ + isAbsent(): boolean | undefined { + return this.absent; + } + + /** + * Is this resource currently present on the Pod + * @returns false if the resource is absent, true if not, undefined if unknown + * + * @example + * ```typescript + * // Logs "undefined" + * console.log(resource.isPresent()); + * const result = await resource.read(); + * if (!result.isError) { + * // True if the resource exists, false if it does not + * console.log(resource.isPresent()); + * } + * ``` + */ + isPresent(): boolean | undefined { + return this.absent === undefined ? undefined : !this.absent; + } + + /** + * Is this resource currently listening to notifications from this document + * @returns true if the resource is subscribed to notifications, false if not + * + * @example + * ```typescript + * await resource.subscribeToNotifications(); + * // Logs "true" + * console.log(resource.isSubscribedToNotifications()); + * ``` + */ + isSubscribedToNotifications(): boolean { + return this.notificationSubscription.isSubscribedToNotifications(); + } + + /** + * =========================================================================== + * HELPER METHODS + * =========================================================================== + */ + + /** + * @internal + * Emits an update event for both this resource and the parent + */ + protected emitThisAndParent() { + this.emit("update"); + const parentUri = getParentUri(this.uri); + if (parentUri) { + const parentContainer = this.context.dataset.getResource(parentUri); + parentContainer.emit("update"); + } + } + + /** + * =========================================================================== + * READ METHODS + * =========================================================================== + */ + + /** + * @internal + * A helper method updates this resource's internal state upon read success + * @param result - the result of the read success + */ + protected updateWithReadSuccess(result: ReadSuccess) { + this.absent = result.type === "absentReadSuccess"; + this.didInitialFetch = true; + } + + /** + * @internal + * A helper method that handles the core functions for reading + * @returns ReadResult + */ + protected async handleRead(): Promise { + const result = await this.requester.read(); + this.status = result; + if (result.isError) { + this.emit("update"); + return result; + } + this.updateWithReadSuccess(result); + this.emitThisAndParent(); + return result; + } + + /** + * @internal + * Converts the current state of this resource to a readResult + * @returns a ReadResult + */ + protected abstract toReadResult(): ReadLeafResult | ReadContainerResult; + + /** + * Reads the resource + */ + abstract read(): Promise; + + /** + * Reads the resource if it isn't fetched yet + * @returns a ReadResult + */ + async readIfUnfetched(): Promise { + if (this.didInitialFetch) { + const readResult = this.toReadResult(); + this.status = readResult; + return readResult; + } + return this.read(); + } + + /** + * =========================================================================== + * DELETE METHODS + * =========================================================================== + */ + + /** + * @internal + * A helper method updates this resource's internal state upon delete success + * @param result - the result of the delete success + */ + public updateWithDeleteSuccess(_result: DeleteSuccess) { + this.absent = true; + this.didInitialFetch = true; + } + + /** + * @internal + * Helper method that handles the core functions for deleting a resource + * @returns DeleteResult + */ + protected async handleDelete(): Promise< + DeleteResult + > { + const result = await this.requester.delete(); + this.status = result; + if (result.isError) { + this.emit("update"); + return result; + } + this.updateWithDeleteSuccess(result); + this.emitThisAndParent(); + return result; + } + + /** + * =========================================================================== + * CREATE METHODS + * =========================================================================== + */ + + /** + * A helper method updates this resource's internal state upon create success + * @param _result - the result of the create success + */ + protected updateWithCreateSuccess(result: ResourceSuccess) { + this.absent = false; + this.didInitialFetch = true; + if (isReadSuccess(result)) { + this.updateWithReadSuccess(result as ReadSuccess); + } + } + + /** + * Creates a resource at this URI and overwrites any that already exists + * @returns CreateAndOverwriteResult + * + * @example + * ```typescript + * const result = await resource.createAndOverwrite(); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + abstract createAndOverwrite(): Promise< + ContainerCreateAndOverwriteResult | LeafCreateAndOverwriteResult + >; + + /** + * @internal + * Helper method that handles the core functions for creating and overwriting + * a resource + * @returns DeleteResult + */ + protected async handleCreateAndOverwrite(): Promise< + ContainerCreateAndOverwriteResult | LeafCreateAndOverwriteResult + > { + const result = await this.requester.createDataResource(true); + this.status = result; + if (result.isError) { + this.emit("update"); + return result; + } + this.updateWithCreateSuccess(result); + this.emitThisAndParent(); + return result; + } + + /** + * Creates a resource at this URI if the resource doesn't already exist + * @returns CreateIfAbsentResult + * + * @example + * ```typescript + * const result = await leaf.createIfAbsent(); + * if (!result.isError) { + * // Do something + * } + * ``` + */ + abstract createIfAbsent(): Promise< + ContainerCreateIfAbsentResult | LeafCreateIfAbsentResult + >; + + /** + * @internal + * Helper method that handles the core functions for creating a resource if + * absent + * @returns DeleteResult + */ + protected async handleCreateIfAbsent(): Promise< + ContainerCreateIfAbsentResult | LeafCreateIfAbsentResult + > { + const result = await this.requester.createDataResource(); + this.status = result; + if (result.isError) { + this.emit("update"); + return result; + } + this.updateWithCreateSuccess(result); + this.emitThisAndParent(); + return result; + } + + /** + * UPDATE METHODS + */ + abstract update( + datasetChanges: DatasetChanges, + ): Promise< + UpdateResult | IgnoredInvalidUpdateSuccess + >; + + /** + * =========================================================================== + * PARENT CONTAINER METHODS + * =========================================================================== + */ + + /** + * Gets the root container for this resource. + * @returns The root container for this resource + * + * @example + * Suppose the root container is at `https://example.com/` + * + * ```typescript + * const resource = ldoSolidDataset + * .getResource("https://example.com/container/resource.ttl"); + * const rootContainer = await resource.getRootContainer(); + * if (!rootContainer.isError) { + * // logs "https://example.com/" + * console.log(rootContainer.uri); + * } + * ``` + */ + abstract getRootContainer(): Promise< + | SolidContainer + | CheckRootResultError + | NoRootContainerError + >; + + abstract getParentContainer(): Promise< + SolidContainer | CheckRootResultError | undefined + >; + + /** + * =========================================================================== + * WEB ACCESS CONTROL METHODS + * =========================================================================== + */ + + /** + * Retrieves the URI for the web access control (WAC) rules for this resource + * @param options - set the "ignoreCache" field to true to ignore any cached + * information on WAC rules. + * @returns WAC Rules results + */ + protected async getWacUri(options?: { + ignoreCache: boolean; + }): Promise> { + const thisAsLeafOrContainer = this as unknown as SolidLeaf | SolidContainer; + // Get the wacUri if not already present + if (!options?.ignoreCache && this.wacUri) { + return new GetWacUriSuccess(thisAsLeafOrContainer, this.wacUri); + } + + const wacUriResult = await getWacUri(thisAsLeafOrContainer, { + fetch: this.context.solid.fetch, + }); + if (wacUriResult.isError) { + return wacUriResult; + } + this.wacUri = wacUriResult.wacUri; + return wacUriResult; + } + + /** + * Retrieves web access control (WAC) rules for this resource + * @param options - set the "ignoreCache" field to true to ignore any cached + * information on WAC rules. + * @returns WAC Rules results + * + * @example + * ```typescript + * const resource = ldoSolidDataset + * .getResource("https://example.com/container/resource.ttl"); + * const wacRulesResult = await resource.getWac(); + * if (!wacRulesResult.isError) { + * const wacRules = wacRulesResult.wacRule; + * // True if the resource is publicly readable + * console.log(wacRules.public.read); + * // True if authenticated agents can write to the resource + * console.log(wacRules.authenticated.write); + * // True if the given WebId has append access + * console.log( + * wacRules.agent[https://example.com/person1/profile/card#me].append + * ); + * // True if the given WebId has control access + * console.log( + * wacRules.agent[https://example.com/person1/profile/card#me].control + * ); + * } + * ``` + */ + async getWac(options?: { + ignoreCache: boolean; + }): Promise< + | GetWacUriError + | GetWacRuleError + | GetWacRuleSuccess + > { + const thisAsLeafOrContainer = this as unknown as SolidLeaf | SolidContainer; + // Return the wac rule if it's already cached + if (!options?.ignoreCache && this.wacRule) { + return new GetWacRuleSuccess(thisAsLeafOrContainer, this.wacRule); + } + + // Get the wac uri + const wacUriResult = await this.getWacUri(options); + if (wacUriResult.isError) return wacUriResult; + + // Get the wac rule + const wacResult = await getWacRuleWithAclUri( + wacUriResult.wacUri, + thisAsLeafOrContainer, + { + fetch: this.context.solid.fetch, + }, + ); + if (wacResult.isError) return wacResult; + // If the wac rules was successfully found + if (wacResult.type === "getWacRuleSuccess") { + this.wacRule = wacResult.wacRule; + return wacResult; + } + + // If the WacRule is absent + const parentResource = await this.getParentContainer(); + if (parentResource?.isError) return parentResource; + if (!parentResource) { + return new NoncompliantPodError( + thisAsLeafOrContainer, + `Resource "${this.uri}" has no Effective ACL resource`, + ); + } + return parentResource.getWac(); + } + + /** + * Sets access rules for a specific resource + * @param wacRule - the access rules to set + * @returns SetWacRuleResult + * + * @example + * ```typescript + * const resource = ldoSolidDataset + * .getResource("https://example.com/container/resource.ttl"); + * const wacRulesResult = await resource.setWac({ + * public: { + * read: true, + * write: false, + * append: false, + * control: false + * }, + * authenticated: { + * read: true, + * write: false, + * append: true, + * control: false + * }, + * agent: { + * "https://example.com/person1/profile/card#me": { + * read: true, + * write: true, + * append: true, + * control: true + * } + * } + * }); + * ``` + */ + async setWac( + wacRule: WacRule, + ): Promise< + | GetWacUriError + | SetWacRuleResult + > { + const thisAsLeafOrContainer = this as unknown as SolidLeaf | SolidContainer; + const wacUriResult = await this.getWacUri(); + if (wacUriResult.isError) return wacUriResult; + + const result = await setWacRuleForAclUri( + wacUriResult.wacUri, + wacRule, + thisAsLeafOrContainer, + { + fetch: this.context.solid.fetch, + }, + ); + if (result.isError) { + this.emit("update"); + return result; + } + this.wacRule = result.wacRule; + return result; + } + + /** + * =========================================================================== + * SUBSCRIPTION METHODS + * =========================================================================== + */ + + /** + * Activates Websocket subscriptions on this resource. Updates, deletions, + * and creations on this resource will be tracked and all changes will be + * relected in LDO's resources and graph. + * + * @param onNotificationError - A callback function if there is an error + * with notifications. + * @returns SubscriptionId: A string to use to unsubscribe + * + * @example + * ```typescript + * const resource = solidLdoDataset + * .getResource("https://example.com/spiderman"); + * // A listener for if anything about spiderman in the global dataset is + * // changed. Note that this will also listen for any local changes as well + * // as changes to remote resources to which you have notification + * // subscriptions enabled. + * solidLdoDataset.addListener( + * [namedNode("https://example.com/spiderman#spiderman"), null, null, null], + * () => { + * // Triggers when the file changes on the Pod or locally + * console.log("Something changed about SpiderMan"); + * }, + * ); + * + * // Subscribe + * const subscriptionId = await testContainer.subscribeToNotifications({ + * // These are optional callbacks. A subscription will automatically keep + * // the dataset in sync. Use these callbacks for additional functionality. + * onNotification: (message) => console.log(message), + * onNotificationError: (err) => console.log(err.message) + * }); + * // ... From there you can wait for a file to be changed on the Pod. + */ + async subscribeToNotifications( + callbacks?: SubscriptionCallbacks, + ): Promise { + return await this.notificationSubscription.subscribeToNotifications( + callbacks, + ); + } + + /** + * @internal + * Function that triggers whenever a notification is recieved. + */ + protected async onNotification( + message: SolidNotificationMessage, + ): Promise { + const objectResource = this.context.dataset.getResource(message.object); + // Do Nothing if the resource is invalid. + if (objectResource.type === "InvalidIdentifierResource") return; + if (objectResource.type === "SolidLeaf") { + switch (message.type) { + case "Update": + case "Add": + await objectResource.read(); + return; + case "Delete": + case "Remove": + // Delete the resource without have to make an additional read request + updateDatasetOnSuccessfulDelete(message.object, this.context.dataset); + objectResource.updateWithDeleteSuccess( + new DeleteSuccess(objectResource, true), + ); + return; + } + } + } + + /** + * Unsubscribes from changes made to this resource on the Pod + * + * @returns UnsubscribeResult + * + * @example + * ```typescript + * const subscriptionId = await testContainer.subscribeToNotifications(); + * await testContainer.unsubscribeFromNotifications(subscriptionId); + * ``` + */ + async unsubscribeFromNotifications(subscriptionId: string): Promise { + return this.notificationSubscription.unsubscribeFromNotification( + subscriptionId, + ); + } + + /** + * Unsubscribes from all notifications on this resource + * + * @returns UnsubscribeResult[] + * + * @example + * ```typescript + * const subscriptionResult = await testContainer.subscribeToNotifications(); + * await testContainer.unsubscribeFromAllNotifications(); + * ``` + */ + async unsubscribeFromAllNotifications(): Promise { + return this.notificationSubscription.unsubscribeFromAllNotifications(); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/types.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/types.ts new file mode 100644 index 0000000..6ab4636 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/types.ts @@ -0,0 +1,131 @@ +export type SolidUriPrefix = `http${"s" | ""}://`; + +/** + * A SolidUri is a URI that is valid in the Solid ecosystem ("http" and "https") + */ +export type SolidUri = SolidContainerUri | SolidLeafUri; + +/** + * A SolidContainerSlug is any string that has a pahtname that ends in a "/". It + * represents a container. + */ +// The & {} allows for alias preservation +// eslint-disable-next-line @typescript-eslint/ban-types +export type SolidContainerSlug = `${string}/${NonPathnameEnding}` & {}; + +/** + * A SolidLeafUri is any URI that has a pahtname that ends in a "/". It represents a + * container. + */ +// The & {} allows for alias preservation +// eslint-disable-next-line @typescript-eslint/ban-types +export type SolidContainerUri = `${SolidUriPrefix}${SolidContainerSlug}` & {}; + +/** + * A SolidLeafSlug is any string that does not have a pahtname that ends in a + * "/". It represents a data resource or a binary resource. Not a container. + */ +export type SolidLeafSlug = + // The & {} allows for alias preservation + // eslint-disable-next-line @typescript-eslint/ban-types + `${string}${EveryLegalPathnameCharacterOtherThanSlash}${NonPathnameEnding}` & {}; + +/** + * A LeafUri is any URI that does not have a pahtname that ends in a "/". It + * represents a data resource or a binary resource. Not a container. + */ +export type SolidLeafUri = + // The & {} allows for alias preservation + // eslint-disable-next-line @typescript-eslint/ban-types + `${SolidUriPrefix}${SolidLeafSlug}` & {}; + +/** + * @internal + */ +type NonPathnameEnding = "" | `?${string}` | `#${string}`; + +/** + * @internal + */ +type EveryLegalPathnameCharacterOtherThanSlash = + | "A" + | "B" + | "C" + | "D" + | "E" + | "F" + | "G" + | "H" + | "I" + | "J" + | "K" + | "L" + | "M" + | "N" + | "O" + | "P" + | "Q" + | "R" + | "S" + | "T" + | "U" + | "V" + | "W" + | "X" + | "Y" + | "Z" + | "a" + | "b" + | "c" + | "d" + | "e" + | "f" + | "g" + | "h" + | "i" + | "j" + | "k" + | "l" + | "m" + | "n" + | "o" + | "p" + | "q" + | "r" + | "s" + | "t" + | "u" + | "v" + | "w" + | "x" + | "y" + | "z" + | "1" + | "2" + | "3" + | "4" + | "5" + | "6" + | "7" + | "8" + | "9" + | "0" + | "-" + | "." + | "_" + | "~" + | ":" + | "[" + | "]" + | "@" + | "!" + | "$" + | "&" + | "'" + | "(" + | ")" + | "*" + | "+" + | "," + | ";" + | "="; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/RequestBatcher.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/RequestBatcher.ts new file mode 100644 index 0000000..0c1b1c1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/RequestBatcher.ts @@ -0,0 +1,192 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +/** + * @internal + * A data structure that represents a possible process and how to handle it. + */ +export interface WaitingProcess { + name: string; + args: Args; + perform: (...args: Args) => Promise; + awaitingResolutions: ((returnValue: Return) => void)[]; + awaitingRejections: ((err: any) => void)[]; + after?: (result: Return) => void; +} + +export const ANY_KEY = "any"; + +/** + * Options for processes that are waiting to execute + */ +export interface WaitingProcessOptions { + /** + * The name of the process like "read" or "delete" + */ + name: string; + /** + * The arguements supplied to the process + */ + args: Args; + /** + * A function that will be triggered when it's time to execute this process + * @param args - arguments supplied to the process + * @returns a return type + */ + perform: (...args: Args) => Promise; + /** + * A custom function to modify the queue based on the current state of the + * queue + * @param processQueue - The current process queue + * @param currentlyProcessing - The Process that is currently executing + * @param args - provided args + * @returns A WaitingProcess that this request should listen to, or undefined + * if it should create its own + */ + modifyQueue: ( + processQueue: WaitingProcess[], + currentlyProcessing: WaitingProcess | undefined, + args: Args, + ) => WaitingProcess | undefined; + after?: (result: Return) => void; +} + +/** + * @internal + * A utility for batching a request + */ +export class RequestBatcher { + /** + * A mapping between a process key and the last time in UTC a process of that + * key was executed. + */ + private lastRequestTimestampMap: Record = {}; + + /** + * A pointer to the current process the batcher is working on + */ + private currentlyProcessing: WaitingProcess | undefined = + undefined; + + /** + * A queue of upcoming processes + */ + private processQueue: WaitingProcess[] = []; + + /** + * The amount of time (in milliseconds) between requests of the same key + */ + public batchMillis: number; + + /** + * @param options - options, including the value for batchMillis + */ + constructor( + options?: Partial<{ + batchMillis: number; + }>, + ) { + this.batchMillis = options?.batchMillis || 1000; + } + + /** + * Check if the request batcher is currently working on a process + * @param key - the key of the process to check + * @returns true if the batcher is currently working on the provided process + */ + public isLoading(key: string): boolean { + if (key === ANY_KEY) return !!this.currentlyProcessing; + return this.currentlyProcessing?.name === key; + } + + /** + * Triggers the next process in the queue or triggers a timeout to wait to + * execute the next process in the queue if not enough time has passed since + * the last process was triggered. + */ + private triggerOrWaitProcess() { + if (!this.processQueue[0] || this.currentlyProcessing) { + return; + } + this.currentlyProcessing = this.processQueue.shift(); + const processName = this.currentlyProcessing!.name; + + // Set last request timestamp if not available + if (!this.lastRequestTimestampMap[processName]) { + this.lastRequestTimestampMap[processName] = Date.UTC(0, 0, 0, 0, 0, 0, 0); + } + + const lastRequestTimestamp = this.lastRequestTimestampMap[processName]; + const timeSinceLastTrigger = Date.now() - lastRequestTimestamp; + + const triggerProcess = async () => { + this.lastRequestTimestampMap[processName] = Date.now(); + this.lastRequestTimestampMap[ANY_KEY] = Date.now(); + // Remove the process from the queue + const processToTrigger = this.currentlyProcessing; + if (processToTrigger) { + this.currentlyProcessing = processToTrigger; + try { + const returnValue = await processToTrigger.perform( + ...processToTrigger.args, + ); + if (processToTrigger.after) { + processToTrigger.after(returnValue); + } + processToTrigger.awaitingResolutions.forEach((callback) => { + callback(returnValue); + }); + } catch (err) { + processToTrigger.awaitingRejections.forEach((callback) => { + callback(err); + }); + } + this.currentlyProcessing = undefined; + + this.triggerOrWaitProcess(); + } + }; + + if (timeSinceLastTrigger < this.batchMillis) { + setTimeout(triggerProcess, this.batchMillis - timeSinceLastTrigger); + } else { + triggerProcess(); + } + } + + /** + * Adds a process to the queue and waits for the process to be complete + * @param options - WaitingProcessOptions + * @returns A promise that resolves when the process resolves + */ + public async queueProcess( + options: WaitingProcessOptions, + ): Promise { + return new Promise((resolve, reject) => { + const shouldAwait = options.modifyQueue( + this.processQueue, + this.currentlyProcessing, + options.args, + ); + + if (shouldAwait) { + shouldAwait.awaitingResolutions.push(resolve); + shouldAwait.awaitingRejections.push(reject); + return; + } + + const waitingProcess: WaitingProcess = { + name: options.name, + args: options.args, + perform: options.perform, + awaitingResolutions: [resolve], + awaitingRejections: [reject], + after: options.after, + }; + // HACK: Ugly cast + this.processQueue.push( + waitingProcess as unknown as WaitingProcess, + ); + this.triggerOrWaitProcess(); + }); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/guaranteeFetch.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/guaranteeFetch.ts new file mode 100644 index 0000000..987b7b4 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/guaranteeFetch.ts @@ -0,0 +1,12 @@ +import crossFetch from "cross-fetch"; + +/** + * @internal + * Guantees that some kind of fetch is available + * + * @param fetchInput - A potential fetch object + * @returns a proper fetch object. Cross-fetch is default + */ +export function guaranteeFetch(fetchInput?: typeof fetch): typeof fetch { + return fetchInput || crossFetch; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/isSolidUri.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/isSolidUri.ts new file mode 100644 index 0000000..f27b5fe --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/isSolidUri.ts @@ -0,0 +1,43 @@ +import type { SolidContainerUri, SolidLeafUri, SolidUri } from "../types.js"; + +/** + * Checks if a provided string is a leaf URI + * @param uri - the string to check + * @returns true if the string is a leaf URI + */ +export function isSolidUri(uri: string): uri is SolidUri { + try { + const url = new URL(uri); + return url.protocol === "https:" || url.protocol === "http:"; + } catch { + return false; + } +} + +/** + * Checks if a provided string is a Container URI + * @param uri - the string to check + * @returns true if the string is a container URI + */ +export function isSolidContainerUri(uri: string): uri is SolidContainerUri { + try { + const url = new URL(uri); + return url.pathname.endsWith("/"); + } catch { + return false; + } +} + +/** + * Checks if a provided string is a leaf URI + * @param uri - the string to check + * @returns true if the string is a leaf URI + */ +export function isSolidLeafUri(uri: string): uri is SolidLeafUri { + try { + const url = new URL(uri); + return !url.pathname.endsWith("/"); + } catch { + return false; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/rdfUtils.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/rdfUtils.ts new file mode 100644 index 0000000..8d0f107 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/util/rdfUtils.ts @@ -0,0 +1,153 @@ +import type { LdoDataset } from "@ldo/ldo"; +import { parseRdf } from "@ldo/ldo"; +import { namedNode, quad as createQuad } from "@ldo/rdf-utils"; +import type { Dataset } from "@rdfjs/types"; +import type { SolidContainerUri } from "../types.js"; +import { isSolidContainerUri } from "./isSolidUri.js"; + +export const ldpContains = namedNode("http://www.w3.org/ns/ldp#contains"); +export const rdfType = namedNode( + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", +); +export const ldpResource = namedNode("http://www.w3.org/ns/ldp#Resource"); +export const ldpContainer = namedNode("http://www.w3.org/ns/ldp#Container"); +export const ldpBasicContainer = namedNode( + "http://www.w3.org/ns/ldp#BasicContainer", +); + +/** + * @internal + * Gets the URI of a parent according the the Solid Spec + * + * @param uri - the child URI + * @returns A parent URI or undefined if not possible + */ +export function getParentUri(uri: string): SolidContainerUri | undefined { + const urlObject = new URL(uri); + const pathItems = urlObject.pathname.split("/"); + if ( + pathItems.length < 2 || + (pathItems.length === 2 && pathItems[1].length === 0) + ) { + return undefined; + } + if (pathItems[pathItems.length - 1] === "") { + pathItems.pop(); + } + pathItems.pop(); + urlObject.pathname = `${pathItems.join("/")}/`; + return urlObject.toString() as SolidContainerUri; +} + +/** + * @internal + * Gets the slug (last part of the path) for a given URI + * + * @param uri - the full URI + * @returns the slug of the URI + */ +export function getSlug(uri: string): string { + const urlObject = new URL(uri); + const pathItems = urlObject.pathname.split("/"); + return pathItems[pathItems.length - 1] || pathItems[pathItems.length - 2]; +} + +/** + * @internal + * Deletes mention of a resource from the provided dataset + * + * @param resourceUri - the resource to delete + * @param dataset - dataset to modify + */ +export function deleteResourceRdfFromContainer( + resourceUri: string, + dataset: Dataset, +) { + const parentUri = getParentUri(resourceUri); + if (parentUri) { + const parentNode = namedNode(parentUri); + const resourceNode = namedNode(resourceUri); + dataset.delete( + createQuad(parentNode, ldpContains, resourceNode, parentNode), + ); + dataset.deleteMatches(resourceNode, undefined, undefined, parentNode); + } +} + +/** + * @internal + * Adds a resource to a container in an RDF dataset + * + * @param resourceUri - the resource to add + * @param dataset - the dataset to modify + */ +export function addResourceRdfToContainer( + resourceUri: string, + dataset: Dataset, +) { + const parentUri = getParentUri(resourceUri); + if (parentUri) { + const parentNode = namedNode(parentUri); + const resourceNode = namedNode(resourceUri); + dataset.add(createQuad(parentNode, ldpContains, resourceNode, parentNode)); + dataset.add(createQuad(resourceNode, rdfType, ldpResource, parentNode)); + if (isSolidContainerUri(resourceUri)) { + dataset.add( + createQuad(resourceNode, rdfType, ldpBasicContainer, parentNode), + ); + dataset.add(createQuad(resourceNode, rdfType, ldpContainer, parentNode)); + } + addResourceRdfToContainer(parentUri, dataset); + } +} + +/** + * @internal + * Adds raw turtle to the provided dataset + * @param rawTurtle - String of raw turtle + * @param dataset - the dataset to modify + * @param baseUri - base URI to parsing turtle + * @returns Undefined if successful, noncompliantPodError if not + */ +export async function addRawTurtleToDataset( + rawTurtle: string, + dataset: Dataset, + baseUri: string, +): Promise { + const rawTurtleResult = await rawTurtleToDataset(rawTurtle, baseUri); + if (rawTurtleResult instanceof Error) return rawTurtleResult; + const loadedDataset = rawTurtleResult; + const graphNode = namedNode(baseUri); + // Destroy all triples that were once a part of this resouce + dataset.deleteMatches(undefined, undefined, undefined, graphNode); + // Add the triples from the fetched item + dataset.addAll( + loadedDataset.map((quad) => + createQuad(quad.subject, quad.predicate, quad.object, graphNode), + ), + ); +} + +/** + * @internal + * Creates a dataset from raw turtle string + * @param rawTurtle - the Raw turtle string + * @param baseUri - A base url for relative uris + * @returns LdoDataset or Error + */ +export async function rawTurtleToDataset( + rawTurtle: string, + baseUri: string, +): Promise { + try { + const loadedDataset = await parseRdf(rawTurtle, { + baseIRI: baseUri, + }); + return loadedDataset; + } catch (err) { + const message = err instanceof Error ? err.message : ""; + return new Error( + `Request returned noncompliant turtle: ${message}\n${rawTurtle}`, + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/WacRule.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/WacRule.ts new file mode 100644 index 0000000..150ed52 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/WacRule.ts @@ -0,0 +1,18 @@ +/** + * A list of modes that a certain agent has access to + */ +export interface AccessModeList { + read: boolean; + append: boolean; + write: boolean; + control: boolean; +} + +/** + * A list of modes for each kind of agent + */ +export interface WacRule { + public: AccessModeList; + authenticated: AccessModeList; + agent: Record; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/getWacRule.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/getWacRule.ts new file mode 100644 index 0000000..7cd5455 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/getWacRule.ts @@ -0,0 +1,131 @@ +import { GetWacRuleSuccess } from "./results/GetWacRuleSuccess.js"; +import { AuthorizationShapeType } from "../.ldo/wac.shapeTypes.js"; +import type { AccessModeList, WacRule } from "./WacRule.js"; +import type { Authorization } from "../.ldo/wac.typings.js"; +import { WacRuleAbsent } from "./results/WacRuleAbsent.js"; +import { + HttpErrorResult, + type HttpErrorResultType, +} from "../requester/results/error/HttpErrorResult.js"; +import { NoncompliantPodError } from "../requester/results/error/NoncompliantPodError.js"; +import type { UnexpectedResourceError } from "@ldo/connected"; +import type { SolidLeaf } from "../resources/SolidLeaf.js"; +import type { SolidContainer } from "../resources/SolidContainer.js"; +import { guaranteeFetch } from "../util/guaranteeFetch.js"; +import type { BasicRequestOptions } from "../requester/requests/requestOptions.js"; +import { rawTurtleToDataset } from "../util/rdfUtils.js"; + +export type GetWacRuleError = + | HttpErrorResultType + | NoncompliantPodError + | UnexpectedResourceError; + +export type GetWacRuleResult = + | GetWacRuleSuccess + | GetWacRuleError + | WacRuleAbsent; + +/** + * Given the URI of an ACL document, return the Web Access Control (WAC) rules + * @param aclUri: The URI for the ACL document + * @param options: Options object to include an authenticated fetch function + * @returns GetWacRuleResult + */ +export async function getWacRuleWithAclUri( + aclUri: string, + resource: SolidContainer, + options?: BasicRequestOptions, +): Promise>; +export async function getWacRuleWithAclUri( + aclUri: string, + resource: SolidLeaf, + options?: BasicRequestOptions, +): Promise>; +export async function getWacRuleWithAclUri( + aclUri: string, + resource: SolidLeaf | SolidContainer, + options?: BasicRequestOptions, +): Promise>; +export async function getWacRuleWithAclUri( + aclUri: string, + resource: SolidLeaf | SolidContainer, + options?: BasicRequestOptions, +): Promise> { + const fetch = guaranteeFetch(options?.fetch); + const response = await fetch(aclUri); + const errorResult = HttpErrorResult.checkResponse(resource, response); + if (errorResult) return errorResult; + + if (response.status === 404) { + return new WacRuleAbsent(resource); + } + + // Parse Turtle + const rawTurtle = await response.text(); + const rawTurtleResult = await rawTurtleToDataset(rawTurtle, aclUri); + if (rawTurtleResult instanceof Error) + return new NoncompliantPodError(resource, rawTurtleResult.message); + const dataset = rawTurtleResult; + const authorizations = dataset + .usingType(AuthorizationShapeType) + .matchSubject( + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + "http://www.w3.org/ns/auth/acl#Authorization", + ); + + const wacRule: WacRule = { + public: { + read: false, + write: false, + append: false, + control: false, + }, + authenticated: { + read: false, + write: false, + append: false, + control: false, + }, + agent: {}, + }; + + function applyAccessModesToList( + accessModeList: AccessModeList, + authorization: Authorization, + ): void { + authorization.mode?.forEach((mode) => { + accessModeList[mode["@id"].toLowerCase()] = true; + }); + } + + authorizations.forEach((authorization) => { + if ( + authorization.agentClass?.some( + (agentClass) => agentClass["@id"] === "Agent", + ) + ) { + applyAccessModesToList(wacRule.public, authorization); + applyAccessModesToList(wacRule.authenticated, authorization); + } + if ( + authorization.agentClass?.some( + (agentClass) => agentClass["@id"] === "AuthenticatedAgent", + ) + ) { + applyAccessModesToList(wacRule.authenticated, authorization); + } + authorization.agent?.forEach((agent) => { + if (!wacRule.agent[agent["@id"]]) { + wacRule.agent[agent["@id"]] = { + read: false, + write: false, + append: false, + control: false, + }; + } + applyAccessModesToList(wacRule.agent[agent["@id"]], authorization); + }); + }); + + return new GetWacRuleSuccess(resource, wacRule); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/getWacUri.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/getWacUri.ts new file mode 100644 index 0000000..4f08695 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/getWacUri.ts @@ -0,0 +1,73 @@ +import { + HttpErrorResult, + NotFoundHttpError, +} from "../requester/results/error/HttpErrorResult.js"; +import type { HttpErrorResultType } from "../requester/results/error/HttpErrorResult.js"; +import { GetWacUriSuccess } from "./results/GetWacUriSuccess.js"; +import * as httpLinkHeader from "http-link-header"; +import { UnexpectedResourceError } from "@ldo/connected"; +import { NoncompliantPodError } from "../requester/results/error/NoncompliantPodError.js"; +import type { SolidContainer } from "../resources/SolidContainer.js"; +import type { SolidLeaf } from "../resources/SolidLeaf.js"; +import type { BasicRequestOptions } from "../requester/requests/requestOptions.js"; +import { guaranteeFetch } from "../util/guaranteeFetch.js"; +import type { SolidLeafUri } from "../types.js"; + +const parseLinkHeader: (typeof httpLinkHeader)["default"]["parse"] = + httpLinkHeader.default.parse; + +export type GetWacUriError = + | HttpErrorResultType + | NotFoundHttpError + | NoncompliantPodError + | UnexpectedResourceError; +export type GetWacUriResult = + | GetWacUriSuccess + | GetWacUriError; + +/** + * Get the URI for the WAC rules of a specific resource + * @param resourceUri: the URI of the resource + * @param options: Options object to include an authenticated fetch function + * @returns GetWacUriResult + */ +export async function getWacUri( + resource: SolidLeaf | SolidContainer, + options?: BasicRequestOptions, +): Promise> { + try { + const fetch = guaranteeFetch(options?.fetch); + const response = await fetch(resource.uri, { + method: "head", + }); + const errorResult = HttpErrorResult.checkResponse(resource, response); + if (errorResult) return errorResult; + if (NotFoundHttpError.is(response)) { + return new NotFoundHttpError( + resource, + response, + "Could not get access control rules because the resource does not exist.", + ); + } + // Get the URI from the link header + const linkHeader = response.headers.get("link"); + if (!linkHeader) { + return new NoncompliantPodError( + resource, + "No link header present in request.", + ); + } + const parsedLinkHeader = parseLinkHeader(linkHeader); + const aclUris = parsedLinkHeader.get("rel", "acl"); + if (aclUris.length !== 1) { + return new NoncompliantPodError( + resource, + `There must be one link with a rel="acl"`, + ); + } + + return new GetWacUriSuccess(resource, aclUris[0].uri as SolidLeafUri); + } catch (err: unknown) { + return UnexpectedResourceError.fromThrown(resource, err); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/GetWacRuleSuccess.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/GetWacRuleSuccess.ts new file mode 100644 index 0000000..c2e508f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/GetWacRuleSuccess.ts @@ -0,0 +1,22 @@ +import { ResourceSuccess } from "@ldo/connected"; +import type { WacRule } from "../WacRule.js"; +import type { SolidLeaf } from "../../resources/SolidLeaf.js"; +import type { SolidContainer } from "../../resources/SolidContainer.js"; + +/** + * Returned when a WAC rule is successfully retrieved + */ +export class GetWacRuleSuccess< + ResourceType extends SolidLeaf | SolidContainer, +> extends ResourceSuccess { + type = "getWacRuleSuccess" as const; + /** + * The rule that was retrieved + */ + wacRule: WacRule; + + constructor(resoure: ResourceType, wacRule: WacRule) { + super(resoure); + this.wacRule = wacRule; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/GetWacUriSuccess.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/GetWacUriSuccess.ts new file mode 100644 index 0000000..f878cad --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/GetWacUriSuccess.ts @@ -0,0 +1,22 @@ +import { ResourceSuccess } from "@ldo/connected"; +import type { SolidLeafUri } from "../../types.js"; +import type { SolidContainer } from "../../resources/SolidContainer.js"; +import type { SolidLeaf } from "../../resources/SolidLeaf.js"; + +/** + * Returned when the URI for a resources ACL document was successfully retried + */ +export class GetWacUriSuccess< + ResourceType extends SolidContainer | SolidLeaf, +> extends ResourceSuccess { + type = "getWacUriSuccess" as const; + /** + * The URI of the ACL document + */ + wacUri: SolidLeafUri; + + constructor(resource: ResourceType, wacUri: SolidLeafUri) { + super(resource); + this.wacUri = wacUri; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/SetWacRuleSuccess.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/SetWacRuleSuccess.ts new file mode 100644 index 0000000..fc5a8d8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/SetWacRuleSuccess.ts @@ -0,0 +1,22 @@ +import { ResourceSuccess } from "@ldo/connected"; +import type { WacRule } from "../WacRule.js"; +import type { SolidContainer } from "../../resources/SolidContainer.js"; +import type { SolidLeaf } from "../../resources/SolidLeaf.js"; + +/** + * Returned when rules were successfully written + */ +export class SetWacRuleSuccess< + ResourceType extends SolidLeaf | SolidContainer, +> extends ResourceSuccess { + type = "setWacRuleSuccess" as const; + /** + * The written rule + */ + wacRule: WacRule; + + constructor(resource: ResourceType, wacRule: WacRule) { + super(resource); + this.wacRule = wacRule; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/WacRuleAbsent.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/WacRuleAbsent.ts new file mode 100644 index 0000000..439d762 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/results/WacRuleAbsent.ts @@ -0,0 +1,12 @@ +import { ResourceSuccess } from "@ldo/connected"; +import type { SolidLeaf } from "../../resources/SolidLeaf.js"; +import type { SolidContainer } from "../../resources/SolidContainer.js"; + +/** + * Returned if no WAC rule was returned from the server + */ +export class WacRuleAbsent< + ResourceType extends SolidLeaf | SolidContainer, +> extends ResourceSuccess { + type = "wacRuleAbsent" as const; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/setWacRule.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/setWacRule.ts new file mode 100644 index 0000000..58896e7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/src/wac/setWacRule.ts @@ -0,0 +1,128 @@ +import { createLdoDataset } from "@ldo/ldo"; +import type { AccessModeList, WacRule } from "./WacRule.js"; +import { SetWacRuleSuccess } from "./results/SetWacRuleSuccess.js"; +import type { Authorization } from "../.ldo/wac.typings.js"; +import { AuthorizationShapeType } from "../.ldo/wac.shapeTypes.js"; +import { v4 } from "uuid"; +import { guaranteeFetch } from "../util/guaranteeFetch.js"; +import type { SolidLeafUri } from "../types.js"; +import type { SolidLeaf } from "../resources/SolidLeaf.js"; +import type { SolidContainer } from "../resources/SolidContainer.js"; +import { + HttpErrorResult, + type HttpErrorResultType, +} from "../requester/results/error/HttpErrorResult.js"; +import type { UnexpectedResourceError } from "@ldo/connected"; +import type { BasicRequestOptions } from "../requester/requests/requestOptions.js"; +import { isSolidContainerUri } from "../util/isSolidUri.js"; + +export type SetWacRuleError = + | HttpErrorResultType + | UnexpectedResourceError; +export type SetWacRuleResult = + | SetWacRuleSuccess + | SetWacRuleError; + +/** + * Given the URI of an ACL document and some WAC rules, set the WAC rules of + * that document + * @param aclUri: The URI for the ACL document + * @param newRule: A new WAC rule to set. This will overwrite old rules + * @param accessTo: The document this rule refers to + * @param options: Options object to include an authenticated fetch function + * @returns SetWacRuleResult + */ +export async function setWacRuleForAclUri( + aclUri: SolidLeafUri, + newRule: WacRule, + resource: SolidContainer, + options?: BasicRequestOptions, +): Promise>; +export async function setWacRuleForAclUri( + aclUri: SolidLeafUri, + newRule: WacRule, + resource: SolidLeaf, + options?: BasicRequestOptions, +): Promise>; +export async function setWacRuleForAclUri( + aclUri: SolidLeafUri, + newRule: WacRule, + resource: SolidContainer | SolidLeaf, + options?: BasicRequestOptions, +): Promise>; +export async function setWacRuleForAclUri( + aclUri: SolidLeafUri, + newRule: WacRule, + resource: SolidContainer | SolidLeaf, + options?: BasicRequestOptions, +): Promise> { + const fetch = guaranteeFetch(options?.fetch); + // The rule map keeps track of all the rules that are currently being used + // so that similar rules can be grouped together + const ruleMap: Record = {}; + // The dataset that will eventually be sent to the Pod + const dataset = createLdoDataset(); + + // Helper function to add rules to the dataset by grouping them in the ruleMap + function addRuleToDataset( + type: "public" | "authenticated" | "agent", + accessModeList: AccessModeList, + agentId?: string, + ) { + const accessModeListHash = hashAccessModeList(accessModeList); + // No need to add if all access is false + if (accessModeListHash === "") return; + if (!ruleMap[accessModeListHash]) { + const authorization = dataset + .usingType(AuthorizationShapeType) + .fromSubject(`${aclUri}#${v4()}`); + authorization.type = { "@id": "Authorization" }; + if (accessModeList.read) authorization.mode?.add({ "@id": "Read" }); + if (accessModeList.write) authorization.mode?.add({ "@id": "Write" }); + if (accessModeList.append) authorization.mode?.add({ "@id": "Append" }); + if (accessModeList.control) authorization.mode?.add({ "@id": "Control" }); + authorization.accessTo = { "@id": resource.uri }; + if (isSolidContainerUri(resource.uri)) { + authorization.default = { "@id": resource.uri }; + } + ruleMap[accessModeListHash] = authorization; + } + const authorization = ruleMap[accessModeListHash]; + // Add agents to the rule + if (type === "public") { + authorization.agentClass?.add({ "@id": "Agent" }); + } else if (type === "authenticated") { + authorization.agentClass?.add({ "@id": "AuthenticatedAgent" }); + } else if (type === "agent" && agentId) { + authorization.agent?.add({ "@id": agentId }); + } + } + + // Add each rule to the dataset + addRuleToDataset("public", newRule.public); + addRuleToDataset("authenticated", newRule.authenticated); + Object.entries(newRule.agent).forEach(([agentUri, accessModeList]) => { + addRuleToDataset("agent", accessModeList, agentUri); + }); + + // Save to Pod + const response = await fetch(aclUri, { + method: "PUT", + headers: { + "content-type": "text/turtle", + }, + body: dataset.toString(), + }); + const errorResult = HttpErrorResult.checkResponse(resource, response); + if (errorResult) return errorResult; + + return new SetWacRuleSuccess(resource, newRule); +} + +// Hashes the access mode list for use in the rule map +function hashAccessModeList(list: AccessModeList): string { + return Object.entries(list).reduce( + (agg, [key, isPresent]) => (isPresent ? agg + key : agg), + "", + ); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.context.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.context.ts new file mode 100644 index 0000000..dafbe33 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.context.ts @@ -0,0 +1,31 @@ +import { ContextDefinition } from "jsonld"; + +/** + * ============================================================================= + * postContext: JSONLD Context for post + * ============================================================================= + */ +export const postContext: ContextDefinition = { + type: { + "@id": "@type", + }, + SocialMediaPosting: "http://schema.org/SocialMediaPosting", + CreativeWork: "http://schema.org/CreativeWork", + Thing: "http://schema.org/Thing", + articleBody: { + "@id": "http://schema.org/articleBody", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + uploadDate: { + "@id": "http://schema.org/uploadDate", + "@type": "http://www.w3.org/2001/XMLSchema#date", + }, + image: { + "@id": "http://schema.org/image", + "@type": "@id", + }, + publisher: { + "@id": "http://schema.org/publisher", + "@type": "@id", + }, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.schema.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.schema.ts new file mode 100644 index 0000000..39e8b63 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.schema.ts @@ -0,0 +1,155 @@ +import { Schema } from "shexj"; + +/** + * ============================================================================= + * postSchema: ShexJ Schema for post + * ============================================================================= + */ +export const postSchema: Schema = { + type: "Schema", + shapes: [ + { + id: "https://example.com/PostSh", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://schema.org/SocialMediaPosting", + "http://schema.org/CreativeWork", + "http://schema.org/Thing", + ], + }, + }, + { + type: "TripleConstraint", + predicate: "http://schema.org/articleBody", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + object: { + value: "articleBody", + }, + }, + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The actual body of the article. ", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://schema.org/uploadDate", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#date", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + object: { + value: "uploadDate", + }, + }, + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Date when this media object was uploaded to this site.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://schema.org/image", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + object: { + value: "image", + }, + }, + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A media object that encodes this CreativeWork. This property is a synonym for encoding.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://schema.org/publisher", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + object: { + value: "publisher", + }, + }, + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The publisher of the creative work.", + }, + }, + ], + }, + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + object: { + value: "SocialMediaPost", + }, + }, + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A post to a social media platform, including blog posts, tweets, Facebook posts, etc.", + }, + }, + ], + }, + }, + ], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.shapeTypes.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.shapeTypes.ts new file mode 100644 index 0000000..aa112e7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.shapeTypes.ts @@ -0,0 +1,19 @@ +import { ShapeType } from "@ldo/ldo"; +import { postSchema } from "./post.schema.js"; +import { postContext } from "./post.context.js"; +import { PostSh } from "./post.typings.js"; + +/** + * ============================================================================= + * LDO ShapeTypes post + * ============================================================================= + */ + +/** + * PostSh ShapeType + */ +export const PostShShapeType: ShapeType = { + schema: postSchema, + shape: "https://example.com/PostSh", + context: postContext, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.typings.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.typings.ts new file mode 100644 index 0000000..9ebaf71 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/.ldo/post.typings.ts @@ -0,0 +1,45 @@ +import { ContextDefinition } from "jsonld"; + +/** + * ============================================================================= + * Typescript Typings for post + * ============================================================================= + */ + +/** + * PostSh Type + */ +export interface PostSh { + "@id"?: string; + "@context"?: ContextDefinition; + type: + | { + "@id": "SocialMediaPosting"; + } + | { + "@id": "CreativeWork"; + } + | { + "@id": "Thing"; + }; + /** + * The actual body of the article. + */ + articleBody?: string; + /** + * Date when this media object was uploaded to this site. + */ + uploadDate: string; + /** + * A media object that encodes this CreativeWork. This property is a synonym for encoding. + */ + image?: { + "@id": string; + }; + /** + * The publisher of the creative work. + */ + publisher: { + "@id": string; + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/Integration.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/Integration.test.ts new file mode 100644 index 0000000..fefff99 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/Integration.test.ts @@ -0,0 +1,2277 @@ +import { + namedNode, + quad as createQuad, + literal, + defaultGraph, +} from "@ldo/rdf-utils"; +import type { CreateSuccess } from "../src/requester/results/success/CreateSuccess.js"; +import { Buffer } from "buffer"; +import { PostShShapeType } from "./.ldo/post.shapeTypes.js"; +import type { + ServerHttpError, + UnauthenticatedHttpError, + UnexpectedHttpError, +} from "../src/requester/results/error/HttpErrorResult.js"; +import type { NoncompliantPodError } from "../src/requester/results/error/NoncompliantPodError.js"; +import type { GetStorageContainerFromWebIdSuccess } from "../src/requester/results/success/CheckRootContainerSuccess.js"; +import { wait } from "./utils.helper.js"; +import path from "path"; +import type { + GetWacRuleSuccess, + UpdateResultError, + WacRule, +} from "../src/index.js"; +import { + createSolidLdoDataset, + type SolidConnectedPlugin, + type SolidContainer, + type SolidContainerUri, + type SolidLeaf, + type SolidLeafUri, +} from "../src/index.js"; +import type { + AggregateError, + AggregateSuccess, + IgnoredInvalidUpdateSuccess, + InvalidUriError, + UnexpectedResourceError, + UpdateDefaultGraphSuccess, + UpdateSuccess, + ConnectedLdoDataset, +} from "@ldo/connected"; +import { + changeData, + commitData, + ConnectedLdoTransactionDataset, +} from "@ldo/connected"; +import { getStorageFromWebId } from "../src/getStorageFromWebId.js"; +import type { ResourceInfo } from "@ldo/test-solid-server"; +import { createApp, setupServer } from "@ldo/test-solid-server"; +import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; + +const ROOT_CONTAINER = "http://localhost:3001/"; +const WEB_ID = "http://localhost:3001/example/profile/card#me"; +const TEST_CONTAINER_SLUG = "test_ldo/"; +const TEST_CONTAINER_URI = + `${ROOT_CONTAINER}${TEST_CONTAINER_SLUG}` as SolidContainerUri; +const SAMPLE_DATA_URI = `${TEST_CONTAINER_URI}sample.ttl` as SolidLeafUri; +const SAMPLE2_DATA_SLUG = "sample2.ttl"; +const SAMPLE2_DATA_URI = + `${TEST_CONTAINER_URI}${SAMPLE2_DATA_SLUG}` as SolidLeafUri; +const SAMPLE_BINARY_URI = `${TEST_CONTAINER_URI}sample.txt` as SolidLeafUri; +const SAMPLE2_BINARY_SLUG = `sample2.txt`; +const SAMPLE2_BINARY_URI = + `${TEST_CONTAINER_URI}${SAMPLE2_BINARY_SLUG}` as SolidLeafUri; +const SAMPLE_CONTAINER_URI = + `${TEST_CONTAINER_URI}sample_container/` as SolidContainerUri; +const SAMPLE_PROFILE_URI = `${TEST_CONTAINER_URI}profile.ttl` as SolidLeafUri; +const SPIDER_MAN_TTL = `@base . +@prefix rdf: . +@prefix rdfs: . +@prefix foaf: . +@prefix rel: . + +<#green-goblin> + rel:enemyOf <#spiderman> ; + a foaf:Person ; # in the context of the Marvel universe + foaf:name "Green Goblin" . + +<#spiderman> + rel:enemyOf <#green-goblin> ; + a foaf:Person ; + foaf:name "Spiderman", "Человек-паук"@ru .`; +const TEST_CONTAINER_TTL = `@prefix dc: . +@prefix ldp: . +@prefix posix: . +@prefix xsd: . + +<> "sample.txt"; + a ldp:Container, ldp:BasicContainer, ldp:Resource; + dc:modified "2023-10-20T13:57:14.000Z"^^xsd:dateTime. + a ldp:Resource, ; + dc:modified "2023-10-20T13:57:14.000Z"^^xsd:dateTime. + a ldp:Resource, ; + dc:modified "2023-10-20T13:57:14.000Z"^^xsd:dateTime. +<> posix:mtime 1697810234; + ldp:contains , . + posix:mtime 1697810234; + posix:size 522. + posix:mtime 1697810234; + posix:size 10.`; +const _TEST_CONTAINER_ACL_URI = `${TEST_CONTAINER_URI}.acl`; +const TEST_CONTAINER_ACL = `<#b30e3fd1-b5a8-4763-ad9d-e95de9cf7933> a ; + <${TEST_CONTAINER_URI}>; + <${TEST_CONTAINER_URI}>; + , , , ; + <${WEB_ID}>; + , .`; +const SAMPLE_PROFILE_TTL = ` +@prefix pim: . + +<${SAMPLE_PROFILE_URI}> pim:storage , . +`; + +const resourceInfo: ResourceInfo = { + slug: TEST_CONTAINER_SLUG, + isContainer: true, + contains: [ + { + slug: ".acl", + isContainer: false, + mimeType: "text/turtle", + data: TEST_CONTAINER_ACL, + }, + { + slug: "sample.ttl", + isContainer: false, + mimeType: "text/turtle", + data: SPIDER_MAN_TTL, + }, + { + slug: "sample.txt", + isContainer: false, + mimeType: "text/plain", + data: "some text.", + }, + { + slug: "profile.ttl", + isContainer: false, + mimeType: "text/turtle", + data: SAMPLE_PROFILE_TTL, + }, + { + slug: "sample_container/", + isContainer: true, + shouldNotInit: true, + contains: [], + }, + { + slug: SAMPLE2_DATA_SLUG, + isContainer: false, + shouldNotInit: true, + mimeType: "text/turtle", + data: "", + }, + { + slug: SAMPLE2_BINARY_SLUG, + isContainer: false, + shouldNotInit: true, + mimeType: "text/plain", + data: "", + }, + ], +}; + +async function testRequestLoads( + request: () => Promise, + loadingResource: SolidLeaf | SolidContainer, + loadingValues: Partial<{ + isLoading: boolean; + isCreating: boolean; + isReading: boolean; + isUploading: boolean; + isReloading: boolean; + isDeleting: boolean; + isUpdating: boolean; + isDoingInitialFetch: boolean; + }>, +): Promise { + const allLoadingValues = { + isLoading: false, + isCreating: false, + isReading: false, + isUploading: false, + isReloading: false, + isDeleting: false, + isUpdating: false, + isDoingInitialFetch: false, + ...loadingValues, + }; + const [returnVal] = await Promise.all([ + request(), + (async () => { + Object.entries(allLoadingValues).forEach(([key, value]) => { + if ( + loadingResource.type === "SolidContainer" && + (key === "isUploading" || key === "isUpdating") + ) { + return; + } + expect(loadingResource[key]()).toBe(value); + }); + })(), + ]); + return returnVal; +} + +describe("Integration", () => { + let solidLdoDataset: ConnectedLdoDataset; + + const s = setupServer(3001, resourceInfo); + + beforeEach(async () => { + solidLdoDataset = createSolidLdoDataset(); + solidLdoDataset.setContext("solid", { fetch: s.fetchMock }); + }); + + /** + * General + */ + describe("General", () => { + it("Does not include the hash when creating a resource", () => { + const resource = solidLdoDataset.getResource( + "https://example.com/thing#hash", + ); + expect(resource.uri).toBe("https://example.com/thing"); + }); + }); + + /** + * Read + */ + describe("read", () => { + it("Reads a data leaf", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.type).toBe("dataReadSuccess"); + expect( + solidLdoDataset.match( + namedNode("http://example.org/#spiderman"), + namedNode("http://www.perceive.net/schemas/relationship/enemyOf"), + namedNode("http://example.org/#green-goblin"), + ).size, + ).toBe(1); + expect(resource.isBinary()).toBe(false); + expect(resource.isDataResource()).toBe(true); + expect(resource.isPresent()).toBe(true); + }); + + // TODO: Possibly re-enable if Auto-read is required, but it might not be + // it("Auto reads a resource", async () => { + // const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI, { + // autoLoad: true, + // }); + // // Wait until the resource is auto-loaded + // await new Promise((resolve) => { + // const interval = setInterval(() => { + // if (!resource.isReading()) { + // clearInterval(interval); + // resolve(); + // } + // }, 250); + // }); + // expect( + // solidLdoDataset.match( + // namedNode("http://example.org/#spiderman"), + // namedNode("http://www.perceive.net/schemas/relationship/enemyOf"), + // namedNode("http://example.org/#green-goblin"), + // ).size, + // ).toBe(1); + // }); + + it("Reads a container", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.type).toBe("containerReadSuccess"); + expect(resource.children().length).toBe(3); + }); + + it("Reads a binary leaf", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.type).toBe("binaryReadSuccess"); + expect(resource.isBinary()).toBe(true); + expect(await resource.getBlob()?.text()).toBe("some text."); + }); + + it("Returns an absent result if the document doesn't exist", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.type).toBe("absentReadSuccess"); + if (result.type !== "absentReadSuccess") return; + expect(result.resource.isAbsent()).toBe(true); + }); + + it("Returns an ServerError when an 500 error is returned", async () => { + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + + it("Returns an Unauthorized error if a 403 error is returned", async () => { + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 403 })); + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.isError).toBe(true); + expect(result.type).toBe("unauthorizedError"); + }); + + it("Returns an UnauthenticatedError on an 401 error is returned", async () => { + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 401 })); + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.isError).toBe(true); + expect(result.type).toBe("unauthenticatedError"); + }); + + it("Returns an UnexpectedHttpError on a strange number error is returned", async () => { + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 399 })); + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.isError).toBe(true); + expect(result.type).toBe("unexpectedHttpError"); + }); + + it("Returns a NoncompliantPod error when no content type is returned", async () => { + s.fetchMock.mockResolvedValueOnce( + new Response(undefined, { status: 200, headers: {} }), + ); + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.isError).toBe(true); + if (!result.isError) return; + expect(result.type).toBe("noncompliantPodError"); + expect(result.message).toMatch( + /\Response from .* is not compliant with the Solid Specification: Resource requests must return a content-type header\./, + ); + }); + + it("Returns a NoncompliantPod error if invalid turtle is provided", async () => { + s.fetchMock.mockResolvedValueOnce( + new Response("Error", { + status: 200, + headers: new Headers({ "content-type": "text/turtle" }), + }), + ); + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.isError).toBe(true); + if (!result.isError) return; + expect(result.type).toBe("noncompliantPodError"); + expect(result.message).toMatch( + /\Response from .* is not compliant with the Solid Specification: Request returned noncompliant turtle: Unexpected "Error" on line 1\./, + ); + }); + + it("Parses Turtle even when the content type contains parameters", async () => { + s.fetchMock.mockResolvedValueOnce( + new Response(SPIDER_MAN_TTL, { + status: 200, + headers: new Headers({ "content-type": "text/turtle;charset=utf-8" }), + }), + ); + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.isError).toBe(false); + if (result.isError) return; + expect(result.type).toBe("dataReadSuccess"); + }); + + it("Returns an UnexpectedResourceError if an unknown error is triggered", async () => { + s.fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.isError).toBe(true); + if (!result.isError) return; + expect(result.type).toBe("unexpectedResourceError"); + expect(result.message).toBe("Something happened."); + }); + + it("Does not return an error if there is no link header for a container request", async () => { + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 200, + headers: new Headers({ "content-type": "text/turtle" }), + }), + ); + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads(() => resource.read(), resource, { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }); + expect(result.isError).toBe(false); + if (result.isError) return; + expect(result.resource.isRootContainer()).toBe(false); + }); + + it("knows nothing about a leaf resource if it is not fetched", () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + expect(resource.isBinary()).toBe(undefined); + expect(resource.isDataResource()).toBe(undefined); + expect(resource.isUnfetched()).toBe(true); + expect(resource.isPresent()).toBe(undefined); + }); + + it("batches the read request when a read request is currently happening", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const [result, result1] = await Promise.all([ + resource.read(), + resource.read(), + ]); + + expect(s.fetchMock).toHaveBeenCalledTimes(1); + expect(result.type).toBe("dataReadSuccess"); + expect(result1.type).toBe("dataReadSuccess"); + }); + + it("batches the read request when a read request is in queue", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const [, result, result1] = await Promise.all([ + resource.createAndOverwrite(), + resource.read(), + resource.read(), + ]); + + expect(s.fetchMock).toHaveBeenCalledTimes(3); + expect(result.type).toBe("dataReadSuccess"); + expect(result1.type).toBe("dataReadSuccess"); + }); + }); + + /** + * readIfUnfetched + */ + describe("readIfUnfetched", () => { + it("reads an unfetched container", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => resource.readIfUnfetched(), + resource, + { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }, + ); + expect(result.type).toBe("containerReadSuccess"); + expect(resource.children().length).toBe(3); + }); + + it("reads an unfetched leaf", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const result = await testRequestLoads( + () => resource.readIfUnfetched(), + resource, + { + isLoading: true, + isReading: true, + isDoingInitialFetch: true, + }, + ); + expect(result.type).toBe("dataReadSuccess"); + expect( + solidLdoDataset.match( + namedNode("http://example.org/#spiderman"), + namedNode("http://www.perceive.net/schemas/relationship/enemyOf"), + namedNode("http://example.org/#green-goblin"), + ).size, + ).toBe(1); + }); + + it("returns a cached existing container", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + await resource.read(); + s.fetchMock.mockClear(); + const result = await resource.readIfUnfetched(); + expect(s.fetchMock).not.toHaveBeenCalled(); + expect(result.type).toBe("containerReadSuccess"); + expect(resource.children().length).toBe(3); + }); + + it("returns a cached existing data leaf", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + await resource.read(); + s.fetchMock.mockClear(); + const result = await resource.readIfUnfetched(); + expect(result.type).toBe("dataReadSuccess"); + expect( + solidLdoDataset.match( + namedNode("http://example.org/#spiderman"), + namedNode("http://www.perceive.net/schemas/relationship/enemyOf"), + namedNode("http://example.org/#green-goblin"), + ).size, + ).toBe(1); + }); + + it("returns a cached existing binary leaf", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); + await resource.read(); + s.fetchMock.mockClear(); + const result = await resource.readIfUnfetched(); + expect(result.type).toBe("binaryReadSuccess"); + }); + + it("returns a cached absent container", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_CONTAINER_URI); + await resource.read(); + s.fetchMock.mockClear(); + const result = await resource.readIfUnfetched(); + expect(s.fetchMock).not.toHaveBeenCalled(); + expect(result.type).toBe("absentReadSuccess"); + }); + + it("returns a cached absent leaf", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + await resource.read(); + s.fetchMock.mockClear(); + const result = await resource.readIfUnfetched(); + expect(s.fetchMock).not.toHaveBeenCalled(); + expect(result.type).toBe("absentReadSuccess"); + }); + }); + + /** + * Get Root Container + */ + describe("rootContainer", () => { + it("Finds the root container", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_BINARY_URI); + const result = await resource.getRootContainer(); + expect(result.type).toBe("SolidContainer"); + if (result.type !== "SolidContainer") return; + expect(result.uri).toBe(ROOT_CONTAINER); + expect(result.isRootContainer()).toBe(true); + }); + + it("Returns an error if there is no root container", async () => { + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 200, + headers: new Headers({ "content-type": "text/turtle" }), + }), + ); + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 200, + headers: new Headers({ "content-type": "text/turtle" }), + }), + ); + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 200, + headers: new Headers({ "content-type": "text/turtle" }), + }), + ); + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await resource.getRootContainer(); + expect(result.isError).toBe(true); + if (!result.isError) return; + expect(result.type).toBe("noRootContainerError"); + expect(result.message).toMatch(/\.* has not root container\./); + }); + + it("An error to be returned if a common http error is encountered", async () => { + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 500, + }), + ); + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await resource.getRootContainer(); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + + it("Returns an UnexpectedResourceError if an unknown error is triggered", async () => { + s.fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await resource.getRootContainer(); + expect(result.isError).toBe(true); + if (!result.isError) return; + expect(result.type).toBe("unexpectedResourceError"); + expect(result.message).toBe("Something happened."); + }); + + it("returns a NonCompliantPodError when there is no root", async () => { + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 200, + headers: new Headers({ + "content-type": "text/turtle", + link: '; rel="type"', + }), + }), + ); + const resource = solidLdoDataset.getResource(ROOT_CONTAINER); + const result = await resource.getRootContainer(); + expect(result.isError).toBe(true); + expect(result.type).toBe("noRootContainerError"); + }); + }); + + /** + * Get Storage From WebId + */ + describe("getStorageFromWebId", () => { + it("Gets storage when a pim:storage field isn't present", async () => { + const result = await getStorageFromWebId( + SAMPLE_DATA_URI, + solidLdoDataset, + ); + expect(result.type).toBe("getStorageContainerFromWebIdSuccess"); + const realResult = result as GetStorageContainerFromWebIdSuccess; + expect(realResult.storageContainers.length).toBe(1); + expect(realResult.storageContainers[0].uri).toBe(ROOT_CONTAINER); + }); + + it("Gets storage when a pim:storage field is present", async () => { + const result = await getStorageFromWebId( + SAMPLE_PROFILE_URI, + solidLdoDataset, + ); + expect(result.type).toBe("getStorageContainerFromWebIdSuccess"); + const realResult = result as GetStorageContainerFromWebIdSuccess; + expect(realResult.storageContainers.length).toBe(2); + expect(realResult.storageContainers[0].uri).toBe( + "https://example.com/A/", + ); + expect(realResult.storageContainers[1].uri).toBe( + "https://example.com/B/", + ); + }); + + it("Passes any errors returned from the read method", async () => { + s.fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + const result = await getStorageFromWebId( + SAMPLE_DATA_URI, + solidLdoDataset, + ); + expect(result.isError).toBe(true); + }); + + it("Passes any errors returned from the getRootContainer method", async () => { + s.fetchMock.mockResolvedValueOnce(new Response("")); + s.fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + const result = await getStorageFromWebId( + SAMPLE_DATA_URI, + solidLdoDataset, + ); + expect(result.isError).toBe(true); + }); + }); + + /** + * =========================================================================== + * Create + * =========================================================================== + */ + describe("createAndOverwrite", () => { + it("creates a document that doesn't exist", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => resource.createAndOverwrite(), + resource, + { + isLoading: true, + isCreating: true, + }, + ); + + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.didOverwrite).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE2_DATA_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + container.children().some((child) => child.uri === SAMPLE2_DATA_URI), + ).toBe(true); + }); + + it("creates a data resource that doesn't exist while overwriting", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => resource.createAndOverwrite(), + resource, + { + isLoading: true, + isCreating: true, + }, + ); + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.didOverwrite).toBe(true); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE_DATA_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + container.children().some((child) => child.uri === SAMPLE_DATA_URI), + ).toBe(true); + }); + + it("creates a container", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_CONTAINER_URI); + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => resource.createAndOverwrite(), + resource, + { + isLoading: true, + isCreating: true, + }, + ); + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.didOverwrite).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE_CONTAINER_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + container + .children() + .some((child) => child.uri === SAMPLE_CONTAINER_URI), + ).toBe(true); + }); + + it("returns and error if creating a container", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 500, + }), + ); + const result = await resource.createAndOverwrite(); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + + it("returns a delete error if delete failed", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 500, + }), + ); + const result = await resource.createAndOverwrite(); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + + it("returns an error if the create fetch fails", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockImplementationOnce(async (...args) => { + return s.authFetch(...args); + }); + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 500, + }), + ); + const result = await resource.createAndOverwrite(); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + + it("returns an unexpected error if some unknown error is triggered", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockImplementationOnce(async (...args) => { + return s.authFetch(...args); + }); + s.fetchMock.mockImplementationOnce(async () => { + throw new Error("Some Unknown"); + }); + const result = await resource.createAndOverwrite(); + expect(result.isError).toBe(true); + expect(result.type).toBe("unexpectedResourceError"); + }); + + it("batches the create request while waiting on another request", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const [, result1, result2] = await Promise.all([ + resource.read(), + resource.createAndOverwrite(), + resource.createAndOverwrite(), + ]); + + expect(result1.type).toBe("createSuccess"); + expect(result2.type).toBe("createSuccess"); + // 1 for read, 1 for delete in createAndOverwrite, 1 for create + expect(s.fetchMock).toHaveBeenCalledTimes(3); + }); + + it("batches the create request while waiting on a similar request", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const [result1, result2] = await Promise.all([ + resource.createAndOverwrite(), + resource.createAndOverwrite(), + ]); + + expect(result1.type).toBe("createSuccess"); + expect(result2.type).toBe("createSuccess"); + // 1 for delete in createAndOverwrite, 1 for create + expect(s.fetchMock).toHaveBeenCalledTimes(2); + }); + }); + + describe("createIfAbsent", () => { + it("creates a data resource that doesn't exist", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => resource.createIfAbsent(), + resource, + { + isLoading: true, + isCreating: true, + }, + ); + + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.didOverwrite).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE2_DATA_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + container.children().some((child) => child.uri === SAMPLE2_DATA_URI), + ).toBe(true); + }); + + it("doesn't overwrite a resources that does exist", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => resource.createIfAbsent(), + resource, + { + isLoading: true, + isCreating: true, + }, + ); + + expect(result.type).toBe("dataReadSuccess"); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE_DATA_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + container.children().some((child) => child.uri === SAMPLE_DATA_URI), + ).toBe(true); + }); + + it("creates a container that doesn't exist", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_CONTAINER_URI); + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => resource.createIfAbsent(), + resource, + { + isLoading: true, + isCreating: true, + }, + ); + + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.didOverwrite).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE_CONTAINER_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + container + .children() + .some((child) => child.uri === SAMPLE_CONTAINER_URI), + ).toBe(true); + }); + + it("returns an error if creating a container", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_CONTAINER_URI); + s.fetchMock.mockResolvedValueOnce( + new Response(SAMPLE_CONTAINER_URI, { + status: 500, + }), + ); + const result = await resource.createIfAbsent(); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + + it("returns an error if creating a leaf", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + s.fetchMock.mockResolvedValueOnce( + new Response(SAMPLE2_DATA_URI, { + status: 500, + }), + ); + const result = await resource.createIfAbsent(); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + }); + + /** + * Delete + */ + describe("deleteResource", () => { + it("returns an unexpected http error if an unexpected value is returned", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 214, + }), + ); + const result = await resource.delete(); + expect(result.isError).toBe(true); + expect(result.type).toBe("unexpectedHttpError"); + }); + + it("returns an unexpected resource error if an unknown error is triggered", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockImplementationOnce(async () => { + throw new Error("Some unknwon"); + }); + const result = await resource.delete(); + expect(result.isError).toBe(true); + expect(result.type).toBe("unexpectedResourceError"); + }); + + it("deletes a container", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await resource.delete(); + expect(result.type === "deleteSuccess"); + }); + + it("returns an error on container read when deleting a container", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + s.fetchMock.mockImplementation(async (input, init) => { + if ( + (init?.method === "get" || !init?.method) && + input === TEST_CONTAINER_URI + ) { + return new Response(SAMPLE_DATA_URI, { + status: 500, + }); + } + return s.authFetch(input, init); + }); + const result = await resource.delete(); + expect(result.isError).toBe(true); + expect(result.type).toBe("aggregateError"); + const aggregateError = result as AggregateError< + | ServerHttpError + | UnexpectedHttpError + | UnauthenticatedHttpError + | UnexpectedResourceError + | NoncompliantPodError + >; + expect(aggregateError.errors[0].type).toBe("serverError"); + }); + + it("returns an error on child delete when deleting a container", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + s.fetchMock.mockImplementation(async (input, init) => { + if (init?.method === "delete" && input === SAMPLE_DATA_URI) { + return new Response(SAMPLE_DATA_URI, { + status: 500, + }); + } + return s.authFetch(input, init); + }); + const result = await resource.delete(); + expect(result.isError).toBe(true); + expect(result.type).toBe("aggregateError"); + const aggregateError = result as AggregateError< + | ServerHttpError + | UnexpectedHttpError + | UnauthenticatedHttpError + | UnexpectedResourceError + | NoncompliantPodError + >; + expect(aggregateError.errors[0].type).toBe("serverError"); + }); + + it("returns an error on container delete when deleting a container", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + s.fetchMock.mockImplementation(async (input, init) => { + if (init?.method === "delete" && input === TEST_CONTAINER_URI) { + return new Response(SAMPLE_DATA_URI, { + status: 500, + }); + } + return s.authFetch(input, init); + }); + const result = await resource.delete(); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + }); + + /** + * Update + */ + describe("updateDataResource", () => { + const normanQuad = createQuad( + namedNode("http://example.org/#green-goblin"), + namedNode("http://xmlns.com/foaf/0.1/name"), + literal("Norman Osborn"), + namedNode(SAMPLE_DATA_URI), + ); + + const goblinQuad = createQuad( + namedNode("http://example.org/#green-goblin"), + namedNode("http://xmlns.com/foaf/0.1/name"), + literal("Green Goblin"), + namedNode(SAMPLE_DATA_URI), + ); + + it("applies changes to a Pod", async () => { + const result = await testRequestLoads( + () => { + const transaction = solidLdoDataset.startTransaction(); + transaction.add(normanQuad); + transaction.delete(goblinQuad); + return transaction.commitToRemote(); + }, + solidLdoDataset.getResource(SAMPLE_DATA_URI), + { + isLoading: true, + isUpdating: true, + }, + ); + expect(result.type).toBe("aggregateSuccess"); + const aggregateSuccess = result as AggregateSuccess< + UpdateSuccess + >; + expect(aggregateSuccess.results.length).toBe(1); + expect(aggregateSuccess.results[0].type === "updateSuccess").toBe(true); + expect(solidLdoDataset.has(normanQuad)).toBe(true); + expect(solidLdoDataset.has(goblinQuad)).toBe(false); + }); + + it("applies only remove changes to the Pod", async () => { + const result = await testRequestLoads( + () => { + const transaction = solidLdoDataset.startTransaction(); + transaction.delete(goblinQuad); + return transaction.commitToRemote(); + }, + solidLdoDataset.getResource(SAMPLE_DATA_URI), + { + isLoading: true, + isUpdating: true, + }, + ); + expect(result.type).toBe("aggregateSuccess"); + const aggregateSuccess = result as AggregateSuccess< + UpdateSuccess + >; + expect(aggregateSuccess.results.length).toBe(1); + expect(aggregateSuccess.results[0].type === "updateSuccess").toBe(true); + expect(solidLdoDataset.has(goblinQuad)).toBe(false); + }); + + it("handles an HTTP error", async () => { + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); + + const transaction = solidLdoDataset.startTransaction(); + transaction.add(normanQuad); + transaction.delete(goblinQuad); + const result = await transaction.commitToRemote(); + + expect(result.isError).toBe(true); + expect(result.type).toBe("aggregateError"); + const aggregateError = result as AggregateError< + | UpdateResultError + | InvalidUriError + >; + expect(aggregateError.errors.length).toBe(1); + expect(aggregateError.errors[0].type).toBe("serverError"); + }); + + it("handles an unknown request", async () => { + s.fetchMock.mockImplementationOnce(() => { + throw new Error("Some Error"); + }); + const transaction = solidLdoDataset.startTransaction(); + transaction.add(normanQuad); + transaction.delete(goblinQuad); + const result = await transaction.commitToRemote(); + expect(result.isError).toBe(true); + expect(result.type).toBe("aggregateError"); + const aggregateError = result as AggregateError< + | UpdateResultError + | InvalidUriError + >; + expect(aggregateError.errors.length).toBe(1); + expect(aggregateError.errors[0].type).toBe("unexpectedResourceError"); + }); + + it("ignores update when trying to update a container", async () => { + const badContainerQuad = createQuad( + namedNode("http://example.org/#green-goblin"), + namedNode("http://xmlns.com/foaf/0.1/name"), + literal("Norman Osborn"), + namedNode(SAMPLE_CONTAINER_URI), + ); + const transaction = solidLdoDataset.startTransaction(); + transaction.add(badContainerQuad); + const result = await transaction.commitToRemote(); + expect(result.isError).toBe(false); + expect(result.type).toBe("aggregateSuccess"); + const aggregateSuccess = result as AggregateSuccess< + | UpdateSuccess + | IgnoredInvalidUpdateSuccess + >; + expect(aggregateSuccess.results.length).toBe(1); + expect(aggregateSuccess.results[0].type).toBe( + "ignoredInvalidUpdateSuccess", + ); + }); + + it("writes to the default graph without fetching", async () => { + const defaultGraphQuad = createQuad( + namedNode("http://example.org/#green-goblin"), + namedNode("http://xmlns.com/foaf/0.1/name"), + literal("Norman Osborn"), + defaultGraph(), + ); + const transaction = solidLdoDataset.startTransaction(); + transaction.add(defaultGraphQuad); + const result = await transaction.commitToRemote(); + expect(result.type).toBe("aggregateSuccess"); + const aggregateSuccess = result as AggregateSuccess< + UpdateSuccess | UpdateDefaultGraphSuccess + >; + expect(aggregateSuccess.results.length).toBe(1); + expect(aggregateSuccess.results[0].type).toBe( + "updateDefaultGraphSuccess", + ); + expect( + solidLdoDataset.has( + createQuad( + namedNode("http://example.org/#green-goblin"), + namedNode("http://xmlns.com/foaf/0.1/name"), + literal("Norman Osborn"), + defaultGraph(), + ), + ), + ).toBe(true); + }); + + it("batches data update changes", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + + const transaction1 = solidLdoDataset.startTransaction(); + transaction1.delete(goblinQuad); + const transaction2 = solidLdoDataset.startTransaction(); + transaction2.add(normanQuad); + + const [, updateResult1, updateResult2] = await Promise.all([ + resource.read(), + transaction1.commitToRemote(), + transaction2.commitToRemote(), + ]); + expect(updateResult1.type).toBe("aggregateSuccess"); + expect(updateResult2.type).toBe("aggregateSuccess"); + expect(s.fetchMock).toHaveBeenCalledTimes(2); + expect( + solidLdoDataset.has( + createQuad( + namedNode("http://example.org/#green-goblin"), + namedNode("http://xmlns.com/foaf/0.1/name"), + literal("Norman Osborn"), + namedNode(SAMPLE_DATA_URI), + ), + ), + ).toBe(true); + expect( + solidLdoDataset.has( + createQuad( + namedNode("http://example.org/#green-goblin"), + namedNode("http://xmlns.com/foaf/0.1/name"), + literal("Green Goblin"), + namedNode(SAMPLE_DATA_URI), + ), + ), + ).toBe(false); + }); + }); + + it("allows a transaction on a transaction", () => { + const transaction = solidLdoDataset.startTransaction(); + const transaction2 = transaction.startTransaction(); + expect(transaction2).toBeInstanceOf(ConnectedLdoTransactionDataset); + }); + + /** + * =========================================================================== + * Upload + * =========================================================================== + */ + describe("uploadAndOverwrite", () => { + it("uploads a document that doesn't exist", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_BINARY_URI); + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => + resource.uploadAndOverwrite( + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ), + resource, + { + isLoading: true, + isUploading: true, + }, + ); + + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.didOverwrite).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE2_BINARY_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + container.children().some((child) => child.uri === SAMPLE2_BINARY_URI), + ).toBe(true); + expect(resource.getMimeType()).toBe("text/plain"); + expect(resource.isBinary()).toBe(true); + expect(resource.isDataResource()).toBe(false); + }); + + it("creates a binary resource that doesn't exist while overwriting", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => + resource.uploadAndOverwrite( + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ), + resource, + { + isLoading: true, + isUploading: true, + }, + ); + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.didOverwrite).toBe(true); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE_BINARY_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + container.children().some((child) => child.uri === SAMPLE_BINARY_URI), + ).toBe(true); + }); + + it("returns a delete error if delete failed", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 500, + }), + ); + const result = await resource.uploadAndOverwrite( + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + + it("returns an error if the create fetch fails", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); + s.fetchMock.mockImplementationOnce(async (...args) => { + return s.authFetch(...args); + }); + s.fetchMock.mockResolvedValueOnce( + new Response(TEST_CONTAINER_TTL, { + status: 500, + }), + ); + const result = await resource.uploadAndOverwrite( + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + + it("returns an unexpected error if some unknown error is triggered", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); + s.fetchMock.mockImplementationOnce(async (...args) => { + return s.authFetch(...args); + }); + s.fetchMock.mockImplementationOnce(async () => { + throw new Error("Some Unknown"); + }); + const result = await resource.uploadAndOverwrite( + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ); + expect(result.isError).toBe(true); + expect(result.type).toBe("unexpectedResourceError"); + }); + + it("batches the upload request while waiting on another request", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const [, result1, result2] = await Promise.all([ + resource.read(), + resource.uploadAndOverwrite( + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ), + resource.uploadAndOverwrite( + Buffer.from("some text 2.") as unknown as Blob, + "text/plain", + ), + ]); + + expect(result1.type).toBe("createSuccess"); + expect(result2.type).toBe("createSuccess"); + // 1 for read, 1 for delete in createAndOverwrite, 1 for create + expect(s.fetchMock).toHaveBeenCalledTimes(3); + expect(resource.getBlob()?.toString()).toBe("some text 2."); + }); + + it("batches the upload request while waiting on a similar request", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const [result1, result2] = await Promise.all([ + resource.uploadAndOverwrite( + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ), + resource.uploadAndOverwrite( + Buffer.from("some text 2.") as unknown as Blob, + "text/plain", + ), + ]); + + expect(result1.type).toBe("createSuccess"); + expect(result2.type).toBe("createSuccess"); + // 1 for delete in createAndOverwrite, 1 for create + expect(s.fetchMock).toHaveBeenCalledTimes(2); + expect(resource.getBlob()?.toString()).toBe("some text 2."); + }); + }); + + describe("uploadIfAbsent", () => { + it("creates a binary resource that doesn't exist", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_BINARY_URI); + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => + resource.uploadIfAbsent( + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ), + resource, + { + isLoading: true, + isUploading: true, + }, + ); + + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.didOverwrite).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE2_BINARY_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + container.children().some((child) => child.uri === SAMPLE2_BINARY_URI), + ).toBe(true); + }); + + it("doesn't overwrite a binary resource that does exist", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_BINARY_URI); + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await testRequestLoads( + () => + resource.uploadIfAbsent( + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ), + resource, + { + isLoading: true, + isUploading: true, + }, + ); + + expect(result.type).toBe("binaryReadSuccess"); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE_BINARY_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + container.children().some((child) => child.uri === SAMPLE_BINARY_URI), + ).toBe(true); + }); + + it("returns an error if an error is encountered", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_BINARY_URI); + s.fetchMock.mockResolvedValueOnce( + new Response(SAMPLE2_BINARY_URI, { + status: 500, + }), + ); + const result = await resource.uploadIfAbsent( + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ); + expect(result.isError).toBe(true); + expect(result.type).toBe("serverError"); + }); + }); + + /** + * =========================================================================== + * Methods + * =========================================================================== + */ + describe("methods", () => { + it("creates a data object for a specific subject", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const post = solidLdoDataset.createData( + PostShShapeType, + "https://example.com/subject", + resource, + ); + post.type = { "@id": "CreativeWork" }; + expect(post.type["@id"]).toBe("CreativeWork"); + const result = await commitData(post); + expect(result.type).toBe("aggregateSuccess"); + expect( + solidLdoDataset.has( + createQuad( + namedNode("https://example.com/subject"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://schema.org/CreativeWork"), + namedNode(SAMPLE_DATA_URI), + ), + ), + ).toBe(true); + }); + + it("handles an error when committing data", async () => { + s.fetchMock.mockResolvedValueOnce( + new Response(SAMPLE_DATA_URI, { + status: 500, + }), + ); + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const post = solidLdoDataset.createData( + PostShShapeType, + "https://example.com/subject", + resource, + ); + post.type = { "@id": "CreativeWork" }; + expect(post.type["@id"]).toBe("CreativeWork"); + const result = await commitData(post); + expect(result.isError).toBe(true); + }); + + it("uses changeData to start a transaction", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + solidLdoDataset.add( + createQuad( + namedNode("https://example.com/subject"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://schema.org/CreativeWork"), + namedNode(SAMPLE_DATA_URI), + ), + ); + const post = solidLdoDataset + .usingType(PostShShapeType) + .fromSubject("https://example.com/subject"); + const cPost = changeData(post, resource); + cPost.type = { "@id": "SocialMediaPosting" }; + expect(cPost.type["@id"]).toBe("SocialMediaPosting"); + const result = await commitData(cPost); + expect(result.isError).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode("https://example.com/subject"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://schema.org/SocialMediaPosting"), + namedNode(SAMPLE_DATA_URI), + ), + ), + ).toBe(true); + }); + }); + + /** + * =========================================================================== + * Container-Specific Methods + * =========================================================================== + */ + describe("container specific", () => { + it("returns the child with the child method", () => { + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const child = container.child(SAMPLE2_DATA_SLUG); + expect(child.uri).toBe(SAMPLE2_DATA_URI); + }); + + it("runs createAndOverwrite for a child via the createChildAndOverwrite method", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await resource.createChildAndOverwrite(SAMPLE2_DATA_SLUG); + + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.resource.uri).toBe(SAMPLE2_DATA_URI); + expect(createSuccess.didOverwrite).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE2_DATA_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + resource.children().some((child) => child.uri === SAMPLE2_DATA_URI), + ).toBe(true); + }); + + it("runs createIfAbsent for a child via the createChildIfAbsent method", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await resource.createChildIfAbsent(SAMPLE2_DATA_SLUG); + + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.resource.uri).toBe(SAMPLE2_DATA_URI); + expect(createSuccess.didOverwrite).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE2_DATA_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + resource.children().some((child) => child.uri === SAMPLE2_DATA_URI), + ).toBe(true); + }); + + it("runs uploadAndOverwrite for a child via the uploadChildAndOverwrite method", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await resource.uploadChildAndOverwrite( + SAMPLE2_BINARY_SLUG, + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ); + + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.resource.uri).toBe(SAMPLE2_BINARY_URI); + expect(createSuccess.didOverwrite).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE2_BINARY_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + resource.children().some((child) => child.uri === SAMPLE2_BINARY_URI), + ).toBe(true); + }); + + it("runs uploadIfAbsent for a child via the uploadChildIfAbsent method", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await resource.uploadChildIfAbsent( + SAMPLE2_BINARY_SLUG, + Buffer.from("some text.") as unknown as Blob, + "text/plain", + ); + + expect(result.type).toBe("createSuccess"); + const createSuccess = result as CreateSuccess; + expect(createSuccess.resource.uri).toBe(SAMPLE2_BINARY_URI); + expect(createSuccess.didOverwrite).toBe(false); + expect( + solidLdoDataset.has( + createQuad( + namedNode(TEST_CONTAINER_URI), + namedNode("http://www.w3.org/ns/ldp#contains"), + namedNode(SAMPLE2_BINARY_URI), + namedNode(TEST_CONTAINER_URI), + ), + ), + ).toBe(true); + expect( + resource.children().some((child) => child.uri === SAMPLE2_BINARY_URI), + ).toBe(true); + }); + }); + + /** + * =========================================================================== + * ACCESS CONTROL + * =========================================================================== + */ + describe("getWacRule", () => { + it("Fetches a wac rules for a container that has a corresponding acl", async () => { + const container = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const wacResult = await container.getWac(); + expect(wacResult.isError).toBe(false); + const wacSuccess = wacResult as GetWacRuleSuccess< + SolidLeaf | SolidContainer + >; + expect(wacSuccess.wacRule.public).toEqual({ + read: true, + write: true, + append: true, + control: true, + }); + expect(wacSuccess.wacRule.authenticated).toEqual({ + read: true, + write: true, + append: true, + control: true, + }); + expect(wacSuccess.wacRule.agent[WEB_ID]).toEqual({ + read: true, + write: true, + append: true, + control: true, + }); + }); + + it("Gets wac rules of a parent resource for a resource that does not have a corresponding acl", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const wacResult = await resource.getWac(); + expect(wacResult.isError).toBe(false); + const wacSuccess = wacResult as GetWacRuleSuccess< + SolidLeaf | SolidContainer + >; + expect(wacSuccess.wacRule.public).toEqual({ + read: true, + write: true, + append: true, + control: true, + }); + expect(wacSuccess.wacRule.authenticated).toEqual({ + read: true, + write: true, + append: true, + control: true, + }); + expect(wacSuccess.wacRule.agent[WEB_ID]).toEqual({ + read: true, + write: true, + append: true, + control: true, + }); + }); + + it("uses cached values for a retrieved resource", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + await resource.getWac(); + const wacResult = await resource.getWac(); + expect(wacResult.isError).toBe(false); + const wacSuccess = wacResult as GetWacRuleSuccess< + SolidLeaf | SolidContainer + >; + expect(wacSuccess.wacRule.public).toEqual({ + read: true, + write: true, + append: true, + control: true, + }); + expect(wacSuccess.wacRule.authenticated).toEqual({ + read: true, + write: true, + append: true, + control: true, + }); + expect(wacSuccess.wacRule.agent[WEB_ID]).toEqual({ + read: true, + write: true, + append: true, + control: true, + }); + }); + + it("returns an error when an error is encountered fetching the aclUri", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); + const wacResult = await resource.getWac(); + expect(wacResult.isError).toBe(true); + expect(wacResult.type).toBe("serverError"); + }); + + it("returns an error when a document is not found", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const wacResult = await resource.getWac(); + expect(wacResult.isError).toBe(true); + expect(wacResult.type).toBe("notFoundError"); + }); + + it("returns a non-compliant error if a response is returned without a link header", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockResolvedValueOnce( + new Response("Error", { + status: 200, + }), + ); + const wacResult = await resource.getWac(); + expect(wacResult.isError).toBe(true); + expect(wacResult.type).toBe("noncompliantPodError"); + expect( + (wacResult as NoncompliantPodError).message, + ).toBe( + `Response from ${SAMPLE_DATA_URI} is not compliant with the Solid Specification: No link header present in request.`, + ); + }); + + it("returns a non-compliant error if a response is returned without an ACL link", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockResolvedValueOnce( + new Response("Error", { + status: 200, + headers: { link: `; rel="describedBy"` }, + }), + ); + const wacResult = await resource.getWac(); + expect(wacResult.isError).toBe(true); + expect(wacResult.type).toBe("noncompliantPodError"); + expect( + (wacResult as NoncompliantPodError).message, + ).toBe( + `Response from ${SAMPLE_DATA_URI} is not compliant with the Solid Specification: There must be one link with a rel="acl"`, + ); + }); + + it("Returns an UnexpectedResourceError if an unknown error is triggered while getting the wac URI", async () => { + s.fetchMock.mockRejectedValueOnce(new Error("Something happened.")); + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const result = await resource.getWac(); + expect(result.isError).toBe(true); + if (!result.isError) return; + expect(result.type).toBe("unexpectedResourceError"); + expect(result.message).toBe("Something happened."); + }); + + it("Returns an error if the request to get the ACL fails", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockResolvedValueOnce( + new Response("", { + status: 200, + headers: { link: `; rel="acl"` }, + }), + ); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); + const wacResult = await resource.getWac(); + expect(wacResult.isError).toBe(true); + expect(wacResult.type).toBe("serverError"); + }); + + it("Returns a non-compliant error if the root uri has no ACL", () => {}); + + it("Returns an error if the request to the ACL resource returns invalid turtle", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockResolvedValueOnce( + new Response("", { + status: 200, + headers: { link: `; rel="acl"` }, + }), + ); + s.fetchMock.mockResolvedValueOnce( + new Response("BAD TURTLE", { status: 200 }), + ); + const wacResult = await resource.getWac(); + expect(wacResult.isError).toBe(true); + expect(wacResult.type).toBe("noncompliantPodError"); + expect( + (wacResult as NoncompliantPodError).message, + ).toBe( + `Response from http://localhost:3001/test_ldo/sample.ttl is not compliant with the Solid Specification: Request returned noncompliant turtle: Unexpected "BAD" on line 1.\nBAD TURTLE`, + ); + }); + + it("Returns an error if there was a problem getting the parent resource", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + s.fetchMock.mockResolvedValueOnce( + new Response("", { + status: 200, + headers: { link: `; rel="acl"` }, + }), + ); + s.fetchMock.mockResolvedValueOnce(new Response("", { status: 404 })); + s.fetchMock.mockResolvedValueOnce(new Response("", { status: 500 })); + const wacResult = await resource.getWac(); + expect(wacResult.isError).toBe(true); + expect(wacResult.type).toBe("serverError"); + }); + + it("returns a NonCompliantPodError when this is the root resource and it doesn't have an ACL", async () => { + const resource = solidLdoDataset.getResource(ROOT_CONTAINER); + s.fetchMock.mockResolvedValueOnce( + new Response("", { + status: 200, + headers: { link: `; rel="acl"` }, + }), + ); + s.fetchMock.mockResolvedValueOnce(new Response("", { status: 404 })); + const wacResult = await resource.getWac(); + expect(wacResult.isError).toBe(true); + expect(wacResult.type).toBe("noncompliantPodError"); + expect( + (wacResult as NoncompliantPodError).message, + ).toBe( + `Response from ${ROOT_CONTAINER} is not compliant with the Solid Specification: Resource "${ROOT_CONTAINER}" has no Effective ACL resource`, + ); + }); + }); + + describe("setWacRule", () => { + const newRules: WacRule = { + public: { read: true, write: false, append: false, control: false }, + authenticated: { + read: true, + write: false, + append: true, + control: false, + }, + agent: { + [WEB_ID]: { read: true, write: true, append: true, control: true }, + }, + }; + + it("sets wac rules for a resource that didn't have one before", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const result = await resource.setWac(newRules); + expect(result.isError).toBe(false); + expect(result.type).toBe("setWacRuleSuccess"); + const readResult = await resource.getWac({ ignoreCache: true }); + expect(readResult.isError).toBe(false); + expect(readResult.type).toBe("getWacRuleSuccess"); + const rules = ( + readResult as GetWacRuleSuccess + ).wacRule; + expect(rules).toEqual(newRules); + }); + + it("overwrites an existing access control rule", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + const result = await resource.setWac(newRules); + expect(result.isError).toBe(false); + expect(result.type).toBe("setWacRuleSuccess"); + const readResult = await resource.getWac({ ignoreCache: true }); + expect(readResult.isError).toBe(false); + expect(readResult.type).toBe("getWacRuleSuccess"); + const rules = ( + readResult as GetWacRuleSuccess + ).wacRule; + expect(rules).toEqual(newRules); + }); + + it("Does not write a rule when access is not granted to an agent", async () => { + const moreRules = { + ...newRules, + public: { read: false, write: false, append: false, control: false }, + }; + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const result = await resource.setWac(moreRules); + expect(result.isError).toBe(false); + expect(result.type).toBe("setWacRuleSuccess"); + const readResult = await resource.getWac({ ignoreCache: true }); + expect(readResult.isError).toBe(false); + expect(readResult.type).toBe("getWacRuleSuccess"); + const rules = ( + readResult as GetWacRuleSuccess + ).wacRule; + expect(rules).toEqual(moreRules); + }); + + it("returns an error when an error is encountered fetching the aclUri", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + s.fetchMock.mockResolvedValueOnce(new Response("Error", { status: 500 })); + const wacResult = await resource.setWac(newRules); + expect(wacResult.isError).toBe(true); + expect(wacResult.type).toBe("serverError"); + }); + + it("Returns an error when the request to write the access rules throws an error", async () => { + const resource = solidLdoDataset.getResource(TEST_CONTAINER_URI); + s.fetchMock.mockResolvedValueOnce( + new Response("", { + status: 200, + headers: { link: `; rel="acl"` }, + }), + ); + s.fetchMock.mockResolvedValueOnce(new Response("", { status: 500 })); + const wacResult = await resource.setWac(newRules); + expect(wacResult.isError).toBe(true); + expect(wacResult.type).toBe("serverError"); + }); + }); + + /** + * =========================================================================== + * NOTIFICATION SUBSCRIPTIONS + * =========================================================================== + */ + describe("Notification Subscriptions", () => { + const spidermanNode = namedNode("http://example.org/#spiderman"); + const foafNameNode = namedNode("http://xmlns.com/foaf/0.1/name"); + + afterEach(async () => { + await Promise.all( + solidLdoDataset.getResources().map(async (resource) => { + await resource.unsubscribeFromAllNotifications(); + }), + ); + }); + + it("handles notification when a resource is updated", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + await resource.read(); + + const spidermanCallback = vi.fn(); + solidLdoDataset.addListener( + [spidermanNode, null, null, null], + spidermanCallback, + ); + + const subscriptionId = await resource.subscribeToNotifications(); + + expect(resource.isSubscribedToNotifications()).toBe(true); + + await s.authFetch(SAMPLE_DATA_URI, { + method: "PATCH", + body: 'INSERT DATA { "Peter Parker" . }', + headers: { + "Content-Type": "application/sparql-update", + }, + }); + await wait(1000); + + expect( + solidLdoDataset.match( + spidermanNode, + foafNameNode, + literal("Peter Parker"), + ).size, + ).toBe(1); + expect(spidermanCallback).toHaveBeenCalledTimes(1); + + // Notification is not propogated after unsubscribe + spidermanCallback.mockClear(); + await resource.unsubscribeFromNotifications(subscriptionId); + expect(resource.isSubscribedToNotifications()).toBe(false); + await s.authFetch(SAMPLE_DATA_URI, { + method: "PATCH", + body: 'INSERT DATA { "Miles Morales" . }', + headers: { + "Content-Type": "application/sparql-update", + }, + }); + await wait(50); + + expect(spidermanCallback).not.toHaveBeenCalled(); + expect( + solidLdoDataset.match( + spidermanNode, + foafNameNode, + literal("Miles Morales"), + ).size, + ).toBe(0); + }); + + it("handles notification when subscribed to a child that is deleted", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const testContainer = solidLdoDataset.getResource(TEST_CONTAINER_URI); + await resource.read(); + + const spidermanCallback = vi.fn(); + solidLdoDataset.addListener( + [spidermanNode, null, null, null], + spidermanCallback, + ); + + const containerCallback = vi.fn(); + solidLdoDataset.addListener( + [namedNode(TEST_CONTAINER_URI), null, null, null], + containerCallback, + ); + + await resource.subscribeToNotifications(); + + await s.authFetch(SAMPLE_DATA_URI, { + method: "DELETE", + }); + await wait(1000); + + expect(solidLdoDataset.match(spidermanNode, null, null).size).toBe(0); + expect( + testContainer.children().some((child) => child.uri === SAMPLE_DATA_URI), + ).toBe(false); + expect(spidermanCallback).toHaveBeenCalledTimes(1); + expect(containerCallback).toHaveBeenCalledTimes(1); + + await resource.unsubscribeFromAllNotifications(); + }); + + it("handles notification when subscribed to a parent with a deleted child", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const testContainer = solidLdoDataset.getResource(TEST_CONTAINER_URI); + await resource.read(); + + const spidermanCallback = vi.fn(); + solidLdoDataset.addListener( + [spidermanNode, null, null, null], + spidermanCallback, + ); + + const containerCallback = vi.fn(); + solidLdoDataset.addListener( + [namedNode(TEST_CONTAINER_URI), null, null, null], + containerCallback, + ); + + await testContainer.subscribeToNotifications(); + + await s.authFetch(SAMPLE_DATA_URI, { + method: "DELETE", + }); + await wait(1000); + + expect(solidLdoDataset.match(spidermanNode, null, null).size).toBe(0); + expect( + testContainer.children().some((child) => child.uri === SAMPLE_DATA_URI), + ).toBe(false); + expect(spidermanCallback).toHaveBeenCalledTimes(1); + expect(containerCallback).toHaveBeenCalledTimes(1); + + await testContainer.unsubscribeFromAllNotifications(); + }); + + it("handles notification when subscribed to a parent with an added child", async () => { + const resource = solidLdoDataset.getResource(SAMPLE2_DATA_URI); + const testContainer = solidLdoDataset.getResource(TEST_CONTAINER_URI); + await resource.read(); + + const spidermanCallback = vi.fn(); + solidLdoDataset.addListener( + [spidermanNode, null, null, null], + spidermanCallback, + ); + + const containerCallback = vi.fn(); + solidLdoDataset.addListener( + [namedNode(TEST_CONTAINER_URI), null, null, null], + containerCallback, + ); + + await testContainer.subscribeToNotifications(); + + await s.authFetch(TEST_CONTAINER_URI, { + method: "POST", + headers: { "content-type": "text/turtle", slug: "sample2.ttl" }, + body: SPIDER_MAN_TTL, + }); + await wait(1000); + + expect(solidLdoDataset.match(spidermanNode, null, null).size).toBe(4); + expect( + testContainer + .children() + .some((child) => child.uri === SAMPLE2_DATA_URI), + ).toBe(true); + expect(spidermanCallback).toHaveBeenCalledTimes(1); + expect(containerCallback).toHaveBeenCalledTimes(1); + + await testContainer.unsubscribeFromAllNotifications(); + }); + + it.skip("returns an error when it cannot subscribe to a notification", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const onError = vi.fn(); + + await s.app.stop(); + await resource.subscribeToNotifications({ + onNotificationError: onError, + }); + expect(onError).toHaveBeenCalledTimes(2); + await s.app.start(); + }); + + it.skip("returns an error when the server doesnt support websockets", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const onError = vi.fn(); + + await s.app.stop(); + const disabledWebsocketsApp = await createApp( + 3001, + path.join(__dirname, "./configs/server-config-without-websocket.json"), + ); + await disabledWebsocketsApp.start(); + + await resource.subscribeToNotifications({ onNotificationError: onError }); + expect(onError).toHaveBeenCalledTimes(2); + + await disabledWebsocketsApp.stop(); + await s.app.start(); + }); + + it.skip("attempts to reconnect multiple times before giving up.", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + const onError = vi.fn(); + + await s.app.stop(); + const disabledWebsocketsApp = await createApp( + 3001, + path.join(__dirname, "./configs/server-config-without-websocket.json"), + ); + await disabledWebsocketsApp.start(); + + await resource.subscribeToNotifications({ onNotificationError: onError }); + + // TODO: This is a bad test because of the wait. Instead inject better + // numbers into the websocket class. + await wait(35000); + + expect(onError).toHaveBeenCalledTimes(14); + expect(onError.mock.calls[1][0].type).toBe( + "disconnectedAttemptingReconnectError", + ); + expect(onError.mock.calls[13][0].type).toBe( + "disconnectedNotAttemptingReconnectError", + ); + + await disabledWebsocketsApp.stop(); + await s.app.start(); + }); + + it("causes no problems when unsubscribing when not subscribed", async () => { + const resource = solidLdoDataset.getResource(SAMPLE_DATA_URI); + await resource.unsubscribeFromAllNotifications(); + expect(resource.isSubscribedToNotifications()).toBe(false); + }); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/LeafRequester.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/LeafRequester.test.ts new file mode 100644 index 0000000..091ca64 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/LeafRequester.test.ts @@ -0,0 +1,256 @@ +// import type { App } from "@solid/community-server"; +// import { getAuthenticatedFetch, ROOT_COONTAINER } from "./solidServer.helper.js"; +// import type { SolidLdoDataset } from "../src/SolidLdoDataset.js"; +// import { createSolidLdoDataset } from "../src/createSolidLdoDataset.js"; +// import { LeafRequester } from "../src/requester/LeafRequester.js"; +import { describe, it, expect } from "vitest"; + +describe("Leaf Requester", () => { + it("trivial", () => { + expect(true).toBe(true); + }); +}); + +// describe.skip("Leaf Requester", () => { +// let _app: App; +// let authFetch: typeof fetch; +// let fetchMock: typeof fetch; +// let solidLdoDataset: SolidLdoDataset; + +// beforeAll(async () => { +// // Start up the server +// // app = await createApp(); +// // await app.start(); + +// authFetch = await getAuthenticatedFetch(); +// }); + +// beforeEach(async () => { +// fetchMock = jest.fn(authFetch); +// solidLdoDataset = createSolidLdoDataset({ fetch: fetchMock }); +// // Create a new document called sample.ttl +// await Promise.all([ +// authFetch(`${ROOT_COONTAINER}test_leaf/`, { +// method: "POST", +// headers: { "content-type": "text/turtle", slug: "sample.ttl" }, +// body: `@base . +// @prefix rdf: . +// @prefix rdfs: . +// @prefix foaf: . +// @prefix rel: . + +// <#green-goblin> +// rel:enemyOf <#spiderman> ; +// a foaf:Person ; # in the context of the Marvel universe +// foaf:name "Green Goblin" . + +// <#spiderman> +// rel:enemyOf <#green-goblin> ; +// a foaf:Person ; +// foaf:name "Spiderman", "Человек-паук"@ru .`, +// }), +// authFetch(`${ROOT_COONTAINER}test_leaf/`, { +// method: "PUT", +// headers: { "content-type": "text/plain", slug: "sample.txt" }, +// body: `some text.`, +// }), +// ]); +// }); + +// afterEach(async () => { +// await Promise.all([ +// authFetch(`${ROOT_COONTAINER}test_leaf/sample.ttl`, { +// method: "DELETE", +// }), +// authFetch(`${ROOT_COONTAINER}test_leaf/sample2.ttl`, { +// method: "DELETE", +// }), +// authFetch(`${ROOT_COONTAINER}test_leaf/sample.txt`, { +// method: "DELETE", +// }), +// authFetch(`${ROOT_COONTAINER}test_leaf/sample2.txt`, { +// method: "DELETE", +// }), +// ]); +// }); + +// /** +// * =========================================================================== +// * Read +// * =========================================================================== +// */ +// it("reads data", async () => { +// const leafRequester = new LeafRequester( +// `${ROOT_COONTAINER}test_leaf/sample.ttl`, +// solidLdoDataset.context, +// ); +// const result = await leafRequester.read(); +// expect(result.type).toBe("data"); +// expect( +// solidLdoDataset.match( +// null, +// null, +// null, +// namedNode(`${ROOT_COONTAINER}test_leaf/sample.ttl`), +// ).size, +// ).toBe(7); +// }); + +// it("reads data that doesn't exist", async () => { +// const leafRequester = new LeafRequester( +// `${ROOT_COONTAINER}test_leaf/doesnotexist.ttl`, +// solidLdoDataset.context, +// ); +// const result = await leafRequester.read(); +// expect(result.type).toBe("absent"); +// }); + +// /** +// * =========================================================================== +// * Create +// * =========================================================================== +// */ +// it("creates a data resource that doesn't exist while not overwriting", async () => { +// const leafRequester = new LeafRequester( +// `${ROOT_COONTAINER}test_leaf/sample2.ttl`, +// solidLdoDataset.context, +// ); +// const result = await leafRequester.createDataResource(); +// expect(result.type).toBe("data"); +// expect( +// solidLdoDataset.has( +// createQuad( +// namedNode(`${ROOT_COONTAINER}test_leaf/`), +// namedNode("http://www.w3.org/ns/ldp#contains"), +// namedNode(`${ROOT_COONTAINER}test_leaf/sample2.ttl`), +// namedNode(`${ROOT_COONTAINER}test_leaf/`), +// ), +// ), +// ).toBe(true); +// }); + +// it("creates a data resource that doesn't exist while overwriting", async () => { +// const leafRequester = new LeafRequester( +// `${ROOT_COONTAINER}test_leaf/sample2.ttl`, +// solidLdoDataset.context, +// ); +// const result = await leafRequester.createDataResource(true); +// expect(result.type).toBe("data"); +// expect( +// solidLdoDataset.has( +// createQuad( +// namedNode(`${ROOT_COONTAINER}test_leaf/`), +// namedNode("http://www.w3.org/ns/ldp#contains"), +// namedNode(`${ROOT_COONTAINER}test_leaf/sample2.ttl`), +// namedNode(`${ROOT_COONTAINER}test_leaf/`), +// ), +// ), +// ).toBe(true); +// }); + +// it("creates a data resource that does exist while not overwriting", async () => { +// const leafRequester = new LeafRequester( +// `${ROOT_COONTAINER}test_leaf/sample.ttl`, +// solidLdoDataset.context, +// ); +// const result = await leafRequester.createDataResource(); +// expect(result.type).toBe("data"); +// expect( +// solidLdoDataset.has( +// createQuad( +// namedNode("http://example.org/#spiderman"), +// namedNode("http://www.perceive.net/schemas/relationship/enemyOf"), +// namedNode("http://example.org/#green-goblin"), +// namedNode(`${ROOT_COONTAINER}test_leaf/sample.ttl`), +// ), +// ), +// ).toBe(true); +// expect( +// solidLdoDataset.has( +// createQuad( +// namedNode(`${ROOT_COONTAINER}test_leaf/`), +// namedNode("http://www.w3.org/ns/ldp#contains"), +// namedNode(`${ROOT_COONTAINER}test_leaf/sample.ttl`), +// namedNode(`${ROOT_COONTAINER}test_leaf/`), +// ), +// ), +// ).toBe(true); +// }); + +// it("creates a data resource that does exist while overwriting", async () => { +// const leafRequester = new LeafRequester( +// `${ROOT_COONTAINER}test_leaf/sample.ttl`, +// solidLdoDataset.context, +// ); +// const result = await leafRequester.createDataResource(true); +// expect(result.type).toBe("data"); +// expect( +// solidLdoDataset.has( +// createQuad( +// namedNode("http://example.org/#spiderman"), +// namedNode("http://www.perceive.net/schemas/relationship/enemyOf"), +// namedNode("http://example.org/#green-goblin"), +// namedNode(`${ROOT_COONTAINER}test_leaf/sample.ttl`), +// ), +// ), +// ).toBe(false); +// expect( +// solidLdoDataset.has( +// createQuad( +// namedNode(`${ROOT_COONTAINER}test_leaf/`), +// namedNode("http://www.w3.org/ns/ldp#contains"), +// namedNode(`${ROOT_COONTAINER}test_leaf/sample.ttl`), +// namedNode(`${ROOT_COONTAINER}test_leaf/`), +// ), +// ), +// ).toBe(true); +// }); + +// /** +// * =========================================================================== +// * Delete +// * =========================================================================== +// */ +// it("deletes data", async () => { +// solidLdoDataset.add( +// createQuad( +// namedNode("a"), +// namedNode("b"), +// namedNode("c"), +// namedNode(`${ROOT_COONTAINER}/test_leaf/sample.ttl`), +// ), +// ); +// solidLdoDataset.add( +// createQuad( +// namedNode(`${ROOT_COONTAINER}/test_leaf/`), +// namedNode("http://www.w3.org/ns/ldp#contains"), +// namedNode(`${ROOT_COONTAINER}/test_leaf/sample.ttl`), +// namedNode(`${ROOT_COONTAINER}/test_leaf/`), +// ), +// ); +// const leafRequester = new LeafRequester( +// `${ROOT_COONTAINER}/test_leaf/sample.ttl`, +// solidLdoDataset.context, +// ); +// const result = await leafRequester.delete(); +// expect(result.type).toBe("absent"); +// expect( +// solidLdoDataset.match( +// null, +// null, +// null, +// namedNode(`${ROOT_COONTAINER}/test_leaf/sample.ttl`), +// ).size, +// ).toBe(0); +// expect( +// solidLdoDataset.has( +// createQuad( +// namedNode(`${ROOT_COONTAINER}/test_leaf/`), +// namedNode("http://www.w3.org/ns/ldp#contains"), +// namedNode(`${ROOT_COONTAINER}/test_leaf/sample.ttl`), +// namedNode(`${ROOT_COONTAINER}/test_leaf/`), +// ), +// ), +// ).toBe(false); +// }); +// }); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/RequestBatcher.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/RequestBatcher.test.ts new file mode 100644 index 0000000..bf252c3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/RequestBatcher.test.ts @@ -0,0 +1,113 @@ +import type { WaitingProcess } from "../src/util/RequestBatcher.js"; +import { RequestBatcher } from "../src/util/RequestBatcher.js"; +import { describe, it, expect, vi } from "vitest"; + +describe("RequestBatcher", () => { + type ReadWaitingProcess = WaitingProcess<[string], string>; + + it("Batches a request", async () => { + const requestBatcher = new RequestBatcher({ batchMillis: 500 }); + const perform = async (input: string): Promise => { + await wait(100); + return `Hello ${input}`; + }; + const perform1 = vi.fn(perform); + const perform2 = vi.fn(perform); + const perform3 = vi.fn((input: string): Promise => { + expect(requestBatcher.isLoading("read")).toBe(true); + return perform(input); + }); + const perform4 = vi.fn(perform); + + const modifyQueue = (queue, currentlyProcessing, input: [string]) => { + const last = queue[queue.length - 1]; + if (last?.name === "read") { + (last as ReadWaitingProcess).args[0] += input; + return last; + } + return undefined; + }; + + let return1: string = ""; + let return2: string = ""; + let return3: string = ""; + let return4: string = ""; + + expect(requestBatcher.isLoading("read")).toBe(false); + + await Promise.all([ + requestBatcher + .queueProcess<[string], string>({ + name: "read", + args: ["a"], + perform: perform1, + modifyQueue, + }) + .then((val) => (return1 = val)), + requestBatcher + .queueProcess<[string], string>({ + name: "read", + args: ["b"], + perform: perform2, + modifyQueue, + }) + .then((val) => (return2 = val)), + , + requestBatcher + .queueProcess<[string], string>({ + name: "read", + args: ["c"], + perform: perform3, + modifyQueue, + }) + .then((val) => (return3 = val)), + , + requestBatcher + .queueProcess<[string], string>({ + name: "read", + args: ["d"], + perform: perform4, + modifyQueue, + }) + .then((val) => (return4 = val)), + , + ]); + + expect(return1).toBe("Hello a"); + expect(return2).toBe("Hello bcd"); + expect(return3).toBe("Hello bcd"); + expect(return4).toBe("Hello bcd"); + + expect(perform1).toHaveBeenCalledTimes(1); + expect(perform1).toHaveBeenCalledWith("a"); + expect(perform2).toHaveBeenCalledTimes(1); + expect(perform2).toHaveBeenCalledWith("bcd"); + expect(perform3).toHaveBeenCalledTimes(0); + expect(perform4).toHaveBeenCalledTimes(0); + }); + + it("sets a default batch millis", () => { + const requestBatcher = new RequestBatcher(); + expect(requestBatcher.batchMillis).toBe(1000); + }); + + it("handles an error being thrown in the process", () => { + const requestBatcher = new RequestBatcher({ batchMillis: 500 }); + const perform = async (_input: string): Promise => { + throw new Error("Test Error"); + }; + const perform1 = vi.fn(perform); + expect(() => + requestBatcher.queueProcess<[string], string>({ + name: "read", + args: ["a"], + perform: perform1, + modifyQueue: () => undefined, + }), + ).rejects.toThrowError("Test Error"); + }); +}); + +function wait(millis: number): Promise { + return new Promise((resolve) => setTimeout(resolve, millis)); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/Websocket2023NotificationSubscription.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/Websocket2023NotificationSubscription.test.ts new file mode 100644 index 0000000..c229676 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/Websocket2023NotificationSubscription.test.ts @@ -0,0 +1,56 @@ +import { describe, it, expect } from "vitest"; + +describe("Websocket Trivial", () => { + it("is trivial", () => { + expect(true).toBe(true); + }); +}); + +// import type { WebSocket, Event, ErrorEvent } from "ws"; +// import { Websocket2023NotificationSubscription } from "../src/notifications/Websocket2023NotificationSubscription.js"; +// import type { SolidLdoDatasetContext } from "../src/index.js"; +// import { Leaf } from "../src/index.js"; +// import type { NotificationChannel } from "@solid-notifications/types"; + +// describe("Websocket2023NotificationSubscription", () => { +// it("returns an error when websockets have an error", async () => { +// const WebSocketMock: WebSocket = {} as WebSocket; + +// const subscription = new Websocket2023NotificationSubscription( +// new Leaf("https://example.com", { +// fetch, +// } as unknown as SolidLdoDatasetContext), +// () => {}, +// {} as unknown as SolidLdoDatasetContext, +// () => WebSocketMock, +// ); + +// const subPromise = subscription.subscribeToWebsocket({ +// receiveFrom: "http://example.com", +// } as unknown as NotificationChannel); +// WebSocketMock.onopen?.({} as Event); + +// await subPromise; + +// WebSocketMock.onerror?.({ error: new Error("Test Error") } as ErrorEvent); +// }); + +// it("returns an error when websockets have an error at the beginning", async () => { +// const WebSocketMock: WebSocket = {} as WebSocket; + +// const subscription = new Websocket2023NotificationSubscription( +// new Leaf("https://example.com", { +// fetch, +// } as unknown as SolidLdoDatasetContext), +// () => {}, +// {} as unknown as SolidLdoDatasetContext, +// () => WebSocketMock, +// ); + +// const subPromise = subscription.subscribeToWebsocket({ +// receiveFrom: "http://example.com", +// } as unknown as NotificationChannel); +// WebSocketMock.onerror?.({ error: new Error("Test Error") } as ErrorEvent); +// await subPromise; +// }); +// }); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/configs/server-config-without-websocket.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/configs/server-config-without-websocket.json new file mode 100644 index 0000000..1151dca --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/configs/server-config-without-websocket.json @@ -0,0 +1,44 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld", + "import": [ + "css:config/app/init/initialize-root.json", + "css:config/app/main/default.json", + "css:config/app/variables/default.json", + "css:config/http/handler/default.json", + "css:config/http/middleware/default.json", + "css:config/http/notifications/webhooks.json", + "css:config/http/server-factory/http.json", + "css:config/http/static/default.json", + "css:config/identity/access/public.json", + "css:config/identity/email/default.json", + "css:config/identity/handler/no-accounts.json", + "css:config/identity/oidc/default.json", + "css:config/identity/ownership/token.json", + "css:config/identity/pod/static.json", + "css:config/ldp/authentication/dpop-bearer.json", + "css:config/ldp/authorization/webacl.json", + "css:config/ldp/handler/default.json", + "css:config/ldp/metadata-parser/default.json", + "css:config/ldp/metadata-writer/default.json", + "css:config/ldp/modes/default.json", + "css:config/storage/backend/file.json", + "css:config/storage/key-value/resource-store.json", + "css:config/storage/location/root.json", + "css:config/storage/middleware/default.json", + "css:config/util/auxiliary/acl.json", + "css:config/util/identifiers/suffix.json", + "css:config/util/index/default.json", + "css:config/util/logging/winston.json", + "css:config/util/representation-conversion/default.json", + "css:config/util/resource-locker/file.json", + "css:config/util/variables/default.json" + ], + "@graph": [ + { + "comment": [ + "A Solid server that stores its resources on disk and uses WAC for authorization.", + "No registration and the root container is initialized to allow full access for everyone so make sure to change this." + ] + } + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/guaranteeFetch.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/guaranteeFetch.test.ts new file mode 100644 index 0000000..80efa8f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/guaranteeFetch.test.ts @@ -0,0 +1,9 @@ +import { guaranteeFetch } from "../src/util/guaranteeFetch.js"; +import crossFetch from "cross-fetch"; +import { describe, it, expect } from "vitest"; + +describe("guaranteeFetch", () => { + it("returns crossfetch when no fetch is provided", () => { + expect(guaranteeFetch()).toBe(crossFetch); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/uriTypes.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/uriTypes.test.ts new file mode 100644 index 0000000..387463b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/uriTypes.test.ts @@ -0,0 +1,8 @@ +import { isSolidLeafUri } from "../src/util/isSolidUri"; +import { describe, it, expect } from "vitest"; + +describe("isLeafUri", () => { + it("returns true if the given value is a leaf URI", () => { + expect(isSolidLeafUri("https://example.com/index.ttl")).toBe(true); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/utils.helper.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/utils.helper.ts new file mode 100644 index 0000000..109fa51 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/test/utils.helper.ts @@ -0,0 +1,3 @@ +export async function wait(millis: number) { + return new Promise((resolve) => setTimeout(resolve, millis)); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/tsconfig.cjs.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/tsconfig.cjs.json new file mode 100644 index 0000000..affce40 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.cjs.json", + "compilerOptions": { + "outDir": "./dist/cjs", + "rootDir": "./src" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/tsconfig.esm.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/tsconfig.esm.json new file mode 100644 index 0000000..7121269 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/tsconfig.esm.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "outDir": "./dist/esm", + "rootDir": "./src", + "declarationDir": "./dist/types", + "types": [ + "jest" + ] + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/typedoc.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/typedoc.json new file mode 100644 index 0000000..f8057fe --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/typedoc.json @@ -0,0 +1,9 @@ +{ + "entryPoints": ["src/index.ts"], + "out": "docs", + "tsconfig": "tsconfig.build.json", + "allReflectionsHaveOwnDocument": true, + "hideInPageTOC": true, + "hideBreadcrumbs": true, + "excludeExternals": true, +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/vitest.config.js b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/vitest.config.js new file mode 100644 index 0000000..9713f14 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected-solid/vitest.config.js @@ -0,0 +1,9 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + coverage: { + provider: "istanbul", + }, + }, +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/.gitignore b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/.gitignore new file mode 100644 index 0000000..869539a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/.gitignore @@ -0,0 +1,2 @@ +test/data +node_modules \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/README.md b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/README.md new file mode 100644 index 0000000..e9adfd6 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/README.md @@ -0,0 +1,281 @@ +# @ldo/connected + +@ldo/connected provides tools for LDO to connect to a remote datasource. It requires plugins for that datasource. + +## Installation + +Navigate into your project's root folder and run the following command: +``` +cd my_project/ +npx run @ldo/cli init +``` + +Now install the @ldo/solid library + +``` +npm i @ldo/connected +``` + +You may also install a connected plugin, for example `@ldo/connected-solid` and `@ldo/connected-nextgraph`. + +``` +npm i @ldo/connected-nextgraph +``` + +
+ +Manual Installation + + +If you already have generated ShapeTypes, you may install the `@ldo/ldo` and `@ldo/solid` libraries independently. + +``` +npm i @ldo/ldo @ldo/solid +``` +
+ +## Simple Examples + +Below is a simple example of @ldo/solid. Assume that a ShapeType was previously generated and placed at `./.ldo/foafProfile.shapeTypes`. Also assume we have a shape type for social media at `./.ldo/socialMediaPost.shapeTypes` + +```typescript +import { + changeData, + commitData, + createConnectedLdoDataset +} from "@ldo/connected"; +import { solidConnectedPlugin } from "@ldo/connected-solid"; +import { nextGraphConnectedPlugin } from "@ldo/connected-nextgraph"; + + +// Shape Types +import { FoafProfileShapeType } from "./.ldo/foafProfile.shapeTypes.js"; +import { SocialMediaPostShapeType } from "./.ldo/socialMediaPost.shapeTypes.js"; + +// These are tools for Solid and NextGraph outside of the LDO ecosystem +import { fetch, getDefaultSession } from "@inrupt/solid-client-authn-browser"; +import ng from "nextgraph"; + +async function main() { + /** + * =========================================================================== + * SETTING UP A CONNECTED LDO DATASTORE WITH 2 PLUGINS + * =========================================================================== + */ + const connectedLdoDataset = createConnectedLdoDataset([ + solidConncetedPlugin, + nextGraphConnectedPlugin + ]); + // Set context to be able to make authenticated requests + connectedLdoDataset.setContext("solid", { fetch }); + const session = await ng.session_in_memory_start( + openedWallet.V0.wallet_id, + openedWallet.V0.personal_site + ); + connectedLdoDataset.setContext("nextGraph", { sessionId: session.sessionId }); + + /** + * =========================================================================== + * READING DATA FROM REMOTE + * =========================================================================== + */ + + // We can get a Solid resource by including a Solid-Compatible URL + const solidResource = solidLdoDataset.getResource( + "https://pod.example.com/profile.ttl" + ); + // Similarly, we can get a NextGraph resource by including a + // NextGraph-Compatible URL + const nextGraphResource = solidLdoDataset.getResource( + "did:ng:o:W6GCQRfQkNTLtSS_2-QhKPJPkhEtLVh-B5lzpWMjGNEA:v:h8ViqyhCYMS2I6IKwPrY6UZi4ougUm1gpM4QnxlmNMQA" + ); + // Optionally, you can provide the name of the specific plugin you want to use + const anotherSolidResource = solidLdoDataset.getResource("", "solid"); + + + // This resource is currently unfetched + console.log(solidResource.isUnfetched()); // Logs true + console.log(nextGraphResource.isUnfetched()); // Logs true + + // So let's fetch it! Running the `read` command will make a request to get + // the WebId. + const solidReadResult = await solidResource.read(); + const ngReadResult = await nextGraphREsource.read(); + + // @ldo/connected will never throw an error. Instead, it will return errors. + // This design decision was made to force you to handle any errors. It may + // seem a bit annoying at first, but it will result in more resiliant code. + // You can easily follow intellisense tooltips to see what kinds of errors + // each action can throw. + if (solidReadResult.isError) { + switch (solidReadResult.type) { + case "serverError": + console.error("The solid server had an error:", solidReadResult.message); + return; + case "noncompliantPodError": + console.error("The Pod responded in a way not compliant with the spec"); + return; + default: + console.error("Some other error was detected:", solidReadResult.message); + } + } + + // When fetching a data resource, read triples will automatically be added to + // the solidLdoDataset. You can access them using Linked Data Objects. In + // the following example we're using a Profile Linked Data Object that was + // generated with the init step. + const profile = connectedLdoDataset + .usingType(FoafProfileShapeType) + .fromSubject("https://pod.example.com/profile#me"); + + // Now you can read "profile" like any JSON. + console.log(profile.name); + + /** + * =========================================================================== + * MODIFYING DATA + * =========================================================================== + */ + + // When we want to modify data the first step is to use the `changeData` + // function. We pass in an object that we want to change (in this case, + // "profile") as well an a list of any resources to which we want those + // changes to be applied (in this case, just the webIdResource). This gives + // us a new variable (conventionally named with a c for "changed") that we can + // write changes to. + const cProfile = changeData(profile, solidResource); + + // We can make changes just like it's regular JSON + cProfile.name = "Captain Cool Dude"; + + // Committing data is as easy as running the "commitData" function. + const commitResult = await commitData(cProfile); + + // Remember to check for and handle errors! We'll keep it short this time. + if (commitResult.isError) throw commitResult; + + /** + * =========================================================================== + * CREATING NEW RESOURCES + * =========================================================================== + */ + + // Let's create some social media posts to be stored on the Solid Pod and in + // NextGraph! We can create new resources using the "createResource" method. + const newSolidResource = await connectedLdoDataset.createResource("solid"); + const newNgResource = await connectedLdoDataset.createResource("nextGraph"); + + // For Solid, you can also create resources at a predefined location + const postContainer = connectedLdoDataset + .getResource("https://pod.example.com/socialPosts/"); + const createPostContainerResult = + await solidSocialPostsContainer.createIfAbsent(); + if (createPostContainerResult.isError) throw createPostContainerResult; + const postResourceResult = + await postContainer.createChildAndOverwrite("post1.ttl"); + if (postResourceResult.isError) throw postResourceResult; + const postResource = postResourceResult.resource; + + // We can also create binary resources with things like images + const imageResourceResult = await postContainer.uploadChildAndOverwrite( + // name of the binary + "image1.svg", + // A blob for the binary + new Blob([``]), + // mime type of the binary + "image/svg+xml", + ); + if (imageResourceResult.isError) throw imageResourceResult; + const imageResource = imageResourceResult.resource; + + /** + * =========================================================================== + * CREATING NEW DATA + * =========================================================================== + */ + + // We create data in a similar way to the way we modify data. We can use the + // "createData" method. + const cPost = solidLdoDataset.createData( + // An LDO ShapeType saying that this is a social media psot + SocialMediaPostShapeType, + // The URI of the post (in this case we'll make it the same as the resource) + postResource.uri, + // The resource we should write it to + postResource, + ); + + // We can add new data + cPost.text = "Check out this bad svg:"; + cPost.image = { "@id": imageResource.uri }; + + // And now we commit data + const newDataResult = await commitData(cPost); + if (newDataResult.isError) throw newDataResult; + + /** + * =========================================================================== + * DELETING RESOURCES + * =========================================================================== + */ + + // Deleting resources can be done with a single method call. In this case, + // the container will be deleted along with all its contained resources + const deleteResult = await postContainer.delete(); + if (deleteResult.isError) throw deleteResult; +} +main(); +``` + +## API Details + +ConnectedLdoDataset + +- [createConnectedLdoDataset](https://ldo.js.org/latest/api/connected/functions/createConnectedLdoDataset/) +- [ConnectedLdoDataset](https://ldo.js.org/latest/api/connected/classes/ConnectedLdoDataset/) +- [ConnectedLdoTransactionDataset](https://ldo.js.org/latest/api/connected/classes/ConnectedLdoTransactionDataset/) +- [IConnectedLdoDataset](https://ldo.js.org/latest/api/connected/interfaces/IConnectedLdoDataset/) + +ConnectedPlugins + +- [ConnectedPlugin](https://ldo.js.org/latest/api/connected/interfaces/ConnectedPlugin/) + +Resources (Manage batching requests) + +- [Resource](https://ldo.js.org/latest/api/connected/interfaces/Resource/) + +Data Functions + +- [changeData](https://ldo.js.org/latest/api/connected/functions/changeData/) +- [commitData](https://ldo.js.org/latest/api/connected/functions/commitData/) + +SuccessResult + +- [SuccessResult](https://ldo.js.org/latest/api/connected/classes/SuccessResult/) +- [AbsentReadSuccess](https://ldo.js.org/latest/api/connected/classes/AbsentReadSuccess/) +- [AggregateSuccess](https://ldo.js.org/latest/api/connected/classes/AggregateSuccess/) +- [IgnoredInvalidUpdateSuccess](https://ldo.js.org/latest/api/connected/classes/IgnoredInvalidUpdateSuccess/) +- [ReadSuccess](https://ldo.js.org/latest/api/connected/classes/ReadSuccess/) +- [ResourceSuccess](https://ldo.js.org/latest/api/connected/classes/ResourceSuccess/) +- [Unfetched](https://ldo.js.org/latest/api/connected/classes/Unfetched/) +- [UpdateDefaultGraphSuccess](https://ldo.js.org/latest/api/connected/classes/UpdateDefaultGraphSuccess/) +- [UpdateSuccess](https://ldo.js.org/latest/api/connected/classes/UpdateSuccess/)å + +ErrorResult + +- [ErrorResult](https://ldo.js.org/latest/api/connected/classes/ErrorResult/) +- [AggregateError](https://ldo.js.org/latest/api/connected/classes/AggregateError/) +- [DisconnectedAttemptingReconnectError](https://ldo.js.org/latest/api/connected/classes/DisconnectedAttemptingReconnectError/) +- [InvalidUriError](https://ldo.js.org/latest/api/connected/classes/InvalidUriError/) +- [ResourceError](https://ldo.js.org/latest/api/connected/classes/ResourceError/) +- [UnexpectedResourceError](https://ldo.js.org/latest/api/connected/classes/UnexpectedResourceError/) +- [UnsupportedNotificationError](https://ldo.js.org/latest/api/connected/classes/UnsupportedNotificationError/) + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/babel.config.js b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/babel.config.js new file mode 100644 index 0000000..721e8b8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/babel.config.js @@ -0,0 +1 @@ +module.exports = { presets: ["@babel/preset-env"] }; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/package.json new file mode 100644 index 0000000..ef4bbe4 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/package.json @@ -0,0 +1,64 @@ +{ + "name": "@ldo/connected", + "version": "1.0.0-alpha.32", + "description": "A library for connecting LDO to resources outside the LDO environment", + "type": "module", + "main": "./dist/cjs/index.cjs", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.cjs" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "rimraf dist && npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --project tsconfig.cjs.json && node ../../scripts/rename-to-cjs.js", + "build:esm": "tsc --project tsconfig.esm.json", + "test": "vitest run --coverage", + "prepublishOnly": " npm run build", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "docs": "typedoc --plugin typedoc-plugin-markdown", + "build:ldo": "ldo build --input test/.shapes --output test/.ldo", + "remove-dist": "rimraf dist/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/solid#readme", + "devDependencies": { + "@ldo/test-solid-server": "^1.0.0-alpha.28", + "@rdfjs/types": "^1.0.1", + "cross-env": "^7.0.3", + "jest-rdf": "^1.8.0", + "rimraf": "^6.0.1", + "ts-jest": "^29.3.2", + "ts-node": "^10.9.1", + "typed-emitter": "^2.1.0", + "typedoc": "^0.25.4", + "typedoc-plugin-markdown": "^3.17.1", + "uuid": "^11.1.0" + }, + "dependencies": { + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/rdf-utils": "^1.0.0-alpha.30" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "gitHead": "840910c56ec3f61416f031cc76771a5673af6757" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/ConnectedLdoBuilder.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/ConnectedLdoBuilder.ts new file mode 100644 index 0000000..52928b0 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/ConnectedLdoBuilder.ts @@ -0,0 +1,43 @@ +import type { LdoBase, ShapeType } from "@ldo/ldo"; +import { LdoBuilder } from "@ldo/ldo"; +import type { IConnectedLdoBuilder } from "./types/IConnectedLdoBuilder.js"; +import type { JsonldDatasetProxyBuilder } from "@ldo/jsonld-dataset-proxy"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import type { LQInput } from "./types/ILinkQuery.js"; +import { ResourceLinkQuery } from "./linkTraversal/ResourceLinkQuery.js"; +import type { ConnectedPlugin } from "./types/ConnectedPlugin.js"; +import type { IConnectedLdoDataset } from "./types/IConnectedLdoDataset.js"; + +export class ConnectedLdoBuilder< + Type extends LdoBase, + Plugins extends ConnectedPlugin[], + > + extends LdoBuilder + implements IConnectedLdoBuilder +{ + protected parentDataset: IConnectedLdoDataset; + + constructor( + parentDataset: IConnectedLdoDataset, + jsonldDatasetProxyBuilder: JsonldDatasetProxyBuilder, + shapeType: ShapeType, + ) { + super(jsonldDatasetProxyBuilder, shapeType); + this.parentDataset = parentDataset; + } + + startLinkQuery>( + startingResource: Plugins[number]["types"]["resource"], + startingSubject: SubjectNode | string, + linkQueryInput: Input, + ): ResourceLinkQuery { + return new ResourceLinkQuery( + this.parentDataset, + this.shapeType, + this, + startingResource, + startingSubject, + linkQueryInput, + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/ConnectedLdoDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/ConnectedLdoDataset.ts new file mode 100644 index 0000000..56f0c49 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/ConnectedLdoDataset.ts @@ -0,0 +1,305 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { LdoBase, ShapeType } from "@ldo/ldo"; +import { LdoDataset, startTransaction } from "@ldo/ldo"; +import type { ConnectedPlugin } from "./types/ConnectedPlugin.js"; +import type { Dataset, DatasetFactory, Quad } from "@rdfjs/types"; +import type { ITransactionDatasetFactory } from "@ldo/subscribable-dataset"; +import { InvalidIdentifierResource } from "./InvalidIdentifierResource.js"; +import type { ConnectedContext } from "./types/ConnectedContext.js"; +import type { + GetResourceReturnType, + IConnectedLdoDataset, +} from "./types/IConnectedLdoDataset.js"; +import { ConnectedLdoTransactionDataset } from "./ConnectedLdoTransactionDataset.js"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import { ConnectedLdoBuilder } from "./ConnectedLdoBuilder.js"; +import jsonldDatasetProxy from "@ldo/jsonld-dataset-proxy"; + +/** + * A ConnectedLdoDataset has all the functionality of a LdoDataset with the + * added functionality of keeping track of fetched remote Resources. + * + * It is recommended to use the { @link createConnectedLdoDataset } to + * initialize this class. + * + * @example + * ```typescript + * import { createConnectedLdoDataset } from "@ldo/connected"; + * import { ProfileShapeType } from "./.ldo/profile.shapeTypes.ts" + * + * // At least one plugin needs to be provided to a ConnectedLdoDataset. In this + * // example we'll use both the Solid and NextGraph plugins. + * import { solidConnectedPlugin } from "@ldo/connected-solid"; + * import { nextGraphConnectedPlugin } from "@ldo/connected-nextgraph"; + * + * // ... + * + * const connectedLdoDataset = createConnectedLdoDataset([ + * solidConnectedPlugin, + * nextGraphConnectedPlugin + * ]); + * + * const profileDocument = connectedLdoDataset + * .getResource("https://example.com/profile"); + * await profileDocument.read(); + * + * const profile = connectedLdoDataset + * .using(ProfileShapeType) + * .fromSubject("https://example.com/profile#me"); + * ``` + */ +export class ConnectedLdoDataset< + Plugins extends ConnectedPlugin[], + > + extends LdoDataset + implements IConnectedLdoDataset +{ + /** + * @internal + * + * A list of plugins used by this dataset + */ + private plugins: Plugins; + /** + * @internal + * + * A mapping between a resource URI and a resource + */ + protected resourceMap: Map; + + /** + * @internal + * + * Context for each plugin (usually utilities for authentication) + */ + protected context: ConnectedContext; + + /** + * It is recommended to use the `createConnectedLdoDataset` function to + * instantiate a ConnectedLdoDataset. + * + * @param plugins An array of plugins for each platform to connect to + * @param datasetFactory Creates Datasets + * @param transactionDatasetFactory Creates Transaction Datasets + * @param initialDataset Initial quads + */ + constructor( + plugins: Plugins, + datasetFactory: DatasetFactory, + transactionDatasetFactory: ITransactionDatasetFactory, + initialDataset?: Dataset, + ) { + super(datasetFactory, transactionDatasetFactory, initialDataset); + this.plugins = plugins; + this.resourceMap = new Map(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore this is a builder. It will eventually match + this.context = { + dataset: this, + }; + this.plugins.forEach( + (plugin) => (this.context[plugin.name] = plugin.initialContext), + ); + } + + /** + * @internal + * + * A helper function to return a plugin based in the plugin name and uri. + */ + private getValidPlugin( + uri: string, + pluginName?: string, + ): Plugins[number] | undefined { + // Check for which plugins this uri is valid + const validPlugins = this.plugins + .filter((plugin) => plugin.isUriValid(uri)) + .filter((plugin) => (pluginName ? pluginName === plugin.name : true)); + if (validPlugins.length === 0) { + return undefined; + } else if (validPlugins.length > 1) { + // TODO: LDO is currently not architected to have an ID valid in multiple + // protocols. This will need to be refactored if this is ever the case. + throw new Error( + "LDO Connect does not currently support two plugins with overlappng uris", + ); + } + return validPlugins[0]; + } + + /** + * Retireves a representation of a Resource at the given URI. This resource + * represents the current state of the resource: whether it is currently + * fetched or in the process of fetching as well as some information about it. + * + * @param uri - the URI of the resource + * @param pluginName - optionally, force this function to choose a specific + * plugin to use rather than perform content negotiation. + * + * @returns a Resource + * + * @example + * ```typescript + * const profileDocument = connectedLdoDataset + * .getResource("https://example.com/profile"); + * ``` + */ + getResource< + Name extends Plugins[number]["name"], + Plugin extends Extract, + UriType extends string, + >(uri: UriType, pluginName?: Name): GetResourceReturnType { + const plugin = this.getValidPlugin(uri, pluginName); + if (!plugin) return new InvalidIdentifierResource(uri) as any; + const normalizedUri = plugin.normalizeUri?.(uri) ?? uri; + + let resource = this.resourceMap.get(normalizedUri); + if (!resource) { + resource = plugin.getResource(uri, this.context); + this.resourceMap.set(normalizedUri, resource); + } + // HACK: cast to any + return resource as any; + } + + getResources(): GetResourceReturnType[] { + return Array.from(this.resourceMap.values()); + } + + getFetchedResources(): GetResourceReturnType[] { + return this.getResources().filter((resource) => resource.isFetched()); + } + + /** + * Generates a random uri and creates a resource. + * + * @param pluginName - A string name for the platform you'd like to create + * the resource on. + * @param createResourceOptions - Some set of options specific to the plugin + * you've selected. + * @returns A created resource or an error + * + * @example + * ```typescript + * const profileDocument = await connectedLdoDataset + * .createResource("solid"); + * ``` + */ + async createResource< + Name extends Plugins[number]["name"], + Plugin extends Extract, + >( + pluginName: Name, + createResourceOptions?: Plugin["types"]["createResourceOptions"], + ): Promise> { + const validPlugin = this.plugins.find( + (plugin) => pluginName === plugin.name, + )!; + const newResourceResult = await validPlugin.createResource( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore I have no idea why this doesn't work + this.context, + createResourceOptions, + ); + // HACK: cast to any + if (newResourceResult.isError) return newResourceResult as any; + this.resourceMap.set(newResourceResult.uri, newResourceResult); + // HACK: cast to any + return newResourceResult as any; + } + + /** + * Removes a resource from local memory + * @param uri - the URI of the resource to remove + * @returns true if the resource was present before removal + * + * @example + * ```typescript + * connectedLdoDataset.forgetResource("https://example.com/resource.ttl"); + * ``` + */ + forgetResource(uri: string): boolean { + const plugin = this.getValidPlugin(uri); + const normalizedUri = plugin?.normalizeUri?.(uri) ?? uri; + return this.resourceMap.delete(normalizedUri); + } + + /** + * Removes all resources from memory + * + * @example + * ```typescript + * connectedLdoDataset.forgetAllResources(); + * ``` + */ + forgetAllResources(): void { + this.resourceMap.clear(); + } + + /** + * Shorthand for connectedLdoDataset + * .usingType(shapeType) + * .write(...resources.map((r) => r.uri)) + * .fromSubject(subject); + * @param shapeType - The shapetype to represent the data + * @param subject - A subject URI + * @param resources - The resources changes to should written to + * + * @example + * ```typescript + * import { ProfielShapeType } from "./.ldo/foafProfile.shapeType.ts" + * + * const resource = connectedLdoDataset + * .getResource("https://example.com/profile"); + * const profile = connectedLdoDataset.createData( + * ProfileShapeType, + * "https://example.com/profile#me", + * resource + * ); + * ``` + */ + createData( + shapeType: ShapeType, + subject: string | SubjectNode, + resource: Plugins[number]["types"]["resource"], + ...additionalResources: Plugins[number]["types"]["resource"][] + ): Type { + const resources = [resource, ...additionalResources]; + const linkedDataObject = this.usingType(shapeType) + .write(...resources.map((r) => r.uri)) + .fromSubject(subject); + startTransaction(linkedDataObject); + return linkedDataObject; + } + + /** + * Sets conetext for a specific plugin + * + * @param pluginName - the name of the plugin + * @param context - the context for this specific plugin + */ + setContext< + Name extends Plugins[number]["name"], + Plugin extends Extract, + >(pluginName: Name, context: Plugin["types"]["context"]) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + this.context[pluginName] = { ...this.context[pluginName], ...context }; + } + + public usingType( + shapeType: ShapeType, + ): ConnectedLdoBuilder { + const proxyBuilder = jsonldDatasetProxy(this, shapeType.context); + return new ConnectedLdoBuilder(this, proxyBuilder, shapeType); + } + + public startTransaction(): ConnectedLdoTransactionDataset { + return new ConnectedLdoTransactionDataset( + this, + this.context, + this.datasetFactory, + this.transactionDatasetFactory, + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/ConnectedLdoTransactionDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/ConnectedLdoTransactionDataset.ts new file mode 100644 index 0000000..f0d5b67 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/ConnectedLdoTransactionDataset.ts @@ -0,0 +1,250 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { LdoBase, ShapeType } from "@ldo/ldo"; +import { LdoTransactionDataset } from "@ldo/ldo"; +import type { DatasetFactory, Quad } from "@rdfjs/types"; +import { + updateDatasetInBulk, + type ITransactionDatasetFactory, +} from "@ldo/subscribable-dataset"; +import type { DatasetChanges, GraphNode } from "@ldo/rdf-utils"; +import type { ConnectedPlugin } from "./types/ConnectedPlugin.js"; +import type { ConnectedContext } from "./types/ConnectedContext.js"; +import type { + GetResourceReturnType, + IConnectedLdoDataset, +} from "./types/IConnectedLdoDataset.js"; +import { splitChangesByGraph } from "./util/splitChangesByGraph.js"; +import type { IgnoredInvalidUpdateSuccess } from "./results/success/UpdateSuccess.js"; +import { UpdateDefaultGraphSuccess } from "./results/success/UpdateSuccess.js"; +import type { ErrorResult } from "./results/error/ErrorResult.js"; +import { AggregateError } from "./results/error/ErrorResult.js"; +import type { + AggregateSuccess, + SuccessResult, +} from "./results/success/SuccessResult.js"; +import { ConnectedLdoBuilder } from "./ConnectedLdoBuilder.js"; +import jsonldDatasetProxy from "@ldo/jsonld-dataset-proxy"; + +/** + * A ConnectedLdoTransactionDataset has all the functionality of a + * ConnectedLdoDataset and represents a transaction to the parent + * ConnectedLdoDataset. + * + * It is recommended to use the `startTransaction` method on a SolidLdoDataset + * to initialize this class + * + * @example + * ```typescript + * import { createConnectedLdoDataset } from "@ldo/connected"; + * import { ProfileShapeType } from "./.ldo/profile.shapeTypes.ts" + * import { solidConnectedPlugin } from "connected-solid"; + * + * // ... + * + * const connectedLdoDataset = createConnectedLdoDataset([ + * solidConnectedPlugin + * ]); + * + * const profileDocument = connectedLdoDataset + * .getResource("https://example.com/profile"); + * await profileDocument.read(); + * + * const transaction = connectedLdoDataset.startTransaction(); + * + * const profile = transaction + * .using(ProfileShapeType) + * .fromSubject("https://example.com/profile#me"); + * profile.name = "Some Name"; + * const result = await transaction.commitToRemote(); + * if (result.isError) { + * // handle error + * } + * ``` + */ +export class ConnectedLdoTransactionDataset + extends LdoTransactionDataset + implements IConnectedLdoDataset +{ + public instanceId: number; + static nextId = 0; + /** + * @internal + */ + public context: ConnectedContext; + + /** + * @internal + * Serves no purpose + */ + protected resourceMap: Map = + new Map(); + + /** + * @param context - SolidLdoDatasetContext + * @param datasetFactory - An optional dataset factory + * @param transactionDatasetFactory - A factory for creating transaction datasets + * @param initialDataset - A set of triples to initialize this dataset + */ + constructor( + parentDataset: IConnectedLdoDataset, + context: ConnectedContext, + datasetFactory: DatasetFactory, + transactionDatasetFactory: ITransactionDatasetFactory, + ) { + super(parentDataset, datasetFactory, transactionDatasetFactory); + this.context = context; + this.instanceId = ConnectedLdoTransactionDataset.nextId++; + } + + getResource< + Name extends Plugins[number]["name"], + Plugin extends Extract, + UriType extends string, + >(uri: UriType, pluginName?: Name): GetResourceReturnType { + return this.context.dataset.getResource(uri, pluginName); + } + + getResources(): Plugins[number]["types"]["resource"][] { + return this.context.dataset.getResources(); + } + + getFetchedResources(): Plugins[number]["types"]["resource"][] { + return this.context.dataset.getFetchedResources(); + } + + createResource< + Name extends Plugins[number]["name"], + Plugin extends Extract, + >(name: Name): Promise> { + return this.context.dataset.createResource(name); + } + + setContext< + Name extends Plugins[number]["name"], + Plugin extends Extract, + >(name: Name, context: Plugin["types"]["context"]): void { + this.context.dataset.setContext(name, context); + } + + forgetResource(uri: string): boolean { + return this.context.dataset.forgetResource(uri); + } + forgetAllResources(): void { + this.context.dataset.forgetAllResources(); + } + + public startTransaction(): ConnectedLdoTransactionDataset { + return new ConnectedLdoTransactionDataset( + this, + this.context, + this.datasetFactory, + this.transactionDatasetFactory, + ); + } + + /** + * Commits all changes made in this transaction to the remote connected + * platforms as well as the parent dataset. + * + * @returns A success or failure + * + * @example + * ```typescript + * import { createConnectedLdoDataset } from "@ldo/connected"; + * import { ProfileShapeType } from "./.ldo/profile.shapeTypes.ts" + * import { solidConnectedPlugin } from "connected-solid"; + * + * // ... + * + * const connectedLdoDataset = createConnectedLdoDataset([solidConnectedPlugin]); + * + * const profileDocument = connectedLdoDataset + * .getResource("https://example.com/profile"); + * await profileDocument.read(); + * + * const transaction = connectedLdoDataset.startTransaction(); + * + * const profile = transaction + * .using(ProfileShapeType) + * .fromSubject("https://example.com/profile#me"); + * profile.name = "Some Name"; + * const result = await transaction.commitToRemote(); + * if (result.isError) { + * // handle error + * } + * ``` + */ + async commitToRemote(): Promise< + | AggregateSuccess< + | Extract< + Awaited>, + { isError: false } + > + | UpdateDefaultGraphSuccess + | IgnoredInvalidUpdateSuccess + > + | AggregateError< + Extract< + Awaited>, + { isError: true } + > + > + > { + const changes = this.getChanges(); + const changesByGraph = splitChangesByGraph(changes); + + // Iterate through all changes by graph in + const results: [ + GraphNode, + DatasetChanges, + ( + | Awaited> + | IgnoredInvalidUpdateSuccess + | UpdateDefaultGraphSuccess + ), + ][] = await Promise.all( + Array.from(changesByGraph.entries()).map( + async ([graph, datasetChanges]) => { + if (graph.termType === "DefaultGraph") { + // Undefined means that this is the default graph + updateDatasetInBulk(this.parentDataset, datasetChanges); + return [graph, datasetChanges, new UpdateDefaultGraphSuccess()]; + } + const resource = this.getResource( + graph.value, + ) as Plugins[number]["types"]["resource"]; + const updateResult = (await resource.update( + datasetChanges, + )) as Awaited< + ReturnType + >; + return [graph, datasetChanges, updateResult]; + }, + ), + ); + + // If one has errored, return error + console.log(results); + const errors = ( + results.map((result) => result[2]) as (SuccessResult | ErrorResult)[] + ).filter((result): result is ErrorResult => result.isError); + + if (errors.length > 0) { + // HACK: Cast to Any + return new AggregateError(errors) as any; + } + return { + isError: false, + type: "aggregateSuccess", + // HACK: Cast to Any + results: results.map((result) => result[2]) as any, + }; + } + + public usingType( + shapeType: ShapeType, + ): ConnectedLdoBuilder { + const proxyBuilder = jsonldDatasetProxy(this, shapeType.context); + return new ConnectedLdoBuilder(this, proxyBuilder, shapeType); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/InvalidIdentifierResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/InvalidIdentifierResource.ts new file mode 100644 index 0000000..93fd1b3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/InvalidIdentifierResource.ts @@ -0,0 +1,66 @@ +import EventEmitter from "events"; +import type { Resource, ResourceEventEmitter } from "./Resource.js"; +import { InvalidUriError } from "./results/error/InvalidUriError.js"; + +/** + * A resource that represents a URI that does not have a valid URI given the + * plugins available to the ConnectedLdoDataset. + */ +export class InvalidIdentifierResource + extends (EventEmitter as new () => ResourceEventEmitter) + implements Resource +{ + public readonly uri: string; + public readonly type = "InvalidIdentifierResource" as const; + public status: InvalidUriError; + public readonly isError = false as const; + + constructor(uri: string) { + super(); + this.uri = uri; + this.status = new InvalidUriError(this); + } + + isLoading(): boolean { + return false; + } + isFetched(): boolean { + return false; + } + isUnfetched(): boolean { + return true; + } + isDoingInitialFetch(): boolean { + return false; + } + isPresent(): boolean { + return false; + } + isAbsent(): boolean { + return true; + } + isSubscribedToNotifications(): boolean { + return false; + } + async read(): Promise> { + return this.status; + } + async readIfUnfetched(): Promise> { + return this.status; + } + async update(): Promise> { + return this.status; + } + async subscribeToNotifications(_callbacks?: { + onNotification: (message: unknown) => void; + onNotificationError: (err: Error) => void; + }): Promise { + throw new Error("Cannot subscribe to an invalid resource."); + } + async unsubscribeFromNotifications(_subscriptionId: string): Promise { + // Do Nothing + } + async unsubscribeFromAllNotifications(): Promise { + // Do Nothing + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/Resource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/Resource.ts new file mode 100644 index 0000000..60b0489 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/Resource.ts @@ -0,0 +1,105 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { ConnectedResult } from "./results/ConnectedResult.js"; +import type { DatasetChanges } from "@ldo/rdf-utils"; +import type { + IgnoredInvalidUpdateSuccess, + UpdateSuccess, +} from "./results/success/UpdateSuccess.js"; +import type { ResourceError } from "./results/error/ErrorResult.js"; +import type { ReadSuccess } from "./results/success/ReadSuccess.js"; + +// eslint-disable-next-line @typescript-eslint/consistent-type-imports +export type ResourceEventEmitter = import("typed-emitter").default<{ + update: () => void; + notification: () => void; +}>; + +/** + * A resource is an abstract representation for a group of data on a remote + * platform. For example, "Solid" has resources that could be containers or + * leafs. + */ +export interface Resource + extends ResourceEventEmitter { + /** + * Indicates that this is not an error + */ + readonly isError: false; + /** + * The uri of the resource + */ + readonly uri: UriType; + /** + * The name of the resource. For example "NextGraphResource" + */ + readonly type: string; + /** + * The most recent result from one of the resource methods. + */ + status: ConnectedResult; + /** + * Returns true if this resource is currently loading. + */ + isLoading(): boolean; + /** + * Returns true if this resource has performed a fetch at least once + */ + isFetched(): boolean; + /** + * Returns true if this reosource has not performed a fetch at least once + */ + isUnfetched(): boolean; + /** + * Returns true if this resource is currently performing its first fetch + */ + isDoingInitialFetch(): boolean; + /** + * Returns true if this resource exists. Returns undefined if that is + * currently unknown. + */ + isPresent(): boolean | undefined; + /** + * Returns true if its confirmed that this resource doesn't exist. Returns + * undefined if that is currently unknown. + */ + isAbsent(): boolean | undefined; + /** + * Returns true if this resource is currently subscribed to notifications. + */ + isSubscribedToNotifications(): boolean; + /** + * Fetches the resource. + */ + read(): Promise | ResourceError>; + /** + * Fetches the resource if it hasn't been fetched yet. + */ + readIfUnfetched(): Promise | ResourceError>; + /** + * Applies updates to this resource. + * @param datasetChanges - A list of changes to data + */ + update( + datasetChanges: DatasetChanges, + ): Promise< + UpdateSuccess | IgnoredInvalidUpdateSuccess | ResourceError + >; + /** + * Begins a subscription to this resource + * @param callbacks - optional set of callbacks to be called when this + * resource is updated + */ + subscribeToNotifications(callbacks?: { + onNotification: (message: any) => void; + onNotificationError: (err: Error) => void; + }): Promise; + /** + * Unsubscribes from notifications on this resource + * @param subscriptionId the Id of the subscription to unsubscribe + */ + unsubscribeFromNotifications(subscriptionId: string): Promise; + /** + * Unsubscribes from all notifications. + */ + unsubscribeFromAllNotifications(): Promise; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/createConntectedLdoDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/createConntectedLdoDataset.ts new file mode 100644 index 0000000..0445852 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/createConntectedLdoDataset.ts @@ -0,0 +1,36 @@ +import { createDatasetFactory } from "@ldo/dataset"; +import { ConnectedLdoDataset } from "./ConnectedLdoDataset.js"; +import type { ConnectedPlugin } from "./types/ConnectedPlugin.js"; +import { createTransactionDatasetFactory } from "@ldo/subscribable-dataset"; + +/** + * Creates a ConnectedLdoDataset + * @param plugins - An array of plugins for platforms to connect to + * @returns - A ConnectedLdoDataset + * + * @example + * ```typescript + * import { createConnectedLdoDataset } from "@ldo/connected"; + * + * // At least one plugin needs to be provided to a ConnectedLdoDataset. In this + * // example we'll use both the Solid and NextGraph plugins. + * import { solidConnectedPlugin } from "@ldo/connected-solid"; + * import { nextGraphConnectedPlugin } from "@ldo/connected-nextgraph"; + * + * // ... + * + * const connectedLdoDataset = createConnectedLdoDataset([ + * solidConnectedPlugin, + * nextGraphConnectedPlugin + * ]); + * ``` + */ +export function createConnectedLdoDataset( + plugins: Plugins, +): ConnectedLdoDataset { + return new ConnectedLdoDataset( + plugins, + createDatasetFactory(), + createTransactionDatasetFactory(), + ); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/index.ts new file mode 100644 index 0000000..138981c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/index.ts @@ -0,0 +1,36 @@ +export * from "./ConnectedLdoBuilder.js"; +export * from "./ConnectedLdoDataset.js"; +export * from "./ConnectedLdoTransactionDataset.js"; + +export * from "./Resource.js"; +export * from "./InvalidIdentifierResource.js"; +export * from "./methods.js"; +export * from "./createConntectedLdoDataset.js"; + +export * from "./types/ConnectedContext.js"; +export * from "./types/ConnectedPlugin.js"; +export * from "./types/IConnectedLdoDataset.js"; +export * from "./types/IConnectedLdoBuilder.js"; +export * from "./types/ILinkQuery.js"; + +export * from "./util/splitChangesByGraph.js"; + +export * from "./results/ConnectedResult.js"; +export * from "./results/error/ErrorResult.js"; +export * from "./results/error/InvalidUriError.js"; +export * from "./results/error/NotificationErrors.js"; +export * from "./results/success/SuccessResult.js"; +export * from "./results/success/Unfetched.js"; +export * from "./results/success/ReadSuccess.js"; +export * from "./results/success/UpdateSuccess.js"; + +export * from "./notifications/NotificationSubscription.js"; +export * from "./notifications/SubscriptionCallbacks.js"; + +export * from "./trackingProxy/TrackingProxyContext.js"; +export * from "./trackingProxy/TrackingSetProxy.js"; +export * from "./trackingProxy/TrackingSubjectProxy.js"; +export * from "./trackingProxy/createTrackingProxy.js"; + +export * from "./linkTraversal/ResourceLinkQuery.js"; +export * from "./linkTraversal/exploreLinks.js"; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/linkTraversal/ResourceLinkQuery.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/linkTraversal/ResourceLinkQuery.ts new file mode 100644 index 0000000..2960c66 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/linkTraversal/ResourceLinkQuery.ts @@ -0,0 +1,287 @@ +import type { LdoBase, ShapeType } from "@ldo/ldo"; +import type { + ExpandDeep, + ILinkQuery, + LQInput, + LQReturn, +} from "../types/ILinkQuery.js"; +import type { ConnectedPlugin } from "../types/ConnectedPlugin.js"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import { exploreLinks } from "./exploreLinks.js"; +import type { IConnectedLdoDataset } from "../types/IConnectedLdoDataset.js"; +import type { IConnectedLdoBuilder } from "../types/IConnectedLdoBuilder.js"; +import { v4 } from "uuid"; +import type { nodeEventListener } from "@ldo/subscribable-dataset"; +import type { Quad } from "@rdfjs/types"; + +/** + * Represents a query over multiple datasources and constituting muliple + * resources. + * + * @example + * ```typescript + * import { ProfileShapeType } from "./.ldo/Profile.shapeType.ts"; + * + * // Create a link query + * const linkQuery = ldoDataset + * .usingType(ProfileShapeType) + * .startLinkQuery( + * "http://example.com/profile/card", + * "http://example.com/profile/card#me", + * { + * name: true, + * knows: { + * name: true, + * }, + * }, + * } + * ); + * // Susbscribe to this link query, automaticically updating the dataset when + * // something from the link query is changed. + * await linkQuery.subscribe(); + * ``` + */ +export class ResourceLinkQuery< + Type extends LdoBase, + QueryInput extends LQInput, + Plugins extends ConnectedPlugin[], +> implements ILinkQuery +{ + protected previousTransactionId: string = "INIT"; + + // Resource Subscriptions uri -> unsubscribeId + protected activeResourceSubscriptions: Record = {}; + // Unsubscribe IDs for this ResourceLinkQuery + protected thisUnsubscribeIds = new Set(); + + protected curOnDataChanged: nodeEventListener | undefined; + + protected resourcesWithSubscriptionInProgress: Record< + string, + Promise | undefined + > = {}; + + /** + * @internal + * @param parentDataset The dataset for which this link query is a part + * @param shapeType A ShapeType for the link query to follow + * @param ldoBuilder An LdoBuilder associated with the dataset + * @param startingResource The resource to explore first in the link query + * @param startingSubject The starting point of the link query + * @param linkQueryInput A definition of the link query + */ + constructor( + protected parentDataset: IConnectedLdoDataset, + protected shapeType: ShapeType, + protected ldoBuilder: IConnectedLdoBuilder, + protected startingResource: Plugins[number]["types"]["resource"], + protected startingSubject: SubjectNode | string, + protected linkQueryInput: QueryInput, + ) {} + + /** + * Runs this link query, returning the result + * @param options Options for how to run the link query + * @returns A subset of the ShapeType as defined by the LinkQuery + * + * @example + * ``` + * import { ProfileShapeType } from "./.ldo/Profile.shapeType.ts"; + * + * // Create a link query + * const linkQuery = ldoDataset + * .usingType(ProfileShapeType) + * .startLinkQuery( + * "http://example.com/profile/card", + * "http://example.com/profile/card#me", + * { + * name: true, + * knows: { + * name: true, + * }, + * }, + * } + * ); + * // Susbscribe to this link query, automaticically updating the dataset when + * // something from the link query is changed. + * const result = await linkQuery.read(); + * console.log(result.name); + * result.knows.forEach((person) => console.log(person.name)); + * // The following will type-error. Despite "phone" existing on a Profile, + * // it was not covered by the link query. + * console.log(result.phone); + * ``` + */ + async run(options?: { + reload?: boolean; + }): Promise>> { + await exploreLinks( + this.parentDataset, + this.shapeType, + this.startingResource, + this.startingSubject, + this.linkQueryInput, + { shouldRefreshResources: options?.reload }, + ); + return this.fromSubject(); + } + + /** + * Subscribes to the data defined by the link query, updating the dataset if + * any changes are made. + * @returns An unsubscribeId + * + * @example + * ``` + * import { ProfileShapeType } from "./.ldo/Profile.shapeType.ts"; + * + * // Create a link query + * const linkQuery = ldoDataset + * .usingType(ProfileShapeType) + * .startLinkQuery( + * "http://example.com/profile/card", + * "http://example.com/profile/card#me", + * { + * name: true, + * knows: { + * name: true, + * }, + * }, + * } + * ); + * // Susbscribe to this link query, automaticically updating the dataset when + * // something from the link query is changed. + * const unsubscribeId = await linkQuery.subscribe(); + * + * // Now, let's imagine the following triple was added to + * "http://example.com/profile/card": + * + * Because you're subscribed, the dataset will automatically be updated. + * + * // End subscription + * linkQuery.unsubscribe(unsubscribeId); + * ``` + */ + async subscribe(): Promise { + const subscriptionId = v4(); + this.thisUnsubscribeIds.add(subscriptionId); + // If there's already a registered onDataChange, we don't need to make a new + // on for this new subscription + if (this.curOnDataChanged) { + return subscriptionId; + } + this.curOnDataChanged = async ( + _changes, + transactionId: string, + _triggering, + ) => { + // Set a transaction Id, so that we only trigger one re-render + if (transactionId === this.previousTransactionId) return; + this.previousTransactionId = transactionId; + // Remove previous registration + this.parentDataset.removeListenerFromAllEvents(this.curOnDataChanged!); + + // Explore the links, with a subscription to re-explore the links if any + // covered information changes + const resourcesToUnsubscribeFrom = new Set( + Object.keys(this.activeResourceSubscriptions), + ); + + // Only add the listeners if we're currently subscribed + const exploreOptions = this.curOnDataChanged + ? { + onCoveredDataChanged: this.curOnDataChanged, + onResourceEncountered: async (resource) => { + // Wait for the the in progress registration to complete. Once it + // is complete, you're subscribed, so we can remove this from the + // resources to unsubscribe from. + if (this.resourcesWithSubscriptionInProgress[resource.uri]) { + await this.resourcesWithSubscriptionInProgress[resource.uri]; + resourcesToUnsubscribeFrom.delete(resource.uri); + return; + } + // No need to do anything if we're already subscribed + if (resourcesToUnsubscribeFrom.has(resource.uri)) { + resourcesToUnsubscribeFrom.delete(resource.uri); + return; + } + // Otherwise begin the subscription + let resolve; + this.resourcesWithSubscriptionInProgress[resource.uri] = + new Promise((res) => { + resolve = res; + }); + const unsubscribeId = await resource.subscribeToNotifications(); + this.activeResourceSubscriptions[resource.uri] = unsubscribeId; + // Unsubscribe in case unsubscribe call came in mid subscription + if (!this.curOnDataChanged) { + await this.unsubscribeFromResource(resource.uri); + } + resolve(); + this.resourcesWithSubscriptionInProgress[resource.uri] = + undefined; + }, + } + : {}; + await exploreLinks( + this.parentDataset, + this.shapeType, + this.startingResource, + this.startingSubject, + this.linkQueryInput, + exploreOptions, + ); + // Clean up unused subscriptions + await Promise.all( + Array.from(resourcesToUnsubscribeFrom).map(async (uri) => + this.unsubscribeFromResource(uri), + ), + ); + }; + await this.curOnDataChanged({}, "BEGIN_SUB", [null, null, null, null]); + return subscriptionId; + } + + private async unsubscribeFromResource(uri) { + const resource = this.parentDataset.getResource(uri); + const unsubscribeId = this.activeResourceSubscriptions[uri]; + delete this.activeResourceSubscriptions[uri]; + await resource.unsubscribeFromNotifications(unsubscribeId); + } + + private async fullUnsubscribe(): Promise { + if (this.curOnDataChanged) { + this.parentDataset.removeListenerFromAllEvents(this.curOnDataChanged); + this.curOnDataChanged = undefined; + } + await Promise.all( + Object.keys(this.activeResourceSubscriptions).map(async (uri) => { + this.unsubscribeFromResource(uri); + }), + ); + } + + async unsubscribe(unsubscribeId: string): Promise { + this.thisUnsubscribeIds.delete(unsubscribeId); + if (this.thisUnsubscribeIds.size === 0) { + await this.fullUnsubscribe(); + } + } + + async unsubscribeAll() { + this.thisUnsubscribeIds.clear(); + await this.fullUnsubscribe(); + } + + fromSubject(): ExpandDeep> { + return this.ldoBuilder.fromSubject( + this.startingSubject, + ) as unknown as ExpandDeep>; + } + + getSubscribedResources(): Plugins[number]["types"]["resource"][] { + return Object.keys(this.activeResourceSubscriptions).map((uri) => + this.parentDataset.getResource(uri), + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/linkTraversal/exploreLinks.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/linkTraversal/exploreLinks.ts new file mode 100644 index 0000000..579c612 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/linkTraversal/exploreLinks.ts @@ -0,0 +1,162 @@ +import type { LdoBase, ShapeType } from "@ldo/ldo"; +import type { ConnectedPlugin } from "../types/ConnectedPlugin.js"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import type { LQInput } from "../types/ILinkQuery.js"; +import { BasicLdSet } from "@ldo/jsonld-dataset-proxy"; +import type { IConnectedLdoDataset } from "../types/IConnectedLdoDataset.js"; +import { createTrackingProxyBuilder } from "../trackingProxy/createTrackingProxy.js"; +import type { nodeEventListener } from "@ldo/subscribable-dataset"; +import type { Quad } from "@rdfjs/types"; + +/** + * @internal + */ +interface ExploreLinksOptions { + onResourceEncountered?: ( + resource: Plugins[number]["types"]["resource"], + ) => Promise; + onCoveredDataChanged?: nodeEventListener; + shouldRefreshResources?: boolean; +} + +/** + * @internal + */ +export async function exploreLinks< + Type extends LdoBase, + Plugins extends ConnectedPlugin[], +>( + dataset: IConnectedLdoDataset, + shapeType: ShapeType, + startingResource: Plugins[number]["types"]["resource"], + startingSubject: SubjectNode | string, + queryInput: LQInput, + options?: ExploreLinksOptions, +): Promise { + // Do an initial check of the resources. + const readResult = options?.shouldRefreshResources + ? await startingResource.read() + : await startingResource.readIfUnfetched(); + if (readResult.isError) return; + + if (options?.onResourceEncountered) + await options?.onResourceEncountered(startingResource); + + const proxyBuilder = options?.onCoveredDataChanged + ? createTrackingProxyBuilder( + dataset, + shapeType, + options?.onCoveredDataChanged, + ) + : dataset.usingType(shapeType); + const ldObject = proxyBuilder.fromSubject(startingSubject); + + const encounteredDuringThisExploration = new Set([ + startingResource.uri, + ]); + + // Recursively explore the rest + await exploreLinksRecursive( + dataset, + ldObject, + queryInput, + encounteredDuringThisExploration, + options, + ); +} + +export async function exploreLinksRecursive< + Type extends LdoBase, + Plugins extends ConnectedPlugin[], +>( + dataset: IConnectedLdoDataset, + ldObject: Type, + queryInput: LQInput, + encounteredDuringThisExploration: Set, + options?: ExploreLinksOptions, +): Promise { + const shouldFetch = shouldFetchResource( + dataset, + ldObject, + queryInput, + encounteredDuringThisExploration, + ); + const resourceToFetch = dataset.getResource(ldObject["@id"]); + if (shouldFetch) { + const readResult = options?.shouldRefreshResources + ? await resourceToFetch.read() + : await resourceToFetch.readIfUnfetched(); + // If there was an error with the read, the traversal is done. + if (readResult.isError) { + return; + } + } + if (!encounteredDuringThisExploration.has(resourceToFetch.uri)) { + encounteredDuringThisExploration.add(resourceToFetch.uri); + if (options?.onResourceEncountered) + await options.onResourceEncountered(resourceToFetch); + } + // Recurse through the other elemenets + await Promise.all( + Object.entries(queryInput).map(async ([queryKey, queryValue]) => { + if ( + queryValue != undefined && + queryValue !== true && + ldObject[queryKey] != undefined + ) { + if (ldObject[queryKey] instanceof BasicLdSet) { + await Promise.all( + ldObject[queryKey].map(async (item) => { + await exploreLinksRecursive( + dataset, + item, + queryValue, + encounteredDuringThisExploration, + options, + ); + }), + ); + } else { + await exploreLinksRecursive( + dataset, + ldObject[queryKey], + queryValue, + encounteredDuringThisExploration, + options, + ); + } + } + }), + ); +} + +/** + * Determines if a resource needs to be fetched based on given data + */ +export function shouldFetchResource< + Type extends LdoBase, + Plugins extends ConnectedPlugin[], +>( + dataset: IConnectedLdoDataset, + ldObject: Type, + queryInput: LQInput, + encounteredDuringThisExploration: Set, +): boolean { + const linkedResourceUri: string | undefined = ldObject["@id"]; + // If it's a blank node, no need to fetch + if (!linkedResourceUri) return false; + const linkedResource = dataset.getResource(linkedResourceUri); + // If we've already explored the resource in this exporation, do not fetch + if (encounteredDuringThisExploration.has(linkedResource.uri)) return false; + + return Object.entries(queryInput).some(([queryKey, queryValue]) => { + // If value is undefined then no need to fetch + if (!queryValue) return false; + // Always fetch if there's a set in the object + if (ldObject[queryKey] instanceof BasicLdSet) return true; + // Fetch if a singleton set is not present + if (ldObject[queryKey] == undefined) return true; + // Otherwise no need t to fetch + return false; + }); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/methods.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/methods.ts new file mode 100644 index 0000000..33ca8f7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/methods.ts @@ -0,0 +1,94 @@ +import { startTransaction, type LdoBase, write, getDataset } from "@ldo/ldo"; +import type { Quad } from "@rdfjs/types"; +import { _proxyContext, getProxyFromObject } from "@ldo/jsonld-dataset-proxy"; +import type { SubscribableDataset } from "@ldo/subscribable-dataset"; +import type { Resource } from "./Resource.js"; +import type { ConnectedLdoTransactionDataset } from "./ConnectedLdoTransactionDataset.js"; +import type { + AggregateSuccess, + SuccessResult, +} from "./results/success/SuccessResult.js"; +import type { + AggregateError, + ErrorResult, +} from "./results/error/ErrorResult.js"; + +/** + * Begins tracking changes to eventually commit. + * + * @param input - A linked data object to track changes on + * @param resource - A resource that all additions will eventually be committed to + * @param additionalResources - Any additional resources that changes will eventually be committed to + * + * @returns A transactable Linked Data Object + * + * @example + * ```typescript + * import { changeData } from "@ldo/connected"; + * + * // ... + * + * const profile = connectedLdoDataset + * .using(ProfileShapeType) + * .fromSubject("https://example.com/profile#me"); + * const resource = connectedLdoDataset.getResource("https://example.com/profile"); + * + * const cProfile = changeData(profile, resource); + * cProfile.name = "My New Name"; + * const result = await commitData(cProfile); + * ``` + */ +export function changeData( + input: Type, + resource: Resource, + ...additionalResources: Resource[] +): Type { + const resources = [resource, ...additionalResources]; + // Clone the input and set a graph + const [transactionLdo] = write(...resources.map((r) => r.uri)).usingCopy( + input, + ); + // Start a transaction with the input + startTransaction(transactionLdo); + // Return + return transactionLdo; +} + +/** + * Commits the transaction to the global dataset, syncing all subscribing + * components and connected Pods + * + * @param input - A transactable linked data object + * + * @example + * ```typescript + * import { changeData } from "@ldo/connected"; + * + * // ... + * + * const profile = connectedLdoDataset + * .using(ProfileShapeType) + * .fromSubject("https://example.com/profile#me"); + * const resource = connectedLdoDataset.getResource("https://example.com/profile"); + * + * const cProfile = changeData(profile, resource); + * cProfile.name = "My New Name"; + * const result = await commitData(cProfile); + * ``` + */ +export async function commitData( + input: LdoBase, +): Promise | AggregateError> { + const transactionDataset = getDataset( + input, + ) as ConnectedLdoTransactionDataset<[]>; + const result = await transactionDataset.commitToRemote(); + if (result.isError) return result; + // Take the LdoProxy out of commit mode. This uses hidden methods of JSONLD-DATASET-PROXY + const proxy = getProxyFromObject(input); + proxy[_proxyContext] = proxy[_proxyContext].duplicate({ + dataset: proxy[_proxyContext].state + .parentDataset as SubscribableDataset, + }); + return result; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/notifications/NotificationSubscription.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/notifications/NotificationSubscription.ts new file mode 100644 index 0000000..b106cfb --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/notifications/NotificationSubscription.ts @@ -0,0 +1,146 @@ +import { v4 } from "uuid"; +import type { ConnectedPlugin } from "../types/ConnectedPlugin.js"; +import type { ConnectedContext } from "../types/ConnectedContext.js"; +import type { SubscriptionCallbacks } from "./SubscriptionCallbacks.js"; +import type { NotificationCallbackError } from "../results/error/NotificationErrors.js"; + +/** + * @internal + * Abstract class for notification subscription methods. + */ +export abstract class NotificationSubscription< + Plugin extends ConnectedPlugin, + NotificationMessage, +> { + protected resource: Plugin["types"]["resource"]; + protected parentSubscription: (message: NotificationMessage) => void; + protected context: ConnectedContext; + protected subscriptions: Record< + string, + SubscriptionCallbacks + > = {}; + private isOpen: boolean = false; + + constructor( + resource: Plugin["types"]["resource"], + parentSubscription: (message: NotificationMessage) => void, + context: ConnectedContext, + ) { + this.resource = resource; + this.parentSubscription = parentSubscription; + this.context = context; + } + + public isSubscribedToNotifications(): boolean { + return this.isOpen; + } + + /** + * =========================================================================== + * PUBLIC + * =========================================================================== + */ + + /** + * @internal + * subscribeToNotifications + */ + async subscribeToNotifications( + subscriptionCallbacks?: SubscriptionCallbacks, + ): Promise { + const subscriptionId = v4(); + this.subscriptions[subscriptionId] = subscriptionCallbacks ?? {}; + if (!this.isOpen) { + await this.open(); + this.setIsOpen(true); + } + return subscriptionId; + } + + /** + * @internal + * unsubscribeFromNotification + */ + async unsubscribeFromNotification(subscriptionId: string): Promise { + if ( + !!this.subscriptions[subscriptionId] && + Object.keys(this.subscriptions).length === 1 + ) { + await this.close(); + this.setIsOpen(false); + } + delete this.subscriptions[subscriptionId]; + } + + /** + * @internal + * unsubscribeFromAllNotifications + */ + async unsubscribeFromAllNotifications(): Promise { + await Promise.all( + Object.keys(this.subscriptions).map((id) => + this.unsubscribeFromNotification(id), + ), + ); + } + + /** + * =========================================================================== + * HELPERS + * =========================================================================== + */ + + /** + * @internal + * Opens the subscription + */ + protected abstract open(): Promise; + + /** + * @internal + * Closes the subscription + */ + protected abstract close(): Promise; + + /** + * =========================================================================== + * CALLBACKS + * =========================================================================== + */ + + /** + * @internal + * onNotification + */ + protected onNotification(message: NotificationMessage): void { + this.parentSubscription(message); + Object.values(this.subscriptions).forEach(({ onNotification }) => { + onNotification?.(message); + }); + } + + /** + * @internal + * onNotificationError + */ + protected onNotificationError( + message: NotificationCallbackError, + ): void { + Object.values(this.subscriptions).forEach(({ onNotificationError }) => { + onNotificationError?.(message); + }); + if (message.type === "disconnectedNotAttemptingReconnectError") { + this.setIsOpen(false); + } + } + + /** + * @internal + * setIsOpen + */ + protected setIsOpen(status: boolean) { + const shouldUpdate = status !== this.isOpen; + this.isOpen = status; + if (shouldUpdate) this.resource.emit("update"); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/notifications/SubscriptionCallbacks.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/notifications/SubscriptionCallbacks.ts new file mode 100644 index 0000000..72a6027 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/notifications/SubscriptionCallbacks.ts @@ -0,0 +1,15 @@ +/** + * A set of callback functions that are called when a resource recieves a + * notification + */ +export interface SubscriptionCallbacks { + /** + * Triggers when a notification was received. + */ + onNotification?: (message: NotificationMessage) => void; + /** + * Triggers when a notification error was received. + */ + // TODO: make notification errors more specific + onNotificationError?: (error: Error) => void; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/ConnectedResult.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/ConnectedResult.ts new file mode 100644 index 0000000..285b4cc --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/ConnectedResult.ts @@ -0,0 +1,7 @@ +/** + * A type returned by all request functions + */ +export interface ConnectedResult { + readonly type: string; + readonly isError: boolean; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/error/ErrorResult.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/error/ErrorResult.ts new file mode 100644 index 0000000..db4eacf --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/error/ErrorResult.ts @@ -0,0 +1,139 @@ +import type { Resource } from "../../Resource.js"; +import type { ConnectedResult } from "../ConnectedResult.js"; + +/** + * A result indicating that the request failed in some kind of way + */ +export abstract class ErrorResult extends Error implements ConnectedResult { + /** + * Indicates the specific type of error + */ + abstract readonly type: string; + + /** + * Always true + */ + readonly isError = true as const; + + /** + * @param message - a custom message for the error + */ + constructor(message?: string) { + super(message || "An unkown error was encountered."); + } +} + +/** + * An error for a specific resource + */ +export abstract class ResourceError< + ResourceType extends Resource, +> extends ErrorResult { + /** + * The URI of the resource + */ + readonly uri: ResourceType["uri"]; + + /** + * The resource that failed + */ + readonly resource: ResourceType; + + /** + * @param uri - The URI of the resource + * @param message - A custom message for the error + */ + constructor(resource: ResourceType, message?: string) { + super(message || `An unkown error for ${resource.uri}`); + this.uri = resource.uri; + this.resource = resource; + } +} + +/** + * An error that aggregates many errors + */ +export class AggregateError extends ErrorResult { + readonly type = "aggregateError" as const; + + /** + * A list of all errors returned + */ + readonly errors: ErrorType[]; + + /** + * @param errors - List of all errors returned + * @param message - A custom message for the error + */ + constructor( + errors: (ErrorType | AggregateError)[], + message?: string, + ) { + const allErrors: ErrorType[] = []; + errors.forEach((error) => { + if (error instanceof AggregateError) { + error.errors.forEach((subError) => { + allErrors.push(subError); + }); + } else { + allErrors.push(error); + } + }); + super( + message || + `Encountered multiple errors:${allErrors.reduce( + (agg, cur) => `${agg}\n${cur}`, + "", + )}`, + ); + this.errors = allErrors; + } +} + +/** + * Represents some error that isn't handled under other errors. This is usually + * returned when something threw an error that LDO did not expect. + */ +export class UnexpectedResourceError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "unexpectedResourceError" as const; + + /** + * The error that was thrown + */ + error: Error; + + /** + * @param uri - URI of the resource + * @param error - The error that was thrown + */ + constructor(resource: ResourceType, error: Error) { + super(resource, error.message); + this.error = error; + } + + /** + * @internal + * + * Creates an UnexpectedResourceError from a thrown error + * @param uri - The URI of the resource + * @param err - The thrown error + * @returns an UnexpectedResourceError + */ + static fromThrown( + resource: ResourceType, + err: unknown, + ): UnexpectedResourceError { + if (err instanceof Error) { + return new UnexpectedResourceError(resource, err); + } else if (typeof err === "string") { + return new UnexpectedResourceError(resource, new Error(err)); + } else { + return new UnexpectedResourceError( + resource, + new Error(`Error of type ${typeof err} thrown: ${err}`), + ); + } + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/error/InvalidUriError.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/error/InvalidUriError.ts new file mode 100644 index 0000000..dbc91a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/error/InvalidUriError.ts @@ -0,0 +1,16 @@ +import type { Resource } from "../../Resource.js"; +import { ResourceError } from "./ErrorResult.js"; + +/** + * An InvalidUriError is returned when a URI was provided that is not a valid + * URI. + */ +export class InvalidUriError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "invalidUriError" as const; + + constructor(resource: ResourceType, message?: string) { + super(resource, message || `${resource.uri} is an invalid uri.`); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/error/NotificationErrors.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/error/NotificationErrors.ts new file mode 100644 index 0000000..8c77d1e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/error/NotificationErrors.ts @@ -0,0 +1,37 @@ +import type { Resource } from "../../Resource.js"; +import type { UnexpectedResourceError } from "./ErrorResult.js"; +import { ResourceError } from "./ErrorResult.js"; + +export type NotificationCallbackError = + | DisconnectedAttemptingReconnectError + | DisconnectedNotAttemptingReconnectError + | UnsupportedNotificationError + | UnexpectedResourceError; + +/** + * Indicates that the requested method for receiving notifications is not + * supported by this Pod. + */ +export class UnsupportedNotificationError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "unsupportedNotificationError" as const; +} + +/** + * Indicates that the socket has disconnected and is attempting to reconnect. + */ +export class DisconnectedAttemptingReconnectError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "disconnectedAttemptingReconnectError" as const; +} + +/** + * Indicates that the socket has disconnected and is attempting to reconnect. + */ +export class DisconnectedNotAttemptingReconnectError< + ResourceType extends Resource, +> extends ResourceError { + readonly type = "disconnectedNotAttemptingReconnectError" as const; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/ReadSuccess.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/ReadSuccess.ts new file mode 100644 index 0000000..d0f2199 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/ReadSuccess.ts @@ -0,0 +1,30 @@ +import type { Resource } from "../../Resource.js"; +import { ResourceSuccess } from "./SuccessResult.js"; + +/** + * Indicates that the request to read a resource was a success + */ +export abstract class ReadSuccess< + ResourceType extends Resource, +> extends ResourceSuccess { + /** + * True if the resource was recalled from local memory rather than a recent + * request + */ + recalledFromMemory: boolean; + + constructor(resource: ResourceType, recalledFromMemory: boolean) { + super(resource); + this.recalledFromMemory = recalledFromMemory; + } +} + +/** + * Indicates that the read request was successful, but no resource exists at + * the provided URI. + */ +export class AbsentReadSuccess< + ResourceType extends Resource, +> extends ReadSuccess { + type = "absentReadSuccess" as const; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/SuccessResult.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/SuccessResult.ts new file mode 100644 index 0000000..88759f6 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/SuccessResult.ts @@ -0,0 +1,51 @@ +import type { Resource } from "../../Resource.js"; +import type { ConnectedResult } from "../ConnectedResult.js"; + +/** + * Indicates that some action taken by LDO was a success + */ +export abstract class SuccessResult implements ConnectedResult { + abstract readonly type: string; + readonly isError = false as const; +} + +/** + * Indicates that a request to a resource was aa success + */ +export abstract class ResourceSuccess< + ResourceType extends Resource, +> extends SuccessResult { + /** + * The URI of the resource + */ + uri: ResourceType["uri"]; + /** + * The resource that was successful + */ + resource: ResourceType; + + constructor(resource: ResourceType) { + super(); + this.uri = resource.uri; + this.resource = resource; + } +} + +/** + * A grouping of multiple successes as a result of an action + */ +export class AggregateSuccess< + SuccessType extends SuccessResult, +> extends SuccessResult { + type = "aggregateSuccess" as const; + + /** + * An array of all successesses + */ + results: SuccessType[]; + + constructor(results: SuccessType[]) { + super(); + this.results = results; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/Unfetched.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/Unfetched.ts new file mode 100644 index 0000000..2332e36 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/Unfetched.ts @@ -0,0 +1,11 @@ +import type { Resource } from "../../Resource.js"; +import { ResourceSuccess } from "./SuccessResult.js"; + +/** + * Indicates that a specific resource is unfetched + */ +export class Unfetched< + ResourceType extends Resource, +> extends ResourceSuccess { + readonly type = "unfetched" as const; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/UpdateSuccess.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/UpdateSuccess.ts new file mode 100644 index 0000000..433e0e5 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/results/success/UpdateSuccess.ts @@ -0,0 +1,29 @@ +import type { Resource } from "../../Resource.js"; +import { ResourceSuccess, SuccessResult } from "./SuccessResult.js"; + +/** + * Indicates that an update request to a resource was successful + */ +export class UpdateSuccess< + ResourceType extends Resource, +> extends ResourceSuccess { + type = "updateSuccess" as const; +} + +/** + * Indicates that an update request to the default graph was successful. This + * data was not written to a Pod. It was only written locally. + */ +export class UpdateDefaultGraphSuccess extends SuccessResult { + type = "updateDefaultGraphSuccess" as const; +} + +/** + * Indicates that LDO ignored an invalid update (usually because a container + * attempted an update) + */ +export class IgnoredInvalidUpdateSuccess< + ResourceType extends Resource, +> extends ResourceSuccess { + type = "ignoredInvalidUpdateSuccess" as const; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/TrackingProxyContext.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/TrackingProxyContext.ts new file mode 100644 index 0000000..277bb38 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/TrackingProxyContext.ts @@ -0,0 +1,72 @@ +import type { + ProxyContextOptions, + SubjectProxy, + SetProxy, +} from "@ldo/jsonld-dataset-proxy"; +import { ProxyContext } from "@ldo/jsonld-dataset-proxy"; +import type { QuadMatch } from "@ldo/rdf-utils"; +import type { + nodeEventListener, + SubscribableDataset, +} from "@ldo/subscribable-dataset"; +import type { BlankNode, NamedNode, Quad } from "@rdfjs/types"; +import { createTrackingSubjectProxy } from "./TrackingSubjectProxy.js"; +import { createTrackingSetProxy } from "./TrackingSetProxy.js"; + +/** + * @internal + * Options to be passed to the tracking proxy + */ +export interface TrackingProxyContextOptions extends ProxyContextOptions { + dataset: SubscribableDataset; +} + +/** + * @internal + * A listener that gets triggered whenever there's an update + */ + +/** + * @internal + * This proxy exists to ensure react components rerender at the right time. It + * keeps track of every key accessed in a Linked Data Object and only when the + * dataset is updated with that key does it rerender the react component. + */ +export class TrackingProxyContext extends ProxyContext { + private listener: nodeEventListener; + private subscribableDataset: SubscribableDataset; + + constructor( + options: TrackingProxyContextOptions, + listener: nodeEventListener, + ) { + super(options); + this.subscribableDataset = options.dataset; + this.listener = listener; + } + + // Adds the listener to the subscribable dataset while ensuring deduping of the listener + public addListener(eventName: QuadMatch) { + const listeners = this.subscribableDataset.listeners(eventName); + if (!listeners.includes(this.listener)) { + this.subscribableDataset.on(eventName, this.listener); + } + } + + protected createNewSubjectProxy(node: NamedNode | BlankNode): SubjectProxy { + return createTrackingSubjectProxy(this, node); + } + + protected createNewSetProxy( + quadMatch: QuadMatch, + isSubjectOriented?: boolean, + isLangStringSet?: boolean, + ): SetProxy { + return createTrackingSetProxy( + this, + quadMatch, + isSubjectOriented, + isLangStringSet, + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/TrackingSetProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/TrackingSetProxy.ts new file mode 100644 index 0000000..9f375d7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/TrackingSetProxy.ts @@ -0,0 +1,62 @@ +import { createNewSetProxy, type SetProxy } from "@ldo/jsonld-dataset-proxy"; +import type { TrackingProxyContext } from "./TrackingProxyContext.js"; +import type { QuadMatch } from "@ldo/rdf-utils"; + +/** + * @internal + * + * Creates a tracking proxy for a set, a proxy that tracks the fields that have + * been accessed. + */ +export function createTrackingSetProxy( + proxyContext: TrackingProxyContext, + quadMatch: QuadMatch, + isSubjectOriented?: boolean, + isLangStringSet?: boolean, +): SetProxy { + const baseSetProxy = createNewSetProxy( + quadMatch, + isSubjectOriented ?? false, + proxyContext, + isLangStringSet, + ); + + return new Proxy(baseSetProxy, { + get: (target: SetProxy, key: string | symbol, receiver) => { + if (trackingMethods.has(key)) { + proxyContext.addListener(quadMatch); + } else if (disallowedMethods.has(key)) { + console.warn( + "You've attempted to modify a value on a Linked Data Object from the useSubject, useMatchingSubject, or useMatchingObject hooks. These linked data objects should only be used to render data, not modify it. To modify data, use the `changeData` function.", + ); + } + return Reflect.get(target, key, receiver); + }, + }); +} + +const trackingMethods = new Set([ + "has", + "size", + "entries", + "keys", + "values", + Symbol.iterator, + "every", + "every", + "some", + "forEach", + "map", + "reduce", + "toArray", + "toJSON", + "difference", + "intersection", + "isDisjointFrom", + "isSubsetOf", + "isSupersetOf", + "symmetricDifference", + "union", +]); + +const disallowedMethods = new Set(["add", "clear", "delete"]); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/TrackingSubjectProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/TrackingSubjectProxy.ts new file mode 100644 index 0000000..98d11dc --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/TrackingSubjectProxy.ts @@ -0,0 +1,49 @@ +import type { SubjectProxyTarget } from "@ldo/jsonld-dataset-proxy"; +import { + createSubjectHandler, + type SubjectProxy, +} from "@ldo/jsonld-dataset-proxy"; +import type { BlankNode, NamedNode } from "@rdfjs/types"; +import type { TrackingProxyContext } from "./TrackingProxyContext.js"; +import { namedNode } from "@ldo/rdf-utils"; + +/** + * @internal + * + * Creates a tracking proxy for a single value, a proxy that tracks the fields + * that have been accessed. + */ +export function createTrackingSubjectProxy( + proxyContext: TrackingProxyContext, + node: NamedNode | BlankNode, +): SubjectProxy { + const baseHandler = createSubjectHandler(proxyContext); + const oldGetFunction = baseHandler.get; + const trackingProxyGetFunction: ProxyHandler["get"] = ( + target: SubjectProxyTarget, + key: string | symbol, + receiver, + ) => { + const subject = target["@id"]; + const rdfTypes = proxyContext.getRdfType(subject); + if (typeof key === "symbol") { + // Do Nothing + } else if (key === "@id") { + proxyContext.addListener([subject, null, null, null]); + } else if (!proxyContext.contextUtil.isSet(key, rdfTypes)) { + const predicate = namedNode( + proxyContext.contextUtil.keyToIri(key, rdfTypes), + ); + proxyContext.addListener([subject, predicate, null, null]); + } + return oldGetFunction && oldGetFunction(target, key, receiver); + }; + baseHandler.get = trackingProxyGetFunction; + baseHandler.set = () => { + console.warn( + "You've attempted to set a value on a Linked Data Object from the useSubject, useMatchingSubject, or useMatchingObject hooks. These linked data objects should only be used to render data, not modify it. To modify data, use the `changeData` function.", + ); + return true; + }; + return new Proxy({ "@id": node }, baseHandler) as unknown as SubjectProxy; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/createTrackingProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/createTrackingProxy.ts new file mode 100644 index 0000000..16add22 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/trackingProxy/createTrackingProxy.ts @@ -0,0 +1,42 @@ +import { + ContextUtil, + JsonldDatasetProxyBuilder, +} from "@ldo/jsonld-dataset-proxy"; +import { LdoBuilder } from "@ldo/ldo"; +import type { LdoBase, LdoDataset, ShapeType } from "@ldo/ldo"; +import { TrackingProxyContext } from "./TrackingProxyContext.js"; +import { defaultGraph } from "@ldo/rdf-utils"; +import type { nodeEventListener } from "@ldo/subscribable-dataset"; +import type { Quad } from "@rdfjs/types"; + +/** + * @internal + * Creates a Linked Data Object builder that when creating linked data objects + * it tracks when something that was read from it is updated and triggers some + * action based on that. + */ +export function createTrackingProxyBuilder( + dataset: LdoDataset, + shapeType: ShapeType, + onUpdate: nodeEventListener, +): LdoBuilder { + // Remove all current subscriptions + // dataset.removeListenerFromAllEvents(onUpdate); + + // Rebuild the LdoBuilder from scratch to inject TrackingProxyContext + const contextUtil = new ContextUtil(shapeType.context); + const proxyContext = new TrackingProxyContext( + { + dataset, + contextUtil, + writeGraphs: [defaultGraph()], + languageOrdering: ["none", "en", "other"], + }, + onUpdate, + ); + const builder = new LdoBuilder( + new JsonldDatasetProxyBuilder(proxyContext), + shapeType, + ); + return builder; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/ConnectedContext.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/ConnectedContext.ts new file mode 100644 index 0000000..2d7f735 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/ConnectedContext.ts @@ -0,0 +1,15 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { ConnectedPlugin } from "./ConnectedPlugin.js"; +import type { IConnectedLdoDataset } from "./IConnectedLdoDataset.js"; + +/** + * Each Plugin comes with a context. This is the aggregate of all those contexts + * It is passed between the various components of the "connected" library + */ +export type ConnectedContext< + Plugins extends ConnectedPlugin[], +> = { + dataset: IConnectedLdoDataset; +} & { + [P in Plugins[number] as P["name"]]: P["types"]["context"]; +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/ConnectedPlugin.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/ConnectedPlugin.ts new file mode 100644 index 0000000..169e7a7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/ConnectedPlugin.ts @@ -0,0 +1,66 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { ConnectedContext } from "./ConnectedContext.js"; +import type { Resource } from "../Resource.js"; +import type { ErrorResult } from "../results/error/ErrorResult.js"; + +/** + * A ConnectedPlugin can be passed to a ConnectedDataset to allow it to connect + * to a remote platform. + */ +export interface ConnectedPlugin< + Name extends string = any, + UriType extends string = any, + ResourceType extends Resource = any, + ContextType = any, + CreateResourceOptions = any, +> { + /** + * The name of the plugin ("solid" for example). + */ + name: Name; + /** + * A function that returns a newly minted resource on this platform. This + * function does not fetch the resource or interface with a cache. + * @param uri - The uri of the resource + * @param context - The context for the plugin + */ + getResource(uri: UriType, context: ConnectedContext): ResourceType; + /** + * A function that will create a resource on the remote at a random URI. + * @param context - the context for the plugin + * @param createResourceOptions - special options for creating a resource that + * varies based on the plugin + */ + createResource( + context: ConnectedContext, + createResourceOptions?: CreateResourceOptions, + ): Promise; + /** + * Checks if a specific uri is valid for this plugin + * @param uri - the URI to check + * @returns true if this is a valid URI + */ + isUriValid(uri: string): uri is UriType; + /** + * Optional function that takes in a URI and returns a normalized uri. For + * example `https://example.com/profile#me` becomes + * `https://example.com/profile`. + * @param uri - The uri to normalize + * @returns - The normalized uri + */ + normalizeUri?: (uri: UriType) => UriType; + /** + * A starting context + */ + initialContext: ContextType; + /** + * This object exists to transfer typescript types. It does not need to be + * filled out in an actual instance. + */ + types: { + uri: UriType; + context: ContextType; + resource: ResourceType; + createResourceOptions: CreateResourceOptions; + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/IConnectedLdoBuilder.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/IConnectedLdoBuilder.ts new file mode 100644 index 0000000..15ed3bb --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/IConnectedLdoBuilder.ts @@ -0,0 +1,15 @@ +import type { LdoBase, LdoBuilder } from "@ldo/ldo"; +import type { ConnectedPlugin } from "./ConnectedPlugin.js"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import type { ILinkQuery, LQInput } from "./ILinkQuery.js"; + +export interface IConnectedLdoBuilder< + Type extends LdoBase, + Plugins extends ConnectedPlugin[], +> extends LdoBuilder { + startLinkQuery>( + startingResource: Plugins[number]["types"]["resource"], + startingSubject: SubjectNode | string, + linkQueryInput: Input, + ): ILinkQuery; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/IConnectedLdoDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/IConnectedLdoDataset.ts new file mode 100644 index 0000000..73792e8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/IConnectedLdoDataset.ts @@ -0,0 +1,171 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { LdoBase, LdoDataset, ShapeType } from "@ldo/ldo"; +import type { ConnectedPlugin } from "./ConnectedPlugin.js"; +import type { InvalidIdentifierResource } from "../InvalidIdentifierResource.js"; +import type { IConnectedLdoBuilder } from "./IConnectedLdoBuilder.js"; + +export type ReturnTypeFromArgs = Func extends ( + arg: Arg, + context: any, +) => infer R + ? R + : never; + +export type GetResourceReturnType< + Plugin extends ConnectedPlugin, + UriType extends string, +> = UriType extends Plugin["types"]["uri"] + ? ReturnTypeFromArgs + : ReturnType | InvalidIdentifierResource; + +/** + * A ConnectedLdoDataset has all the functionality of a LdoDataset with the + * added functionality of keeping track of fetched remote Resources. + * + * It is recommended to use the { @link createConnectedLdoDataset } to + * initialize this class. + * + * @example + * ```typescript + * import { createConnectedLdoDataset } from "@ldo/connected"; + * import { ProfileShapeType } from "./.ldo/profile.shapeTypes.ts" + * + * // At least one plugin needs to be provided to a ConnectedLdoDataset. In this + * // example we'll use both the Solid and NextGraph plugins. + * import { solidConnectedPlugin } from "@ldo/connected-solid"; + * import { nextGraphConnectedPlugin } from "@ldo/connected-nextgraph"; + * + * // ... + * + * const connectedLdoDataset = createConnectedLdoDataset([ + * solidConnectedPlugin, + * nextGraphConnectedPlugin + * ]); + * + * const profileDocument = connectedLdoDataset + * .getResource("https://example.com/profile"); + * await profileDocument.read(); + * + * const profile = connectedLdoDataset + * .using(ProfileShapeType) + * .fromSubject("https://example.com/profile#me"); + * ``` + */ +export interface IConnectedLdoDataset + extends LdoDataset { + /** + * Retireves a representation of a Resource at the given URI. This resource + * represents the current state of the resource: whether it is currently + * fetched or in the process of fetching as well as some information about it. + * + * @param uri - the URI of the resource + * @param pluginName - optionally, force this function to choose a specific + * plugin to use rather than perform content negotiation. + * + * @returns a Resource + * + * @example + * ```typescript + * const profileDocument = connectedLdoDataset + * .getResource("https://example.com/profile"); + * ``` + */ + getResource< + Name extends Plugins[number]["name"], + Plugin extends Extract, + UriType extends string, + >( + uri: UriType, + pluginName?: Name, + ): GetResourceReturnType; + + /** + * Retireves a representation of all Resources referenced by this dataset + * This does not necessarily mean that it's been fetched (use the + * `getFetchedResources` method for that). It simply means that at one point + * it was referenced. + * + * @returns a Resource array + * + * @example + * ```typescript + * const allResources = connectedLdoDataset.getResources(); + * ``` + */ + getResources(): Plugins[number]["types"]["resource"][]; + + /** + * Retireves a representation of all Resources that have been fetched. + * + * @returns a Resource array + * + * @example + * ```typescript + * const allResources = connectedLdoDataset.getFetchedResources(); + * ``` + */ + getFetchedResources(): Plugins[number]["types"]["resource"][]; + + /** + * Generates a random uri and creates a resource. + * + * @param pluginName - A string name for the platform you'd like to create + * the resource on. + * @param createResourceOptions - Some set of options specific to the plugin + * you've selected. + * @returns A created resource or an error + * + * @example + * ```typescript + * const profileDocument = await connectedLdoDataset + * .createResource("solid"); + * ``` + */ + createResource< + Name extends Plugins[number]["name"], + Plugin extends Extract, + >( + name: Name, + createResourceOptions?: Plugin["types"]["createResourceOptions"], + ): Promise>; + + /** + * Removes a resource from local memory + * @param uri - the URI of the resource to remove + * @returns true if the resource was present before removal + * + * @example + * ```typescript + * connectedLdoDataset.forgetResource("https://example.com/resource.ttl"); + * ``` + */ + forgetResource(uri: string): boolean; + + /** + * Removes all resources from memory + * + * @example + * ```typescript + * connectedLdoDataset.forgetAllResources(); + * ``` + */ + forgetAllResources(): void; + + /** + * Sets conetext for a specific plugin + * + * @param pluginName - the name of the plugin + * @param context - the context for this specific plugin + */ + setContext< + Name extends Plugins[number]["name"], + Plugin extends Extract, + >( + name: Name, + context: Plugin["types"]["context"], + ); + + usingType( + shapeType: ShapeType, + ): IConnectedLdoBuilder; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/ILinkQuery.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/ILinkQuery.ts new file mode 100644 index 0000000..83e5824 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/types/ILinkQuery.ts @@ -0,0 +1,87 @@ +// This file is a stripped down version of a full-implmentation of a global +// query interface found here https://github.com/o-development/ldo-query/blob/main/lib/ShapeQuery.ts +// If I ever want to implement a global query interface, this is a good place +// to start. + +import type { LdoBase, LdSet } from "@ldo/ldo"; +// import { SolidProfileShapeShapeType } from "../../test/.ldo/solidProfile.shapeTypes.js"; +// import type { SolidProfileShape } from "../../test/.ldo/solidProfile.typings.js"; + +/** + * Link Query Input + */ +export type LQInput = LQInputObject; + +export type LQInputObject = Partial<{ + [key in Exclude]: LQInputFlattenSet; +}>; + +export type LQInputSubSet = Type extends object + ? LQInputObject + : true; + +export type LQInputFlattenSet = Type extends LdSet + ? LQInputSubSet + : LQInputSubSet; + +/** + * Link Query Return + */ +export type LQReturn> = LQReturnObject< + Type, + Input +>; + +export type LQReturnObject> = { + [key in Exclude< + keyof Required, + "@context" + > as undefined extends Input[key] + ? never + : key]: Input[key] extends LQInputFlattenSet + ? undefined extends Type[key] + ? LQReturnExpandSet | undefined + : LQReturnExpandSet + : never; +}; + +export type LQReturnSubSet = Input extends LQInputSubSet + ? Input extends LQInputObject + ? Input extends true + ? Type + : LQReturnObject + : Type + : never; + +export type LQReturnExpandSet< + Type, + Input extends LQInputFlattenSet, +> = NonNullable extends LdSet + ? LdSet> + : LQReturnSubSet; + +/** + * Helper Functions + */ +export type ExpandDeep = T extends LdSet + ? LdSet> // recursively expand sets + : T extends object + ? { [K in keyof T]: ExpandDeep } // recursively expand objects + : T; // base case (primitive types) + +/** + * ILinkQuery: Manages resources in a link query + */ +export interface LinkQueryRunOptions { + reload?: boolean; +} + +export interface ILinkQuery> { + run( + options?: LinkQueryRunOptions, + ): Promise>>; + subscribe(): Promise; + unsubscribe(subscriptionId: string): Promise; + unsubscribeAll(): Promise; + fromSubject(): ExpandDeep>; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/util/splitChangesByGraph.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/util/splitChangesByGraph.ts new file mode 100644 index 0000000..e5976ef --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/src/util/splitChangesByGraph.ts @@ -0,0 +1,70 @@ +import { createDataset } from "@ldo/dataset"; +import type { GraphNode, DatasetChanges } from "@ldo/rdf-utils"; +import type { Quad } from "@rdfjs/types"; +import { defaultGraph, namedNode, quad as createQuad } from "@ldo/rdf-utils"; + +/** + * @internal + * Converts an RDFJS Graph Node to a string hash + * @param graphNode - the node to convert + * @returns a unique string corresponding to the node + */ +export function graphNodeToString(graphNode: GraphNode): string { + return graphNode.termType === "DefaultGraph" + ? "defaultGraph()" + : graphNode.value; +} + +/** + * @internal + * Converts a unique string to a GraphNode + * @param input - the unique string + * @returns A graph node + */ +export function stringToGraphNode(input: string): GraphNode { + return input === "defaultGraph()" ? defaultGraph() : namedNode(input); +} + +/** + * Splits all changes in a DatasetChanges into individual DatasetChanges grouped + * by the quad graph. + * @param changes - Changes to split + * @returns A map between the quad graph and the changes associated with that + * graph + */ +export function splitChangesByGraph( + changes: DatasetChanges, +): Map> { + const changesMap: Record> = {}; + changes.added?.forEach((quad) => { + const graphHash = graphNodeToString(quad.graph as GraphNode); + if (!changesMap[graphHash]) { + changesMap[graphHash] = {}; + } + if (!changesMap[graphHash].added) { + changesMap[graphHash].added = createDataset(); + } + changesMap[graphHash].added?.add( + createQuad(quad.subject, quad.predicate, quad.object, quad.graph), + ); + }); + + changes.removed?.forEach((quad) => { + const graphHash = graphNodeToString(quad.graph as GraphNode); + if (!changesMap[graphHash]) { + changesMap[graphHash] = {}; + } + if (!changesMap[graphHash].removed) { + changesMap[graphHash].removed = createDataset(); + } + changesMap[graphHash].removed?.add( + createQuad(quad.subject, quad.predicate, quad.object, quad.graph), + ); + }); + + const finalMap = new Map>(); + Object.entries(changesMap).forEach(([key, value]) => { + finalMap.set(stringToGraphNode(key), value); + }); + return finalMap; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.context.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.context.ts new file mode 100644 index 0000000..9fdffc3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.context.ts @@ -0,0 +1,459 @@ +import { LdoJsonldContext } from "@ldo/ldo"; + +/** + * ============================================================================= + * solidProfileContext: JSONLD Context for solidProfile + * ============================================================================= + */ +export const solidProfileContext: LdoJsonldContext = { + type: { + "@id": "@type", + }, + Person: { + "@id": "http://schema.org/Person", + "@context": { + type: { + "@id": "@type", + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Person2: { + "@id": "http://xmlns.com/foaf/0.1/Person", + "@context": { + type: { + "@id": "@type", + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + countryName: { + "@id": "http://www.w3.org/2006/vcard/ns#country-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + locality: { + "@id": "http://www.w3.org/2006/vcard/ns#locality", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + postalCode: { + "@id": "http://www.w3.org/2006/vcard/ns#postal-code", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + region: { + "@id": "http://www.w3.org/2006/vcard/ns#region", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + streetAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#street-address", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + Dom: { + "@id": "http://www.w3.org/2006/vcard/ns#Dom", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Home: { + "@id": "http://www.w3.org/2006/vcard/ns#Home", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + ISDN: { + "@id": "http://www.w3.org/2006/vcard/ns#ISDN", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Internet: { + "@id": "http://www.w3.org/2006/vcard/ns#Internet", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Intl: { + "@id": "http://www.w3.org/2006/vcard/ns#Intl", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Label: { + "@id": "http://www.w3.org/2006/vcard/ns#Label", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Parcel: { + "@id": "http://www.w3.org/2006/vcard/ns#Parcel", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Postal: { + "@id": "http://www.w3.org/2006/vcard/ns#Postal", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Pref: { + "@id": "http://www.w3.org/2006/vcard/ns#Pref", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Work: { + "@id": "http://www.w3.org/2006/vcard/ns#Work", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + X400: { + "@id": "http://www.w3.org/2006/vcard/ns#X400", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + mode: { + "@id": "http://www.w3.org/ns/auth/acl#mode", + "@isCollection": true, + }, + Append: "http://www.w3.org/ns/auth/acl#Append", + Control: "http://www.w3.org/ns/auth/acl#Control", + Read: "http://www.w3.org/ns/auth/acl#Read", + Write: "http://www.w3.org/ns/auth/acl#Write", + origin: { + "@id": "http://www.w3.org/ns/auth/acl#origin", + "@type": "@id", + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + modulus: { + "@id": "http://www.w3.org/ns/auth/cert#modulus", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + exponent: { + "@id": "http://www.w3.org/ns/auth/cert#exponent", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.schema.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.schema.ts new file mode 100644 index 0000000..69466fc --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.schema.ts @@ -0,0 +1,749 @@ +import { Schema } from "shexj"; + +/** + * ============================================================================= + * solidProfileSchema: ShexJ Schema for solidProfile + * ============================================================================= + */ +export const solidProfileSchema: Schema = { + type: "Schema", + shapes: [ + { + id: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://schema.org/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from Schema.org)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://xmlns.com/foaf/0.1/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from foaf)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#fn", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The formatted name of a person. Example: John Smith", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "An alternate way to define a person's name.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasAddress", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#AddressShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's street address.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasEmail", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#EmailShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasPhoto", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "A link to the person's photo", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/img", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Photo link but in string form", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasTelephone", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Person's telephone number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#phone", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "An alternative way to define a person's telephone number using a string", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#organization-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the organization with which the person is affiliated", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#role", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the person's role in their organization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#trustedApp", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of app origins that are trusted by this user", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#key", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of RSA public keys that are associated with private keys the user holds.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/ldp#inbox", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The user's LDP inbox to which apps can post notifications", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#preferencesFile", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's preferences", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#storage", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The location of a Solid storage server related to this WebId", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#account", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's account", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#privateTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for private access only)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#publicTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for public access)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/knows", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of WebIds for all the people this user knows.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#AddressShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#country-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The name of the user's country of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#locality", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's locality (City, Town etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#postal-code", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's postal code", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#region", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's region (State, Province etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#street-address", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's street address", + }, + }, + ], + }, + ], + }, + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#EmailShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The type of email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of an email as a mailto link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "They type of Phone Number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of a phone number as a tel link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#mode", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/ns/auth/acl#Append", + "http://www.w3.org/ns/auth/acl#Control", + "http://www.w3.org/ns/auth/acl#Read", + "http://www.w3.org/ns/auth/acl#Write", + ], + }, + min: 1, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The level of access provided to this origin", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#origin", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The app origin the user trusts", + }, + }, + ], + }, + ], + }, + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#modulus", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Modulus", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#exponent", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#integer", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Exponent", + }, + }, + ], + }, + ], + }, + }, + }, + ], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.shapeTypes.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.shapeTypes.ts new file mode 100644 index 0000000..2265cce --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.shapeTypes.ts @@ -0,0 +1,64 @@ +import { ShapeType } from "@ldo/ldo"; +import { solidProfileSchema } from "./solidProfile.schema.js"; +import { solidProfileContext } from "./solidProfile.context.js"; +import { AddressShape, EmailShape, PhoneNumberShape, RSAPublicKeyShape, SolidProfileShape, TrustedAppShape } from "./solidProfile.typings.js"; + +/** + * ============================================================================= + * LDO ShapeTypes solidProfile + * ============================================================================= + */ + +/** + * SolidProfileShape ShapeType + */ +export const SolidProfileShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + context: solidProfileContext, +}; + +/** + * AddressShape ShapeType + */ +export const AddressShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#AddressShape", + context: solidProfileContext, +}; + +/** + * EmailShape ShapeType + */ +export const EmailShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#EmailShape", + context: solidProfileContext, +}; + +/** + * PhoneNumberShape ShapeType + */ +export const PhoneNumberShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + context: solidProfileContext, +}; + +/** + * TrustedAppShape ShapeType + */ +export const TrustedAppShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + context: solidProfileContext, +}; + +/** + * RSAPublicKeyShape ShapeType + */ +export const RSAPublicKeyShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + context: solidProfileContext, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.typings.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.typings.ts new file mode 100644 index 0000000..95dbaef --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.ldo/solidProfile.typings.ts @@ -0,0 +1,293 @@ +import { LdoJsonldContext, LdSet } from "@ldo/ldo"; + +/** + * ============================================================================= + * Typescript Typings for solidProfile + * ============================================================================= + */ + +/** + * SolidProfileShape Type + */ +export interface SolidProfileShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * Defines the node as a Person (from Schema.org) | Defines the node as a Person (from foaf) + */ + type: LdSet< + | { + "@id": "Person"; + } + | { + "@id": "Person2"; + } + >; + /** + * The formatted name of a person. Example: John Smith + */ + fn?: string; + /** + * An alternate way to define a person's name. + */ + name?: string; + /** + * The person's street address. + */ + hasAddress?: LdSet; + /** + * The person's email. + */ + hasEmail?: LdSet; + /** + * A link to the person's photo + */ + hasPhoto?: { + "@id": string; + }; + /** + * Photo link but in string form + */ + img?: string; + /** + * Person's telephone number + */ + hasTelephone?: LdSet; + /** + * An alternative way to define a person's telephone number using a string + */ + phone?: string; + /** + * The name of the organization with which the person is affiliated + */ + organizationName?: string; + /** + * The name of the person's role in their organization + */ + role?: string; + /** + * A list of app origins that are trusted by this user + */ + trustedApp?: LdSet; + /** + * A list of RSA public keys that are associated with private keys the user holds. + */ + key?: LdSet; + /** + * The user's LDP inbox to which apps can post notifications + */ + inbox: { + "@id": string; + }; + /** + * The user's preferences + */ + preferencesFile?: { + "@id": string; + }; + /** + * The location of a Solid storage server related to this WebId + */ + storage?: LdSet<{ + "@id": string; + }>; + /** + * The user's account + */ + account?: { + "@id": string; + }; + /** + * A registry of all types used on the user's Pod (for private access only) + */ + privateTypeIndex?: LdSet<{ + "@id": string; + }>; + /** + * A registry of all types used on the user's Pod (for public access) + */ + publicTypeIndex?: LdSet<{ + "@id": string; + }>; + /** + * A list of WebIds for all the people this user knows. + */ + knows?: LdSet; +} + +/** + * AddressShape Type + */ +export interface AddressShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The name of the user's country of residence + */ + countryName?: string; + /** + * The name of the user's locality (City, Town etc.) of residence + */ + locality?: string; + /** + * The user's postal code + */ + postalCode?: string; + /** + * The name of the user's region (State, Province etc.) of residence + */ + region?: string; + /** + * The user's street address + */ + streetAddress?: string; +} + +/** + * EmailShape Type + */ +export interface EmailShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The type of email. + */ + type?: + | { + "@id": "Dom"; + } + | { + "@id": "Home"; + } + | { + "@id": "ISDN"; + } + | { + "@id": "Internet"; + } + | { + "@id": "Intl"; + } + | { + "@id": "Label"; + } + | { + "@id": "Parcel"; + } + | { + "@id": "Postal"; + } + | { + "@id": "Pref"; + } + | { + "@id": "Work"; + } + | { + "@id": "X400"; + }; + /** + * The value of an email as a mailto link (Example ) + */ + value: { + "@id": string; + }; +} + +/** + * PhoneNumberShape Type + */ +export interface PhoneNumberShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * They type of Phone Number + */ + type?: + | { + "@id": "Dom"; + } + | { + "@id": "Home"; + } + | { + "@id": "ISDN"; + } + | { + "@id": "Internet"; + } + | { + "@id": "Intl"; + } + | { + "@id": "Label"; + } + | { + "@id": "Parcel"; + } + | { + "@id": "Postal"; + } + | { + "@id": "Pref"; + } + | { + "@id": "Work"; + } + | { + "@id": "X400"; + }; + /** + * The value of a phone number as a tel link (Example ) + */ + value: { + "@id": string; + }; +} + +/** + * TrustedAppShape Type + */ +export interface TrustedAppShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The level of access provided to this origin + */ + mode: LdSet< + | { + "@id": "Append"; + } + | { + "@id": "Control"; + } + | { + "@id": "Read"; + } + | { + "@id": "Write"; + } + >; + /** + * The app origin the user trusts + */ + origin: { + "@id": string; + }; +} + +/** + * RSAPublicKeyShape Type + */ +export interface RSAPublicKeyShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * RSA Modulus + */ + modulus: string; + /** + * RSA Exponent + */ + exponent: number; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.shapes/solidProfile.shex b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.shapes/solidProfile.shex new file mode 100644 index 0000000..cbc068c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/.shapes/solidProfile.shex @@ -0,0 +1,121 @@ +PREFIX srs: +PREFIX foaf: +PREFIX rdfs: +PREFIX schem: +PREFIX vcard: +PREFIX xsd: +PREFIX acl: +PREFIX cert: +PREFIX ldp: +PREFIX sp: +PREFIX solid: + +srs:SolidProfileShape EXTRA a { + a [ schem:Person ] + // rdfs:comment "Defines the node as a Person (from Schema.org)" ; + a [ foaf:Person ] + // rdfs:comment "Defines the node as a Person (from foaf)" ; + vcard:fn xsd:string ? + // rdfs:comment "The formatted name of a person. Example: John Smith" ; + foaf:name xsd:string ? + // rdfs:comment "An alternate way to define a person's name." ; + vcard:hasAddress @srs:AddressShape * + // rdfs:comment "The person's street address." ; + vcard:hasEmail @srs:EmailShape * + // rdfs:comment "The person's email." ; + vcard:hasPhoto IRI ? + // rdfs:comment "A link to the person's photo" ; + foaf:img xsd:string ? + // rdfs:comment "Photo link but in string form" ; + vcard:hasTelephone @srs:PhoneNumberShape * + // rdfs:comment "Person's telephone number" ; + vcard:phone xsd:string ? + // rdfs:comment "An alternative way to define a person's telephone number using a string" ; + vcard:organization-name xsd:string ? + // rdfs:comment "The name of the organization with which the person is affiliated" ; + vcard:role xsd:string ? + // rdfs:comment "The name of the person's role in their organization" ; + acl:trustedApp @srs:TrustedAppShape * + // rdfs:comment "A list of app origins that are trusted by this user" ; + cert:key @srs:RSAPublicKeyShape * + // rdfs:comment "A list of RSA public keys that are associated with private keys the user holds." ; + ldp:inbox IRI + // rdfs:comment "The user's LDP inbox to which apps can post notifications" ; + sp:preferencesFile IRI ? + // rdfs:comment "The user's preferences" ; + sp:storage IRI * + // rdfs:comment "The location of a Solid storage server related to this WebId" ; + solid:account IRI ? + // rdfs:comment "The user's account" ; + solid:privateTypeIndex IRI * + // rdfs:comment "A registry of all types used on the user's Pod (for private access only)" ; + solid:publicTypeIndex IRI * + // rdfs:comment "A registry of all types used on the user's Pod (for public access)" ; + foaf:knows @srs:SolidProfileShape * + // rdfs:comment "A list of WebIds for all the people this user knows." ; +} + +srs:AddressShape { + vcard:country-name xsd:string ? + // rdfs:comment "The name of the user's country of residence" ; + vcard:locality xsd:string ? + // rdfs:comment "The name of the user's locality (City, Town etc.) of residence" ; + vcard:postal-code xsd:string ? + // rdfs:comment "The user's postal code" ; + vcard:region xsd:string ? + // rdfs:comment "The name of the user's region (State, Province etc.) of residence" ; + vcard:street-address xsd:string ? + // rdfs:comment "The user's street address" ; +} + +srs:EmailShape EXTRA a { + a [ + vcard:Dom + vcard:Home + vcard:ISDN + vcard:Internet + vcard:Intl + vcard:Label + vcard:Parcel + vcard:Postal + vcard:Pref + vcard:Work + vcard:X400 + ] ? + // rdfs:comment "The type of email." ; + vcard:value IRI + // rdfs:comment "The value of an email as a mailto link (Example )" ; +} + +srs:PhoneNumberShape EXTRA a { + a [ + vcard:Dom + vcard:Home + vcard:ISDN + vcard:Internet + vcard:Intl + vcard:Label + vcard:Parcel + vcard:Postal + vcard:Pref + vcard:Work + vcard:X400 + ] ? + // rdfs:comment "They type of Phone Number" ; + vcard:value IRI + // rdfs:comment "The value of a phone number as a tel link (Example )" ; +} + +srs:TrustedAppShape { + acl:mode [acl:Append acl:Control acl:Read acl:Write] + + // rdfs:comment "The level of access provided to this origin" ; + acl:origin IRI + // rdfs:comment "The app origin the user trusts" +} + +srs:RSAPublicKeyShape { + cert:modulus xsd:string + // rdfs:comment "RSA Modulus" ; + cert:exponent xsd:integer + // rdfs:comment "RSA Exponent" ; +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/ErrorResult.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/ErrorResult.test.ts new file mode 100644 index 0000000..695a9b7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/ErrorResult.test.ts @@ -0,0 +1,67 @@ +import { + AggregateError, + ErrorResult, + ResourceError, + UnexpectedResourceError, +} from "../src/results/error/ErrorResult.js"; +import { InvalidUriError } from "../src/results/error/InvalidUriError.js"; +import { MockResource } from "./mocks/MockResource.js"; +import { describe, it, expect } from "vitest"; + +const mockResource = new MockResource("https://example.com/"); + +describe("ErrorResult", () => { + describe("fromThrown", () => { + it("returns an UnexpecteResourceError if a string is provided", () => { + expect( + UnexpectedResourceError.fromThrown(mockResource, "hello").message, + ).toBe("hello"); + }); + + it("returns an UnexpecteResourceError if an odd valud is provided", () => { + expect(UnexpectedResourceError.fromThrown(mockResource, 5).message).toBe( + "Error of type number thrown: 5", + ); + }); + }); + + describe("AggregateError", () => { + it("flattens aggregate errors provided to the constructor", () => { + const err1 = UnexpectedResourceError.fromThrown(mockResource, "1"); + const err2 = UnexpectedResourceError.fromThrown(mockResource, "2"); + const err3 = UnexpectedResourceError.fromThrown(mockResource, "3"); + const err4 = UnexpectedResourceError.fromThrown(mockResource, "4"); + const aggErr1 = new AggregateError([err1, err2]); + const aggErr2 = new AggregateError([err3, err4]); + const finalAgg = new AggregateError([aggErr1, aggErr2]); + expect(finalAgg.errors.length).toBe(4); + }); + }); + + describe("default messages", () => { + class ConcreteResourceError extends ResourceError { + readonly type = "concreteResourceError" as const; + } + class ConcreteErrorResult extends ErrorResult { + readonly type = "concreteErrorResult" as const; + } + + it("ResourceError fallsback to a default message if none is provided", () => { + expect(new ConcreteResourceError(mockResource).message).toBe( + "An unkown error for https://example.com/", + ); + }); + + it("ErrorResult fallsback to a default message if none is provided", () => { + expect(new ConcreteErrorResult().message).toBe( + "An unkown error was encountered.", + ); + }); + + it("InvalidUriError fallsback to a default message if none is provided", () => { + expect(new InvalidUriError(mockResource).message).toBe( + "https://example.com/ is an invalid uri.", + ); + }); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/LinkTraversalData.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/LinkTraversalData.ts new file mode 100644 index 0000000..d81879b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/LinkTraversalData.ts @@ -0,0 +1,58 @@ +import type { ResourceInfo } from "@ldo/test-solid-server"; + +export const BASE_CONTAINER = "http://localhost:3005/test-container/"; +export const MAIN_PROFILE_URI = `${BASE_CONTAINER}mainProfile.ttl`; +export const MAIN_PROFILE_SUBJECT = `${MAIN_PROFILE_URI}#me`; +export const OTHER_PROFILE_URI = `${BASE_CONTAINER}otherProfile.ttl`; +export const OTHER_PROFILE_SUBJECT = `${OTHER_PROFILE_URI}#me`; +export const THIRD_PROFILE_URI = `${BASE_CONTAINER}thirdProfile.ttl`; +export const THIRD_PROFILE_SUBJECT = `${THIRD_PROFILE_URI}#me`; + +export const linkTraversalData: ResourceInfo = { + slug: "test-container/", + isContainer: true, + contains: [ + { + slug: "mainProfile.ttl", + isContainer: false, + mimeType: "text/turtle", + data: ` + @prefix foaf: . + @prefix : <#> . + + :me a foaf:Person ; + foaf:name "Main User" ; + foaf:mbox ; + foaf:knows . + `, + }, + { + slug: "otherProfile.ttl", + isContainer: false, + mimeType: "text/turtle", + data: ` + @prefix foaf: . + @prefix : <#> . + + :me a foaf:Person ; + foaf:name "Other User" ; + foaf:mbox ; + foaf:knows . + `, + }, + { + slug: "thirdProfile.ttl", + isContainer: false, + mimeType: "text/turtle", + data: ` + @prefix foaf: . + @prefix : <#> . + + :me a foaf:Person ; + foaf:name "Third User" ; + foaf:mbox ; + foaf:knows . + `, + }, + ], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/LinkTraversalIntegration.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/LinkTraversalIntegration.test.ts new file mode 100644 index 0000000..7f084d2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/LinkTraversalIntegration.test.ts @@ -0,0 +1,223 @@ +import type { ConnectedLdoDataset } from "../src/ConnectedLdoDataset.js"; +import { + changeData, + commitData, + createConnectedLdoDataset, +} from "../src/index.js"; +import { + solidConnectedPlugin, + type SolidConnectedPlugin, +} from "@ldo/connected-solid"; +import { setupServer } from "@ldo/test-solid-server"; +import { + linkTraversalData, + MAIN_PROFILE_SUBJECT, + MAIN_PROFILE_URI, + OTHER_PROFILE_URI, + THIRD_PROFILE_SUBJECT, + THIRD_PROFILE_URI, +} from "./LinkTraversalData.js"; +import { SolidProfileShapeShapeType } from "./.ldo/solidProfile.shapeTypes.js"; +import { wait } from "./util/wait.js"; +import { describe, it, expect, beforeEach } from "vitest"; + +describe("Link Traversal", () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + let solidLdoDataset: ConnectedLdoDataset; + + const s = setupServer(3005, linkTraversalData); + + beforeEach(async () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + solidLdoDataset = createConnectedLdoDataset([solidConnectedPlugin]); + solidLdoDataset.setContext("solid", { fetch: s.fetchMock }); + }); + + it("does a simple run to traverse data", async () => { + const mainProfileResource = solidLdoDataset.getResource(MAIN_PROFILE_URI); + + const data = await solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .startLinkQuery(mainProfileResource, MAIN_PROFILE_SUBJECT, { + name: true, + knows: { + name: true, + }, + }) + .run(); + + const resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(3); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(data.name).toBe("Main User"); + expect(data.knows?.toArray()[0].name).toBe("Other User"); + }); + + it("handles subscriptions if data changes locally", async () => { + const mainProfileResource = solidLdoDataset.getResource(MAIN_PROFILE_URI); + const linkQuery = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .startLinkQuery(mainProfileResource, MAIN_PROFILE_SUBJECT, { + name: true, + knows: { + name: true, + }, + }); + await linkQuery.subscribe(); + + // Should have regular information + let mainProfile = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .fromSubject(MAIN_PROFILE_SUBJECT); + let resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(3); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(mainProfile.name).toBe("Main User"); + expect(mainProfile.knows?.size).toBe(1); + expect(mainProfile.knows?.toArray()[0].name).toBe("Other User"); + + // Update to include a new document + const cMainProfile = changeData(mainProfile, mainProfileResource); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + cMainProfile.knows?.add({ "@id": THIRD_PROFILE_SUBJECT }); + await commitData(cMainProfile); + + // Wait for 200ms to allow the other file to be fetched + await wait(200); + + // After the data is committed, the third profile should be present + mainProfile = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .fromSubject(MAIN_PROFILE_SUBJECT); + resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(4); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(resourceUris).toContain(THIRD_PROFILE_URI); + expect(mainProfile.name).toBe("Main User"); + expect(mainProfile.knows?.size).toBe(2); + const knowNames = mainProfile.knows?.map((knowsPerson) => knowsPerson.name); + expect(knowNames).toContain("Other User"); + expect(knowNames).toContain("Third User"); + + // Unsubscribe + }); + + it("handles subscriptions if data changes on the Pod", async () => { + const mainProfileResource = solidLdoDataset.getResource(MAIN_PROFILE_URI); + const linkQuery = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .startLinkQuery(mainProfileResource, MAIN_PROFILE_SUBJECT, { + name: true, + knows: { + name: true, + }, + }); + + const unsubscribeId = await linkQuery.subscribe(); + + // Should have regular information + let mainProfile = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .fromSubject(MAIN_PROFILE_SUBJECT); + let resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(3); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(mainProfile.name).toBe("Main User"); + expect(mainProfile.knows?.size).toBe(1); + expect(mainProfile.knows?.toArray()[0].name).toBe("Other User"); + + let subscribedResources = linkQuery + .getSubscribedResources() + .map((resource) => resource.uri); + expect(subscribedResources.length).toBe(2); + expect(subscribedResources).toContain(MAIN_PROFILE_URI); + expect(subscribedResources).toContain(OTHER_PROFILE_URI); + + // Update data on the Pod + await s.authFetch(MAIN_PROFILE_URI, { + method: "PATCH", + body: "INSERT DATA { . }", + headers: { + "Content-Type": "application/sparql-update", + }, + }); + await wait(1000); + + // After the data is committed, the third profile should be present + mainProfile = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .fromSubject(MAIN_PROFILE_SUBJECT); + resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(4); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(resourceUris).toContain(THIRD_PROFILE_URI); + expect(mainProfile.name).toBe("Main User"); + expect(mainProfile.knows?.size).toBe(2); + const knowNames = mainProfile.knows?.map((knowsPerson) => knowsPerson.name); + expect(knowNames).toContain("Other User"); + expect(knowNames).toContain("Third User"); + + subscribedResources = linkQuery + .getSubscribedResources() + .map((resource) => resource.uri); + expect(subscribedResources.length).toBe(3); + expect(subscribedResources).toContain(MAIN_PROFILE_URI); + expect(subscribedResources).toContain(OTHER_PROFILE_URI); + expect(subscribedResources).toContain(THIRD_PROFILE_URI); + + // Unsubscribe + await linkQuery.unsubscribe(unsubscribeId); + + await wait(200); + + s.fetchMock.mockClear(); + + // Does not update when unsubscribed + await s.authFetch(MAIN_PROFILE_URI, { + method: "PATCH", + body: "INSERT DATA { . }", + headers: { + "Content-Type": "application/sparql-update", + }, + }); + await wait(1000); + + expect(s.fetchMock).not.toHaveBeenCalled(); + subscribedResources = linkQuery + .getSubscribedResources() + .map((resource) => resource.uri); + expect(subscribedResources.length).toBe(0); + + // Check that all resources are unsubscribed from notifications + const resources = solidLdoDataset.getResources(); + resources.forEach((resource) => { + expect(resource.isSubscribedToNotifications()).toBe(false); + }); + + const cMainProfile = changeData(mainProfile, mainProfileResource); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + cMainProfile.knows?.add({ + "@id": "http://localhost:3005/test-container/fifthProfile.ttl#me", + }); + await commitData(cMainProfile); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/mocks/MockConnectedLdoDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/mocks/MockConnectedLdoDataset.ts new file mode 100644 index 0000000..d17f2d7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/mocks/MockConnectedLdoDataset.ts @@ -0,0 +1,13 @@ +import { ConnectedLdoDataset } from "@ldo/connected"; +import { createDatasetFactory } from "@ldo/dataset"; +import { createTransactionDatasetFactory } from "@ldo/subscribable-dataset"; +import { mockConnectedPlugin } from "./MockConnectedPlugin.js"; + +export function createMockConnectedLdoDataset() { + const nextGraphLdoDataset = new ConnectedLdoDataset( + [mockConnectedPlugin], + createDatasetFactory(), + createTransactionDatasetFactory(), + ); + return nextGraphLdoDataset; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/mocks/MockConnectedPlugin.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/mocks/MockConnectedPlugin.ts new file mode 100644 index 0000000..c2ca09d --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/mocks/MockConnectedPlugin.ts @@ -0,0 +1,45 @@ +import type { ConnectedContext, ConnectedPlugin } from "@ldo/connected"; +import { MockResource } from "./MockResource.js"; +import { v4 } from "uuid"; + +/** + * The Type of the SolidConnectedContext + */ +export interface MockConnectedContext {} + +export interface MockConnectedPlugin + extends ConnectedPlugin< + "mock", + string, + MockResource, + MockConnectedContext, + undefined + > { + name: "mock"; + getResource: (uri: string, context: ConnectedContext) => MockResource; + createResource(context: ConnectedContext): Promise; +} + +export const mockConnectedPlugin: MockConnectedPlugin = { + name: "mock", + + getResource: function ( + uri: string, + context: ConnectedContext, + ): MockResource { + return new MockResource(uri, context); + }, + + createResource: async function (context): Promise { + return new MockResource(v4(), context); + }, + + isUriValid: function (uri: string): uri is string { + return typeof uri === "string"; + }, + + initialContext: {}, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore "Types" only exists for the typing system + types: {}, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/mocks/MockResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/mocks/MockResource.ts new file mode 100644 index 0000000..7af0951 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/mocks/MockResource.ts @@ -0,0 +1,66 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import EventEmitter from "events"; +import type { ConnectedContext } from "../../src/index.js"; +import { + Unfetched, + type ConnectedResult, + type Resource, + type ResourceError, + type ResourceEventEmitter, +} from "../../src/index.js"; +import type { DatasetChanges } from "@ldo/rdf-utils"; +import type { ReadSuccess } from "../../src/results/success/ReadSuccess.js"; +import { UpdateSuccess } from "../../src/results/success/UpdateSuccess.js"; +import { vi } from "vitest"; +import type { MockConnectedPlugin } from "./MockConnectedPlugin.js"; +import type { Quad } from "@rdfjs/types"; + +export class MockResource + extends (EventEmitter as new () => ResourceEventEmitter) + implements Resource +{ + isError = false as const; + uri: string; + type = "mock" as const; + status: ConnectedResult; + + protected context: ConnectedContext; + + constructor(uri: string, context: ConnectedContext) { + super(); + this.uri = uri; + this.status = new Unfetched(this); + this.context = context; + } + + isLoading = vi.fn<() => boolean>(); + isFetched = vi.fn<() => boolean>(); + isUnfetched = vi.fn<() => boolean>(); + isDoingInitialFetch = vi.fn<() => boolean>(); + isPresent = vi.fn<() => boolean | undefined>(); + isAbsent = vi.fn<() => boolean | undefined>(); + isSubscribedToNotifications = vi.fn<() => boolean>(); + + read = vi.fn<() => Promise | ResourceError>>(); + readIfUnfetched = + vi.fn<() => Promise | ResourceError>>(); + update = vi.fn< + ( + changes: DatasetChanges, + ) => Promise | ResourceError> + >((changes) => { + this.context.dataset.bulk(changes); + return new UpdateSuccess(this); + }); + + subscribeToNotifications = + vi.fn< + (options?: { + onNotification: (message: any) => void; + onNotificationError: (err: Error) => void; + }) => Promise + >(); + + unsubscribeFromNotifications = vi.fn<(id: string) => Promise>(); + unsubscribeFromAllNotifications = vi.fn<() => Promise>(); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/util/wait.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/util/wait.ts new file mode 100644 index 0000000..be2bee6 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/test/util/wait.ts @@ -0,0 +1,3 @@ +export async function wait(time: number) { + return new Promise((resolve) => setTimeout(resolve, time)); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/tsconfig.cjs.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/tsconfig.cjs.json new file mode 100644 index 0000000..affce40 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.cjs.json", + "compilerOptions": { + "outDir": "./dist/cjs", + "rootDir": "./src" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/tsconfig.esm.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/tsconfig.esm.json new file mode 100644 index 0000000..09f99c2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/tsconfig.esm.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "outDir": "./dist/esm", + "rootDir": "./src", + "declarationDir": "./dist/types" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/typedoc.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/typedoc.json new file mode 100644 index 0000000..31ad5e8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/typedoc.json @@ -0,0 +1,8 @@ +{ + "entryPoints": ["src/index.ts"], + "tsconfig": "tsconfig.build.json", + "out": "docs", + "allReflectionsHaveOwnDocument": true, + "hideInPageTOC": true, + "hideBreadcrumbs": true, +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/vitest.config.js b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/vitest.config.js new file mode 100644 index 0000000..9713f14 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/connected/vitest.config.js @@ -0,0 +1,9 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + coverage: { + provider: "istanbul", + }, + }, +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/Readme.md b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/Readme.md new file mode 100644 index 0000000..be0271a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/Readme.md @@ -0,0 +1,110 @@ +# Dataset + +An implementation of the full [RDF/JS Dataset API](https://rdf.js.org/dataset-spec/) + +## Installation + +``` +npm i @ldo/dataset +``` + +## Simple Example + +```typescript +import { createDataset } from "@ldo/dataset"; +import { quad, namedNode } from "@ldo/rdf-utils"; + +imports: quad, namedNode as MyNamedNode +const dataset = createDataset(); +dataset.add( + quad( + namedNode("http://example.org/cartoons#Zuko"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Firebender") + ) +); +/* +Prints: + . +*/ +console.log(dataset.toString()); +``` + +## Advanced Example + +The extended dataset implements all the [additional methods](https://rdf.js.org/dataset-spec/#dataset-interface) of the RDFJS dataset spec. + +Usage: +```typescript +import { createDataset } from "@ldo/dataset"; +import { quad, namedNode, literal } as rdfdm from '@ldo/rdf-utils'; +// Required for advanced features: +import * as rdfds from "@rdfjs/dataset"; +import { ExtendedDatasetFactory } from "@ldo/dataset"; +import { Dataset, Quad, DatasetCoreFactory, DatasetCore } from "@rdfjs/types"; + +const { dataset: initializeDatasetCore } = rdfds; + +/** + * Create a dataset with default settings + */ +const defaultDataset = createDataset(); + +/** + * Create a dataset with default settings and initialized values + */ +const initializedQuads = [ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat") + ), + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom") + ), +]; +const defaultDataset2 = createDataset(initializedQuads); + +/** + * (Advanced Feature) Create a dataset by injecting a chosen datasetCore and datasetCoreFactory + */ +const datasetFactory: DatasetCoreFactory = { + dataset: (quads?: Dataset | Quad[]): DatasetCore => { + return initializeDatasetCore( + Array.isArray(quads) ? quads : quads?.toArray() + ); + }, +}; +const extendedDatasetFactory = new ExtendedDatasetFactory(datasetFactory); +const customDataset = extendedDatasetFactory.dataset(initializedQuads); + +/** + * Do all the methods of the RDFJS Dataset interface. For a full list of methods, go to + * https://rdf.js.org/dataset-spec/#data-interfaces + */ +defaultDataset.add( + quad( + namedNode("http://example.org/cartoons#Miuki"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat") + ) +); +const combinedDataset = defaultDataset.union(defaultDataset2); +const differenceDataset = combinedDataset.difference(customDataset); +// Prints true because "defaultDataset2" and "customDataset" have equal values +// combinedDataset = defaultDataset ∪ defaultDataset2 +// differenceDatasset = defaultDataset \ customDataset +// Therefore differenceDataset == defaultDataset +console.log(differenceDataset.equals(defaultDataset)); +``` + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/example/extendedDatasetExample.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/example/extendedDatasetExample.ts new file mode 100644 index 0000000..c962d0a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/example/extendedDatasetExample.ts @@ -0,0 +1,69 @@ +import { createDataset } from "../src/index.js"; +// Required for advanced features: +import * as rdfds from "@rdfjs/dataset"; +import { ExtendedDatasetFactory } from "../src/index.js"; +import { namedNode, quad, literal } from "@ldo/rdf-utils"; +import type { + Dataset, + Quad, + DatasetCoreFactory, + DatasetCore, +} from "@rdfjs/types"; + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +const { dataset: initializeDatasetCore } = rdfds.default || rdfds; + +/** + * Create a dataset with default settings + */ +const defaultDataset = createDataset(); + +/** + * Create a dataset with default settings and initialized values + */ +const initializedQuads = [ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), +]; +const defaultDataset2 = createDataset(initializedQuads); + +/** + * (Advanced Feature) Create a dataset by injecting a chosen datasetCore and datasetCoreFactory + */ +const datasetFactory: DatasetCoreFactory = { + dataset: (quads?: Dataset | Quad[]): DatasetCore => { + return initializeDatasetCore( + Array.isArray(quads) ? quads : quads?.toArray(), + ); + }, +}; +const extendedDatasetFactory = new ExtendedDatasetFactory(datasetFactory); +const customDataset = extendedDatasetFactory.dataset(initializedQuads); + +/** + * Do all the methods of the RDFJS Dataset interface. For a full list of methods, go to + * https://rdf.js.org/dataset-spec/#data-interfaces + */ +defaultDataset.add( + quad( + namedNode("http://example.org/cartoons#Miuki"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), +); +const combinedDataset = defaultDataset.union(defaultDataset2); +const differenceDataset = combinedDataset.difference(customDataset); +// Prints true because "defaultDataset2" and "customDataset" have equal values +// combinedDataset = defaultDataset ∪ defaultDataset2 +// differenceDatasset = defaultDataset \ customDataset +// Therefore differenceDataset == defaultDataset +console.log(differenceDataset.equals(defaultDataset)); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/example/loadDataExample.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/example/loadDataExample.ts new file mode 100644 index 0000000..cdaea23 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/example/loadDataExample.ts @@ -0,0 +1,42 @@ +import { serializedToDataset } from "../src/index.js"; + +async function run(): Promise { + // Create an ExtendedDataset using Turtle + const turtleData = ` + @prefix : <#>. + @prefix elem: . + @prefix card: . + + :this + elem:author card:me. + `; + const turtleDataset = await serializedToDataset(turtleData, { + baseIRI: + "https://jackson.solidcommunity.net/IndividualChats/jackson.solidcommunity.net/index.ttl#", + // NOTE: the "format" field isn't required because Turtle is the default parser + }); + + // Create a SubcribableDataset using JSON-LD + const jsonLdData = [ + { + "@id": + "https://jackson.solidcommunity.net/IndividualChats/jackson.solidcommunity.net/index.ttl#this", + "http://purl.org/dc/elements/1.1/author": [ + { + "@id": "https://jackson.solidcommunity.net/profile/card#me", + }, + ], + }, + { + "@id": "https://jackson.solidcommunity.net/profile/card#me", + }, + ]; + const jsonLdDataset = await serializedToDataset(JSON.stringify(jsonLdData), { + baseIRI: + "https://jackson.solidcommunity.net/IndividualChats/jackson.solidcommunity.net/index.ttl#", + format: "application/ld+json", + }); + // Returns true because the input data describes the same triple. + console.log(turtleDataset.equals(jsonLdDataset)); +} +run(); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/jest.config.cjs b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/jest.config.cjs new file mode 100644 index 0000000..3ad2cee --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/jest.config.cjs @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +// packages/dataset/jest.config.cjs +const sharedConfig = require("../../jest.config.js"); + +module.exports = { + ...sharedConfig, + rootDir: "./", // Sets context for this package + collectCoverageFrom: [ + "src/**/*.ts", + "!src/**/*.d.ts", + // "!src/index.ts", // Optional, if index.ts only re-exports + ], + modulePathIgnorePatterns: ["/dist/"], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/package.json new file mode 100644 index 0000000..b5c764b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/package.json @@ -0,0 +1,60 @@ +{ + "name": "@ldo/dataset", + "version": "1.0.0-alpha.30", + "description": "An RDFJS dataset implementation", + "type": "module", + "main": "./dist/cjs/index.cjs", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.cjs" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "rimraf dist && npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --project tsconfig.cjs.json && node ../../scripts/rename-to-cjs.js", + "build:esm": "tsc --project tsconfig.esm.json", + "test": "jest --coverage", + "example:extendedDataset": "ts-node ./example/extendedDatasetExample.ts", + "example:loadData": "ts-node ./example/loadDataExample.ts", + "prepublishOnly": " npm run build", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "remove-dist": "rimraf dist/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/dataset#readme", + "devDependencies": { + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "@types/rdfjs__dataset": "^1.0.4", + "@types/readable-stream": "^2.3.13", + "cross-env": "^7.0.3", + "ts-node": "^9.1.1" + }, + "dependencies": { + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@rdfjs/dataset": "^1.1.0", + "buffer": "^6.0.3", + "readable-stream": "^4.2.0" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "gitHead": "840910c56ec3f61416f031cc76771a5673af6757" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/ExtendedDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/ExtendedDataset.ts new file mode 100644 index 0000000..46156a2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/ExtendedDataset.ts @@ -0,0 +1,394 @@ +import { + type DatasetCore, + type Dataset, + type BaseQuad, + type Stream, + type Term, + type DatasetCoreFactory, + type Quad, +} from "@rdfjs/types"; +import { datasetToString } from "@ldo/rdf-utils"; +import { Readable } from "readable-stream"; + +/** + * A full implementation of the RDF JS Dataset interface. + */ +export default class ExtendedDataset + implements Dataset +{ + /** + * The main backing dataset + */ + protected dataset: DatasetCore; + + /** + * A factory that generates datasets for the methods + */ + protected datasetCoreFactory: DatasetCoreFactory; + + /** + * Constructor + */ + constructor( + dataset: DatasetCore, + datasetFactory: DatasetCoreFactory, + ) { + this.dataset = dataset; + this.datasetCoreFactory = datasetFactory; + } + + /** + * Creates a blank dataset using the dataset factory + */ + private createBlankDataset(): Dataset { + return new ExtendedDataset( + this.datasetCoreFactory.dataset(), + this.datasetCoreFactory, + ); + } + + /** + * Imports the quads into this dataset. + * This method differs from Dataset.union in that it adds all quads to the current instance, rather than combining quads and the current instance to create a new instance. + * @param quads + * @returns the dataset instance it was called on. + */ + addAll(quads: InAndOutQuad[] | Dataset): this { + for (const quad of quads) { + this.add(quad); + } + return this; + } + + /** + * Returns true if the current instance is a superset of the given dataset; differently put: if the given dataset is a subset of, is contained in the current dataset. + * Blank Nodes will be normalized. + * @param other + */ + contains(other: Dataset): boolean { + if (other.size > this.size) { + return false; + } + for (const quad of other) { + if (!this.has(quad)) { + return false; + } + } + return true; + } + + /** + * This method removes the quads in the current instance that match the given arguments. The logic described in Quad Matching is applied for each quad in this dataset to select the quads which will be deleted. + * @param subject + * @param predicate + * @param object + * @param graph + * @returns the dataset instance it was called on. + */ + deleteMatches( + subject?: Term, + predicate?: Term, + object?: Term, + graph?: Term, + ): this { + const matching = this.match(subject, predicate, object, graph); + for (const quad of matching) { + this.dataset.delete(quad); + } + return this; + } + + /** + * Returns a new dataset that contains alls quads from the current dataset, not included in the given dataset. + * @param other + */ + difference( + other: DatasetCore, + ): Dataset { + const dataset = this.createBlankDataset(); + for (const quad of this) { + if (!other.has(quad)) { + dataset.add(quad); + } + } + return dataset; + } + + /** + * Returns true if the current instance contains the same graph structure as the given dataset. + * @param other + */ + equals(other: Dataset): boolean { + if (this.size !== other.size) { + return false; + } + for (const quad of this) { + if (!other.has(quad)) { + return false; + } + } + return true; + } + + /** + * Universal quantification method, tests whether every quad in the dataset passes the test implemented by the provided iteratee. + * This method immediately returns boolean false once a quad that does not pass the test is found. + * This method always returns boolean true on an empty dataset. + * Note: This method is aligned with Array.prototype.every() in ECMAScript-262. + * @param iteratee + */ + every(iteratee: (quad: InAndOutQuad, dataset: this) => boolean): boolean { + for (const quad of this) { + if (!iteratee(quad, this)) { + return false; + } + } + return true; + } + + /** + * Creates a new dataset with all the quads that pass the test implemented by the provided iteratee. + * Note: This method is aligned with Array.prototype.filter() in ECMAScript-262. + * @param iteratee + */ + filter( + iteratee: (quad: InAndOutQuad, dataset: this) => boolean, + ): Dataset { + const dataset = this.createBlankDataset(); + for (const quad of this) { + if (iteratee(quad, this)) { + dataset.add(quad); + } + } + return dataset; + } + + /** + * Executes the provided iteratee once on each quad in the dataset. + * Note: This method is aligned with Array.prototype.forEach() in ECMAScript-262. + * @param iteratee + */ + forEach(iteratee: (quad: InAndOutQuad, dataset: this) => void): void { + for (const quad of this) { + iteratee(quad, this); + } + } + + /** + * Imports all quads from the given stream into the dataset. + * The stream events end and error are wrapped in a Promise. + * @param stream + */ + import(stream: Stream): Promise { + return new Promise((resolve, reject) => { + stream + .on("data", (quad) => { + this.add(quad); + }) + .on("end", () => { + resolve(this); + }) + .on("error", (err) => reject(err)); + }); + } + + /** + * Returns a new dataset containing alls quads from the current dataset that are also included in the given dataset. + * @param other + */ + intersection( + other: Dataset, + ): Dataset { + const dataset = this.createBlankDataset(); + const iteratingDataset = this.size < other.size ? this : other; + const comparingDataset = this.size < other.size ? other : this; + for (const quad of iteratingDataset) { + if (comparingDataset.has(quad)) { + dataset.add(quad); + } + } + return dataset; + } + + /** + * Returns a new dataset containing all quads returned by applying iteratee to each quad in the current dataset. + * @param iteratee + */ + map( + iteratee: (quad: InAndOutQuad, dataset: this) => InAndOutQuad, + ): Dataset { + const dataset = this.createBlankDataset(); + for (const quad of this) { + dataset.add(iteratee(quad, this)); + } + return dataset; + } + + /** + * This method calls the iteratee on each quad of the DatasetCore. The first time the iteratee is called, the accumulator value is the initialValue or, if not given, equals to the first quad of the Dataset. The return value of the iteratee is used as accumulator value for the next calls. + * This method returns the return value of the last iteratee call. + * Note: This method is aligned with Array.prototype.reduce() in ECMAScript-262. + * @param iteratee + * @param initialValue + */ + reduce( + iteratee: (accumulator: A, quad: InAndOutQuad, dataset: this) => A, + initialValue?: A, + ): A { + if (this.size === 0 && initialValue == undefined) { + throw new Error( + "Cannot reduce an empty Dataset without an initial value.", + ); + } + const thisIterator: Iterator = this[Symbol.iterator](); + let iteratorResult = thisIterator.next(); + let accumulatedValue: A = initialValue as A; + while (!iteratorResult.done) { + accumulatedValue = iteratee(accumulatedValue, iteratorResult.value, this); + iteratorResult = thisIterator.next(); + } + return accumulatedValue; + } + + /** + * Existential quantification method, tests whether some quads in the dataset pass the test implemented by the provided iteratee. + * Note: This method is aligned with Array.prototype.some() in ECMAScript-262. + * @param iteratee + * @returns boolean true once a quad that passes the test is found. + */ + some(iteratee: (quad: InAndOutQuad, dataset: this) => boolean): boolean { + for (const quad of this) { + if (iteratee(quad, this)) { + return true; + } + } + return false; + } + + /** + * Returns the set of quads within the dataset as a host language native sequence, for example an Array in ECMAScript-262. + * Note: Since a DatasetCore is an unordered set, the order of the quads within the returned sequence is arbitrary. + */ + toArray(): InAndOutQuad[] { + const array: InAndOutQuad[] = []; + for (const quad of this) { + array.push(quad); + } + return array; + } + + /** + * Returns an N-Quads string representation of the dataset, preprocessed with RDF Dataset Normalization algorithm. + */ + toCanonical(): string { + throw new Error("Method not implemented."); + } + + /** + * Returns a stream that contains all quads of the dataset. + */ + toStream(): Stream { + const iterator = this[Symbol.iterator](); + let curNext = iterator.next(); + const stream = new Readable({ + objectMode: true, + read() { + if (curNext.done || !curNext.value) { + this.push(null); + return; + } + this.push(curNext.value); + curNext = iterator.next(); + }, + }); + return stream; + } + + /** + * Returns an N-Quads string representation of the dataset. + * No prior normalization is required, therefore the results for the same quads may vary depending on the Dataset implementation. + */ + toString(): string { + return datasetToString(this as Dataset, { format: "N-Triples" }); + } + + /** + * Returns a new Dataset that is a concatenation of this dataset and the quads given as an argument. + * @param other + */ + union( + other: Dataset, + ): Dataset { + const dataset = this.createBlankDataset(); + for (const quad of this) { + dataset.add(quad); + } + for (const quad of other) { + dataset.add(quad); + } + return dataset; + } + + /** + * This method returns a new dataset that is comprised of all quads in the current instance matching the given arguments. The logic described in Quad Matching is applied for each quad in this dataset to check if it should be included in the output dataset. + * @param subject + * @param predicate + * @param object + * @param graph + * @returns a Dataset with matching triples + */ + match( + subject?: Term | null, + predicate?: Term | null, + object?: Term | null, + graph?: Term | null, + ): Dataset { + return new ExtendedDataset( + this.dataset.match(subject, predicate, object, graph), + this.datasetCoreFactory, + ); + } + + /** + * A non-negative integer that specifies the number of quads in the set. + */ + public get size(): number { + return this.dataset.size; + } + + /** + * Adds the specified quad to the dataset. + * Existing quads, as defined in Quad.equals, will be ignored. + * @param quad + * @returns the dataset instance it was called on. + */ + public add(quad: InAndOutQuad): this { + this.dataset.add(quad); + return this; + } + + /** + * Removes the specified quad from the dataset. + * This method returns the dataset instance it was called on. + * @param quad + */ + public delete(quad: InAndOutQuad): this { + this.dataset.delete(quad); + return this; + } + + /** + * Determines whether a dataset includes a certain quad, returning true or false as appropriate. + * @param quad + */ + public has(quad: InAndOutQuad): boolean { + return Boolean(this.dataset.has(quad)); + } + + /** + * Returns an iterator + */ + public [Symbol.iterator](): Iterator { + return this.dataset[Symbol.iterator](); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/ExtendedDatasetFactory.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/ExtendedDatasetFactory.ts new file mode 100644 index 0000000..7f49bb6 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/ExtendedDatasetFactory.ts @@ -0,0 +1,34 @@ +import type { + DatasetFactory, + BaseQuad, + Dataset, + DatasetCoreFactory, +} from "@rdfjs/types"; +import ExtendedDataset from "./ExtendedDataset.js"; + +/** + * A DatasetFactory that creates an ExtendedDataset given a DatasetCoreFactory. + */ +export default class ExtendedDatasetFactory< + InAndOutQuad extends BaseQuad = BaseQuad, +> implements DatasetFactory +{ + private datasetCoreFactory: DatasetCoreFactory; + constructor( + datasetCoreFactory: DatasetCoreFactory, + ) { + this.datasetCoreFactory = datasetCoreFactory; + } + + dataset( + quads?: Dataset | InAndOutQuad[], + ): ExtendedDataset { + return new ExtendedDataset( + // The typings are incorrect on the dataset core factory + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + this.datasetCoreFactory.dataset(quads), + this.datasetCoreFactory, + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/createDatasetFromSerializedInput.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/createDatasetFromSerializedInput.ts new file mode 100644 index 0000000..29c6ad6 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/createDatasetFromSerializedInput.ts @@ -0,0 +1,26 @@ +import type { Dataset, DatasetFactory, Quad } from "@rdfjs/types"; +import type { ParserOptions } from "@ldo/rdf-utils"; +import { serializedToQuads } from "@ldo/rdf-utils"; + +/** + * Creates a dataset with a string input that could be JON-LD, Turtle, N-Triples, TriG, RDF*, or N3. + * @param datasetFactory A datasetFactory that will initialize a returned dataset.\ + * @param data A string representation of RDF Data in JSON-LD, Turtle, N-Triples, TriG, RDF*, or N3. + * @param options Parser options: { + * format?: string; + * factory?: RDF.DataFactory; + * baseIRI?: string; + * blankNodePrefix?: string; + * } + * @returns A dataset + */ +export default async function createDatasetFromSerializedInput< + ReturnDataset extends Dataset = Dataset, +>( + datasetFactory: DatasetFactory, + data: string, + options?: ParserOptions, +): Promise { + const quads = await serializedToQuads(data, options); + return datasetFactory.dataset(quads) as unknown as ReturnDataset; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/createExtendedDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/createExtendedDataset.ts new file mode 100644 index 0000000..b29ccd1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/createExtendedDataset.ts @@ -0,0 +1,41 @@ +import type { + Dataset, + DatasetCoreFactory, + DatasetCore, + Quad, +} from "@rdfjs/types"; +import ExtendedDatasetFactory from "./ExtendedDatasetFactory.js"; +import * as rdfds from "@rdfjs/dataset"; +import type ExtendedDataset from "./ExtendedDataset.js"; + +const initializeDatasetCore: (typeof rdfds)["dataset"] = + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + rdfds.default?.dataset || rdfds.dataset; + +/** + * Creates a dataset factory that generates ExtendedDatasets + * @returns DatasetFactory + */ +export function createExtendedDatasetFactory(): ExtendedDatasetFactory { + const datasetFactory: DatasetCoreFactory = { + dataset: (quads?: Dataset | Quad[]): DatasetCore => { + return initializeDatasetCore( + Array.isArray(quads) ? quads : quads?.toArray(), + ); + }, + }; + return new ExtendedDatasetFactory(datasetFactory); +} + +/** + * Creates an ExtendedDataset + * @param quads: A dataset or array of Quads to initialize the dataset. + * @returns Dataset + */ +export default function createExtendedDataset( + quads?: Dataset | Quad[], +): ExtendedDataset { + const extendedDatasetFactory = createExtendedDatasetFactory(); + return extendedDatasetFactory.dataset(quads); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/createExtendedDatasetFromSerializedInput.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/createExtendedDatasetFromSerializedInput.ts new file mode 100644 index 0000000..8a7f1f1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/createExtendedDatasetFromSerializedInput.ts @@ -0,0 +1,28 @@ +import type { Quad } from "@rdfjs/types"; +import type { ParserOptions } from "@ldo/rdf-utils"; +import createDatasetFromSerializedInput from "./createDatasetFromSerializedInput.js"; +import { createExtendedDatasetFactory } from "./createExtendedDataset.js"; +import type ExtendedDataset from "./ExtendedDataset.js"; + +/** + * Creates an ExtendedDataset with a string input that could be JSON-LD, Turtle, N-Triples, TriG, RDF*, or N3. + * @param data A string representation of RDF Data in JSON-LD, Turtle, N-Triples, TriG, RDF*, or N3. + * @param options Parser options: { + * format?: string; + * factory?: RDF.DataFactory; + * baseIRI?: string; + * blankNodePrefix?: string; + * } + * @returns A dataset + */ +export default async function createExtendedDatasetFromSerializedInput( + data: string, + options?: ParserOptions, +): Promise> { + const datasetFactory = createExtendedDatasetFactory(); + return createDatasetFromSerializedInput>( + datasetFactory, + data, + options, + ); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/index.ts new file mode 100644 index 0000000..0bc758f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/src/index.ts @@ -0,0 +1,9 @@ +export { + default as createDataset, + createExtendedDatasetFactory as createDatasetFactory, +} from "./createExtendedDataset.js"; +export { default as createDatasetFromSerializedInput } from "./createDatasetFromSerializedInput.js"; +export { default as serializedToDataset } from "./createExtendedDatasetFromSerializedInput.js"; + +export { default as ExtendedDataset } from "./ExtendedDataset.js"; +export { default as ExtendedDatasetFactory } from "./ExtendedDatasetFactory.js"; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/ExtendedDataset.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/ExtendedDataset.test.ts new file mode 100644 index 0000000..40d67f8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/ExtendedDataset.test.ts @@ -0,0 +1,8 @@ +import { createDataset } from "../src/index.js"; +import testDataset from "./dataset.testHelper.js"; + +describe("ExtendedDataset", () => { + testDataset({ + dataset: createDataset, + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/createExtendedDataset.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/createExtendedDataset.test.ts new file mode 100644 index 0000000..fe0fbf3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/createExtendedDataset.test.ts @@ -0,0 +1,12 @@ +import { createDataset } from "../src/index.js"; +import { quad, namedNode } from "@ldo/rdf-utils"; + +describe("createExtendedDataset", () => { + it("creates a dataset when give another datset", () => { + const dataset1 = createDataset([ + quad(namedNode("a"), namedNode("b"), namedNode("c")), + ]); + const dataset2 = createDataset(dataset1); + expect(dataset1.equals(dataset2)).toBe(true); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/createExtendedDatasetFromSerializedInput.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/createExtendedDatasetFromSerializedInput.test.ts new file mode 100644 index 0000000..7b5fdd1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/createExtendedDatasetFromSerializedInput.test.ts @@ -0,0 +1,32 @@ +import { serializedToDataset } from "../src/index.js"; +import { turtleData, jsonLdData, turtleData2 } from "./sampleData.js"; + +describe("createExtendedDatasetFromSerializedInput", () => { + it("creates a dataset with turtle", async () => { + const dataset = await serializedToDataset(turtleData); + expect(dataset.size).toBe(9); + expect(dataset.toString()).toBe( + '<#id1604448082795> "2020-11-04T00:01:22Z"^^ .\n<#id1604448082795> .\n<#id1604448082795> "#e1f7cd" .\n<#this> .\n<#this> .\n<#this> "2020-11-04T00:01:20Z"^^ .\n<#this> "Chat channel" .\n<#this> <#id1604448082795> .\n<#this> <#SharedPreferences> .\n', + ); + }); + + it.skip("creates a dataset with json-ld", async () => { + const dataset = await serializedToDataset(JSON.stringify(jsonLdData), { + format: "application/ld+json", + }); + expect(dataset.size).toBe(9); + }); + + it("Should create a dataset with some more turtle", async () => { + const dataset = await serializedToDataset(turtleData2); + expect(dataset.toString()).toBe( + ' "Robert" .\n "Taylor" .\n "Johnson" .\n "2020-11-04T00:01:22Z" .\n .\n', + ); + }); + + it.skip("Should error when given invalid JSON", async () => { + await expect( + serializedToDataset('{ bad" json', { format: "application/ld+json" }), + ).rejects.toThrow("Unexpected token b in JSON at position 2"); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/dataset.testHelper.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/dataset.testHelper.ts new file mode 100644 index 0000000..64b1ab6 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/dataset.testHelper.ts @@ -0,0 +1,644 @@ +import { quad, namedNode, literal } from "@ldo/rdf-utils"; +import type { BaseQuad, Dataset, DatasetFactory, Quad } from "@rdfjs/types"; +import type { SubjectNode, ObjectNode, PredicateNode } from "@ldo/rdf-utils"; +import { Readable } from "stream"; + +export default function testDataset( + datasetFactory: DatasetFactory, +): void { + describe("Standard Dataset Test", () => { + let dataset: Dataset; + + beforeEach(() => { + dataset = datasetFactory.dataset(); + }); + + const initializeDataset = () => { + dataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), + ]); + }; + + it("Adds a quad", () => { + const addedQuad = quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ); + dataset.add(addedQuad); + expect(dataset.has(addedQuad)).toBe(true); + }); + + it("Deletes a quad", () => { + initializeDataset(); + const deletedQuad = quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ); + dataset.delete(deletedQuad); + expect(dataset.has(deletedQuad)).toBe(false); + }); + + it("Checks if it has a quad when it does", () => { + initializeDataset(); + const hadQuad = quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ); + expect(dataset.has(hadQuad)).toBe(true); + }); + + it("Checks if it has a quad when it doesn't", () => { + initializeDataset(); + const hadQuad = quad( + namedNode("http://fake.com"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ); + expect(dataset.has(hadQuad)).toBe(false); + }); + + it("Can match a quad", () => { + initializeDataset(); + const matchDataset = dataset.match( + null, + namedNode("http://example.org/cartoons#name"), + null, + ); + expect( + matchDataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), + ), + ).toBe(true); + }); + + it("Iterates over itself", () => { + const quads: Quad[] = []; + initializeDataset(); + for (const curQuad of dataset) { + quads.push(curQuad); + } + expect(quads.length).toBe(2); + }); + + it("Adds an array of Quads", () => { + const quads = [ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), + ]; + dataset.addAll(quads); + expect(dataset.has(quads[0])).toBe(true); + expect(dataset.has(quads[1])).toBe(true); + }); + + it("Detects if one dataset contains another when it does", () => { + initializeDataset(); + const containedDataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + expect(dataset.contains(containedDataset)).toBe(true); + }); + + it("Detects if one dataset contains another when it doesn't", () => { + initializeDataset(); + const containedDataset = datasetFactory.dataset([ + quad( + namedNode("http://fake.com"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + expect(dataset.contains(containedDataset)).toBe(false); + }); + + it("Datects if one dataset contains another when it does and other is empty", () => { + initializeDataset(); + const containedDataset = datasetFactory.dataset(); + expect(dataset.contains(containedDataset)).toBe(true); + }); + + it("Datects if one dataset contains another when it doesn't and this is empty", () => { + const containedDataset = datasetFactory.dataset([ + quad( + namedNode("http://fake.com"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + expect(dataset.contains(containedDataset)).toBe(false); + }); + + it("Datects if one dataset contains another when it does and this and other are empty", () => { + const containedDataset = datasetFactory.dataset(); + expect(dataset.contains(containedDataset)).toBe(true); + }); + + it("Detects if one dataset contains another when it doesn't", () => { + initializeDataset(); + const containedDataset = datasetFactory.dataset([ + quad( + namedNode("http://fake.com"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + expect(dataset.contains(containedDataset)).toBe(false); + }); + + it("Detects if one dataset contains another when the given dataset is larger", () => { + initializeDataset(); + const containedDataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://example.org/cartoons#Licky"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://example.org/cartoons#Tulip"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + expect(dataset.contains(containedDataset)).toBe(false); + }); + + it("Deletes matching quads", () => { + initializeDataset(); + dataset.deleteMatches( + undefined, + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + undefined, + ); + expect( + dataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ), + ).toBe(false); + }); + + it("Finds the difference between two datasets", () => { + initializeDataset(); + const otherDataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + const differenceDataset = dataset.difference(otherDataset); + expect( + differenceDataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ), + ).toBe(false); + expect( + differenceDataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), + ), + ).toBe(true); + }); + + it("Checks if datasets are equal when they are", () => { + initializeDataset(); + const otherDataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), + ]); + expect(dataset.equals(otherDataset)).toBe(true); + }); + + it("Checks if datasets are equal when they aren't", () => { + initializeDataset(); + const otherDataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Licky"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://example.org/cartoons#Licky"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), + ]); + expect(dataset.equals(otherDataset)).toBe(false); + }); + + it("Checks if datasets are equal when they aren't and don't have the same size", () => { + initializeDataset(); + const otherDataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + expect(dataset.equals(otherDataset)).toBe(false); + }); + + it("Checks if datasets are equal when they aren't and other dataset is empty", () => { + initializeDataset(); + const otherDataset = datasetFactory.dataset(); + expect(dataset.equals(otherDataset)).toBe(false); + }); + + it("Checks if datasets are equal when they aren't and this dataset is empty", () => { + const otherDataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + expect(dataset.equals(otherDataset)).toBe(false); + }); + + it("Checks if datasets are equal when they are and this and other datasets are empty", () => { + const otherDataset = datasetFactory.dataset(); + expect(dataset.equals(otherDataset)).toBe(true); + }); + + it("runs the every function when it should return true", () => { + initializeDataset(); + expect(dataset.every(() => true)).toBe(true); + }); + + it("runs the every function when it should return false", () => { + initializeDataset(); + expect(dataset.every(() => false)).toBe(false); + }); + + it("runs filter", () => { + initializeDataset(); + const newDataset = dataset.filter( + (curQuad) => + curQuad.predicate.value === + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + ); + expect(newDataset.size).toBe(1); + expect( + newDataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ), + ).toBe(true); + }); + + it("runs forEach", () => { + initializeDataset(); + const quads: BaseQuad[] = []; + dataset.forEach((curQuad) => { + quads.push(curQuad); + }); + expect( + quads[0].equals( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ), + ).toBe(true); + expect( + quads[1].equals( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), + ), + ).toBe(true); + }); + + it("Imports quads from a stream", async () => { + const stream = datasetFactory + .dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), + ]) + .toStream(); + await dataset.import(stream); + expect( + dataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ), + ).toBe(true); + expect( + dataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), + ), + ).toBe(true); + }); + + it("Rejects import stream if stream errors", async () => { + const badStream = new Readable({ + read() { + this.emit("error", new Error("This is a bad stream.")); + }, + }); + await expect(dataset.import(badStream)).rejects.toThrow( + "This is a bad stream.", + ); + }); + + it("finds the intersection when this is bigger", () => { + initializeDataset(); + const otherDataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + const intersectionDataset = dataset.intersection(otherDataset); + expect(intersectionDataset.size).toBe(1); + expect( + intersectionDataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ), + ).toBe(true); + }); + + it("finds the intersection when other is bigger", () => { + initializeDataset(); + const otherDataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://fake1.com"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://fake2.com"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + const intersectionDataset = dataset.intersection(otherDataset); + expect(intersectionDataset.size).toBe(1); + expect( + intersectionDataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ), + ).toBe(true); + }); + + it("Maps the dataset", () => { + initializeDataset(); + const mappedDataset = dataset.map((curQuad) => { + return quad( + curQuad.predicate as SubjectNode, + curQuad.predicate as PredicateNode, + curQuad.predicate as ObjectNode, + ); + }); + expect(mappedDataset.size).toBe(2); + expect( + mappedDataset.has( + quad( + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + ), + ), + ).toBe(true); + expect( + mappedDataset.has( + quad( + namedNode("http://example.org/cartoons#name"), + namedNode("http://example.org/cartoons#name"), + namedNode("http://example.org/cartoons#name"), + ), + ), + ).toBe(true); + }); + + it("Reduces the dataset", () => { + initializeDataset(); + const reducedSubjects = dataset.reduce((agg, curQuad) => { + return `${agg}${curQuad.subject.value}`; + }, ""); + expect(reducedSubjects).toBe( + "http://example.org/cartoons#Tomhttp://example.org/cartoons#Tom", + ); + }); + + it("Reduces an empty dataset", () => { + const reducedSubjects = dataset.reduce((agg, curQuad) => { + return `${agg}${curQuad.subject.value}`; + }, ""); + expect(reducedSubjects).toBe(""); + }); + + it("Throws an error if reduce is called on an empty dataset without an initial value", () => { + expect(() => + dataset.reduce(() => { + /* Do nothing */ + }), + ).toThrow("Cannot reduce an empty Dataset without an initial value."); + }); + + it("Determines of some quad satifies an iteratee when it does", () => { + initializeDataset(); + expect( + dataset.some( + (curQuad) => + curQuad.predicate.value === "http://example.org/cartoons#name", + ), + ).toBe(true); + }); + + it("Determines of some quad satifies an iteratee when it doesn't", () => { + initializeDataset(); + expect( + dataset.some( + (curQuad) => curQuad.predicate.value === "http://fake.com", + ), + ).toBe(false); + }); + + it("Converts the dataset into an array", () => { + initializeDataset(); + const arr = dataset.toArray(); + expect(Array.isArray(arr)).toBe(true); + expect(arr.length).toBe(2); + expect(arr[0].predicate.value).toBe( + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + ); + expect(arr[1].predicate.value).toBe("http://example.org/cartoons#name"); + }); + + it("Converts the empty dataset into an empty array", () => { + const arr = dataset.toArray(); + expect(Array.isArray(arr)).toBe(true); + expect(arr.length).toBe(0); + }); + + it("Throws a not implemented error for toCononical", () => { + expect(() => dataset.toCanonical()).toThrow("Method not implemented."); + }); + + it("Streams itself", async () => { + initializeDataset(); + return new Promise((resolve, reject) => { + const stream = dataset.toStream(); + const onDataFunc = jest.fn(); + stream.on("data", onDataFunc); + stream.on("error", reject); + stream.on("end", () => { + expect(onDataFunc).toBeCalledTimes(2); + resolve(); + }); + }); + }); + + it("successfully runs toString", () => { + initializeDataset(); + const stringified = dataset.toString(); + expect(stringified).toBe( + ` .\n "Tom" .\n`, + ); + }); + + it("runs toString and gets a compliant N-Triple", () => { + const dataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("https://example.org/age"), + literal("6", "http://www.w3.org/2001/XMLSchema#integer"), + ), + ]); + expect(dataset.toString()).toBe( + ' "6"^^ .\n', + ); + }); + + it("Finds a union", () => { + initializeDataset(); + const otherDataset = datasetFactory.dataset([ + quad( + namedNode("http://example.org/cartoons#Licky"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ]); + const unionDataset = dataset.union(otherDataset); + expect(unionDataset.size).toBe(3); + expect( + unionDataset.has( + quad( + namedNode("http://example.org/cartoons#Licky"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ), + ).toBe(true); + expect( + unionDataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://example.org/cartoons#Cat"), + ), + ), + ).toBe(true); + expect( + unionDataset.has( + quad( + namedNode("http://example.org/cartoons#Tom"), + namedNode("http://example.org/cartoons#name"), + literal("Tom"), + ), + ), + ).toBe(true); + }); + }); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/index.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/index.test.ts new file mode 100644 index 0000000..1b676f5 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/index.test.ts @@ -0,0 +1,19 @@ +import { + createDataset, + createDatasetFactory, + createDatasetFromSerializedInput, + serializedToDataset, + ExtendedDataset, + ExtendedDatasetFactory, +} from "../src/index.js"; + +describe("Exports", () => { + it("Has all exports", () => { + expect(createDataset); + expect(ExtendedDataset); + expect(ExtendedDatasetFactory); + expect(serializedToDataset); + expect(createDatasetFactory); + expect(createDatasetFromSerializedInput); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/sampleData.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/sampleData.ts new file mode 100644 index 0000000..bb5e6c4 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/test/sampleData.ts @@ -0,0 +1,101 @@ +export const turtleData = ` + @prefix : <#>. + @prefix mee: . + @prefix XML: . + @prefix n5: . + @prefix c6: . + @prefix ui: . + @prefix ic: . + @prefix flow: . + + :id1604448082795 + ic:dtstart "2020-11-04T00:01:22Z"^^XML:dateTime; + flow:participant c6:me; + ui:backgroundColor "#e1f7cd". + :this + a mee:LongChat; + n5:author c6:me; + n5:created "2020-11-04T00:01:20Z"^^XML:dateTime; + n5:title "Chat channel"; + flow:participation :id1604448082795; + ui:sharedPreferences :SharedPreferences. + `; + +export const turtleData2 = ` + @prefix foaf: . + @prefix xsd: . + @prefix ic: . + + foaf:givenName "Robert"^^xsd:string, "Taylor"^^xsd:string ; + foaf:familyName "Johnson"^^xsd:string ; + ic:dtstart "2020-11-04T00:01:22Z"^^xsd:string ; + # no phone number needed + foaf:mbox + . + `; + +export const jsonLdData = [ + { + "@id": "http://www.w3.org/ns/pim/meeting#LongChat", + }, + { + "@id": + "https://jackson.solidcommunity.net/IndividualChats/jackson.solidcommunity.net/index.ttl#SharedPreferences", + }, + { + "@id": + "https://jackson.solidcommunity.net/IndividualChats/jackson.solidcommunity.net/index.ttl#id1604448082795", + "http://www.w3.org/2002/12/cal/ical#dtstart": [ + { + "@value": "2020-11-04T00:01:22Z", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + ], + "http://www.w3.org/2005/01/wf/flow#participant": [ + { + "@id": "https://jackson.solidcommunity.net/profile/card#me", + }, + ], + "http://www.w3.org/ns/ui#backgroundColor": [ + { + "@value": "#e1f7cd", + }, + ], + }, + { + "@id": + "https://jackson.solidcommunity.net/IndividualChats/jackson.solidcommunity.net/index.ttl#this", + "@type": ["http://www.w3.org/ns/pim/meeting#LongChat"], + "http://purl.org/dc/elements/1.1/author": [ + { + "@id": "https://jackson.solidcommunity.net/profile/card#me", + }, + ], + "http://purl.org/dc/elements/1.1/created": [ + { + "@value": "2020-11-04T00:01:20Z", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + ], + "http://purl.org/dc/elements/1.1/title": [ + { + "@value": "Chat channel", + }, + ], + "http://www.w3.org/2005/01/wf/flow#participation": [ + { + "@id": + "https://jackson.solidcommunity.net/IndividualChats/jackson.solidcommunity.net/index.ttl#id1604448082795", + }, + ], + "http://www.w3.org/ns/ui#sharedPreferences": [ + { + "@id": + "https://jackson.solidcommunity.net/IndividualChats/jackson.solidcommunity.net/index.ttl#SharedPreferences", + }, + ], + }, + { + "@id": "https://jackson.solidcommunity.net/profile/card#me", + }, +]; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/tsconfig.cjs.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/tsconfig.cjs.json new file mode 100644 index 0000000..affce40 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.cjs.json", + "compilerOptions": { + "outDir": "./dist/cjs", + "rootDir": "./src" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/tsconfig.esm.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/tsconfig.esm.json new file mode 100644 index 0000000..09f99c2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/tsconfig.esm.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "outDir": "./dist/esm", + "rootDir": "./src", + "declarationDir": "./dist/types" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/tsconfig.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/tsconfig.json new file mode 100644 index 0000000..c274275 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/dataset/tsconfig.json @@ -0,0 +1,29 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@ldo/dataset": [ + "./src/index.ts" + ], + "@ldo/dataset/*": [ + "./src/*" + ], + }, + "sourceMap": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "composite": false, + "declaration": false, + "declarationMap": false, + "noEmit": true + }, + "include": [ + "src/**/*.ts", + "test/**/*.ts" + ], + "exclude": [ + "node_modules", + "dist" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/README.md b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/README.md new file mode 100644 index 0000000..a57f726 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/README.md @@ -0,0 +1,830 @@ +# JSONLD Dataset Proxy + +Edit RDFJS Dataset just like regular JavaScript Object Literals. + +Just a few lines of familiar code: +```typescript +const personNode = namedNode("http://example.com/Person1"); +const person = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +person.age = 23; +person.name.add("John"); +``` + +are equivalent to: +```typescript +dataset.deleteMatches( + namedNode("http://example.com/Person1"), + namedNode("http://xmlns.com/foaf/0.1/age") +); +dataset.add( + quad( + namedNode("http://example.com/Person1"), + namedNode("http://xmlns.com/foaf/0.1/age"), + literal("23", "http://www.w3.org/2001/XMLSchema#integer") + ) +); +dataset.add( + quad( + namedNode("http://example.com/Person1"), + namedNode("http://xmlns.com/foaf/0.1/name"), + literal("John", "http://www.w3.org/2001/XMLSchema#string") + ) +); +``` + +Plus, you get IntelliSense typescript suggestions to help you write your code! + +![Intellisense Example](./readme-images/Intellisense.png) + + +## Installation +```bash +npm install @ldo/jsonld-dataset-proxy +``` + +## Simple Example +```typescript +import jsonldDatasetProxy, { write, LdSet } from "jsonld-dataset-proxy"; +import { ContextDefinition } from "jsonld"; +import { serializedToDataset } from "@ldo/dataset"; +import { namedNode } from "@ldo/rdf-utils"; + +async function start() { + // Define initial data + const initialData = ` + @prefix example: . + @prefix foaf: . + @prefix xsd: . + + example:Person1 + foaf:name "Johnathan"^^xsd:string; + foaf:age "22"^^xsd:integer. + `; + // Create a dataset loaded with initial data + const dataset = await serializedToDataset(initialData); + // Make a JSONLD Dataset Proxy + const person = jsonldDatasetProxy( + dataset, + PersonContext + ).fromSubject(namedNode("http://example.com/Person1")); + // Make Modifications + person.age = 23; + person.name.add("John"); + write(namedNode("http://example.com/otherGraph")).using(person); + person.name.add("Smith"); + + console.log(dataset.toString()); + // Logs: + // "Johnathan" . + // "John" . + // "23"^^ . + // "Smith" . +} + +// Person Typescript Typing +interface IPerson { + name: LdSet; + age: number; +} + +// Person JSONLD Context +const PersonContext: ContextDefinition = { + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@container": "@set", + }, + age: { + "@id": "http://xmlns.com/foaf/0.1/age", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, +}; + +start(); +``` + +## Full Usage + + - [Defining a Context and Type](#defining-a-context-and-type) + - [Getting a Jsonld DatasetProxy](#getting-a-jsonld-dataset-proxy) + - [`.fromSubject(entryNode)`](#fromsubjecttentrynode) + - [`.matchSubject(predicate?, object?, graph?)`](#matchsubjecttpredicate-object-graph) + - [`.matchObject(subject?, predicate?, graph?)`](#matchobjecttsubject-predicate-object) + - [`.fromJson(inputData)`](#fromjsontinputdata) + - [Getting Field Values and Traversing](#getting-field-values-and-traversing) + - [Setting a Primitive](#setting-a-primitive) + - [Setting an Object](#setting-an-object) + - [Set Methods](#set-methods) + - [Overwriting an Object](#overwriting-an-object) + - [Changing an Object's Id](#changing-an-objects-id) + - [Removing an Object Connection](#removing-an-object-connection) + - [Deleting an Entire Object](#deleting-an-entire-object) + - [Using Blank Nodes](#using-blank-nodes) + - [Writing Information to a Specific Graph](#writing-information-to-a-specific-graph) + - [`jsonldDatasetProxy(...).write(...graphs)`](#jsonlddatasetproxywritegraphs) + - [`write(...graphs).using(...jsonldDatasetProxies)`](#writegraphsusingjsonlddatasetproxies) + - [`write(...graphs).usingCopy(...jsonldDatasetProxies)`](#writegraphsusingcopyjsonlddatasetproxies) + - [Detecting a the graph of specific information](#detecting-a-the-graph-of-specific-information) + +For the most part, you can think of a JSONLD Dataset Proxy as a JavaScript Object Literal with "Sets" instead of arrays. + +### Defining a Context and Type +The first step to getting a JSONLD Dataset Proxy is defining the JSONLD Context and TypeScript Typings. This can either be done through a [generator](https://ldo.js.org/latest/api/cli/build/) or defining them manually. + +In this example typescript typing `IPerson` is an interface that represents a person. Notice the `@id` and `@context` fields. Be sure to include them in your interfaces if you wish to use those properties. + +```typescript +import { LdoJsonldContext, LdSet } from "@ldo/jsonld-dataset-proxy"; + +interface IPerson { + "@id"?: string; + "@context"?: LdoJsonldContext; + name?: LdSet; + age?: number; + bestFriend?: IPerson; + knows?: LdSet; +} +``` + +We can make a [JSONLD context](https://w3c.github.io/json-ld-syntax/#the-context) to match this type: + +```typescript +import { ContextDefinition } from "jsonld"; + +const PersonContext: ContextDefinition = { + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@container": "@set", + }, + age: { + "@id": "http://xmlns.com/foaf/0.1/age", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + bestFriend: { + "@id": "http://xmlns.com/foaf/0.1/bestFriend", + "@type": "@id", + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@container": "@set", + }, +}; +``` + +To do this, create an object that has corresponding fields to your type. Each field is an object that contains the following properties: + - `@id`: indicates the URI of the corresponding predicate + - `@type`: If the corresponding type is a pimitive (Like a number or string), use this field to list the RDF Literal type (Most often this is an XMLSchema type). If the corresponding type is an object, list `@id` here. + - `@container`: If the corresponding type is an array of items, set `@container` to `@set`, if not, do not include the `@container` property. + +Note that only the features described here work with JSONLD Dataset Proxy. Other features of JSONLD Contexts are not yet supported. + +### Getting a Jsonld Dataset Proxy +Once the Typescript Typings and Context have been defined, we can get the JSONLD Dataset Proxy for a specific dataset. + +```typescript +import jsonldDatasetProxy from "jsonld-dataset-proxy"; +import { createDataset } from "o-dataset-pack"; + +const dataset = await createDataset(); +// Make a JSONLD Dataset Proxy +const person = jsonldDatasetProxy( + dataset, + PersonContext +) // ... +``` + +The functon `jsonldDatasetProxy` takes in three parameters: + - `dataset`: The dataset you wish to traverse and manipulate. This can be any dataset that follows the [RDFJS Dataset Interface](https://rdf.js.org/dataset-spec/#dataset-interface). Note that this is not to be confused with the RDFJS Dataset ***Core*** interface. This example uses the "o-dataset-pack", but any implementation of the RDFJS Dataset Interface is acceptable. + - `context`: The JSONLD context. + + After defining the `dataset` and `context` there are a few ways to get Jsonld Dataset Proxies: + +#### `.fromSubject(entryNode)` +`fromSubject` lets you define a an `entryNode`, the place of entry for the graph. The object returned by `jsonldDatasetProxy` will represent the given node. This parameter accepts both `namedNode`s and `blankNode`s. `fromSubject` takes a generic type representing the typescript type of the given subject. + +```typescript +const person = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +``` + +#### `.matchSubject(predicate?, object?, graph?)` +`matchSubject` returns a Jsonld Dataset Proxy representing all subjects in the dataset matching the given predicate, object, and graph. + +```typescript +const people = jsonldDatasetProxy( + dataset, + PersonContext +).matchSubject( + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://xmlns.com/foaf/0.1/Person") +); +people.forEach((person) => { + console.log(person.name); +}); +``` + +#### `.matchObject(subject?, predicate?, object?)` +`matchObject` returns a Jsonld Dataset Proxy representing all objects in the dataset matching the given subject, predicate, and graph. + +```typescript +const friendsOfPerson1 = jsonldDatasetProxy( + dataset, + PersonContext +).matchSubject( + namedNode("http://example.com/Person1"), + namedNode("http://xmlns.com/foaf/0.1/knows") +); +friendsOfPerson1.forEach((person) => { + console.log(person.name); +}); +``` + +#### `.fromJson(inputData)` +`fromJson` will take any regular Json, add the information to the dataset, and return a Jsonld Dataset Proxy representing the given data. + +```typescript +import { jsonldDatasetProxy, set } from "@ldo/jsonld-dataset-proxy"; + +const person2 = jsonldDatasetProxy( + dataset, + PersonContext +).fromJson({ + "@id": "http://example.com/Person2", + name: set("Jane", "Doe"), + birthdate: "1990/11/03", + age: 33, +}); +``` + +### Getting Field Values and Traversing +Getting a field and traversing the object is just as easy as getting data out of a standard JavaScript Object Literal. + +In all the following example, we will use a dataset loaded with the following data: + +```typescript +const dataset = await serializedToDataset(` + @prefix example: . + @prefix foaf: . + @prefix xsd: . + + example:Person1 + foaf:name "Johnathan"^^xsd:string, "John"^^xsd:string; + foaf:age "22"^^xsd:integer; + foaf:bestFriend example:Person2; + foaf:friends example:Person2, example:Person3. + + example:Person2 + foaf:name "Alice"^^xsd:string; + foaf:age "28"^^xsd:integer. + + example:Person3 + foaf:name "Dave"^^xsd:string; + foaf:age "33"^^xsd:integer. +`); +const person = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +// Get primitives +console.log(person.age); // 22 +// Get nested primitives +console.log(person?.bestFriend?.age); // 28 +// All array methods work +console.log(person.name?.reduce((agg, cur) => agg + cur, "")); // JonathanJohn +// You can also access array items via their index +// But this isn't recommened. The library will do its best to maintain the +// ordering in the array, but as datasets have no concept of order, this is +// not always accurate. +console.log(person.name?.toArray()[0]); // John +// Get the id of the object +// (If the node is a blankNode the @id will be undefined) +console.log(person.bestFriend?.["@id"]); // "http://example.com/Person2" +// Finally, you can retrieve the context +console.log(person["@context"]); // { "name": { "@id": ... }} +``` + + + +### Setting a Primitive +Setting a non-array primitive will remove the existing triple from the dataset and add a new triple. + +```typescript +const dataset = createDataset(); +const person = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")) +person.age = 23; +console.log(dataset.toString()); +// "23"^^ . +``` + +### Setting an Object +Setting a field to a JavaScript object literal will recursively add all parts of the object literal to the dataset. + +```typescript +import { set } from "@ldo/jsonld-dataset-pack"; + +const dataset = createDataset(); +const person = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +person.bestFriend = { + "@id": "http://example.com/Person2", + name: set("Alice"), + bestFriend: { + "@id": "http://example.com/Person3", + name: set("Bob"), + }, +}; +console.log(dataset.toString()); +// . +// . +// "Alice" . +// "Bob" . +``` + +### Set Methods +Any methods that on a [JavaScript Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) are available. + + +```typescript +const dataset = await serializedToDataset(` + @prefix example: . + @prefix foaf: . + @prefix xsd: . + + example:Person1 + foaf:name "Garrett"^^xsd:string, "Bobby"^^xsd:string. +`); +const person = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +person.name?.add("Ferguson"); +console.log(dataset.toString()); +// "Garrett" . +// "Bobby" . +// "Ferguson" . +``` + +For convenience, some methods commonly used on arrays have been added. The methods available on Sets are defined as follows: + +```typescript +LdSet { + add(value: T): this; + clear(): void; + delete(value: T): boolean; + has(value: T): boolean; + readonly size: number; + [Symbol.iterator](): IterableIterator; + entries(): IterableIterator<[T, T]>; + keys(): IterableIterator; + values(): IterableIterator; + every(predicate: (value: T, set: LdSet) => value is S, thisArg?: any): this is LdSet; + every(predicate: (value: T, set: LdSet) => unknown, thisArg?: any): boolean; + some(predicate: (value: T, set: LdSet) => unknown, thisArg?: any): boolean; + forEach(callbackfn: (value: T, value2: T, set: LdSet) => void, thisArg?: any): void; + map(callbackfn: (value: T, set: LdSet) => U, thisArg?: any): U[]; + filter(predicate: (value: T, set: LdSet) => value is S, thisArg?: any): LdSet; + filter(predicate: (value: T, set: LdSet) => unknown, thisArg?: any): LdSet; + reduce(callbackfn: (previousValue: T, currentValue: T, set: LdSet) => T): T; + reduce(callbackfn: (previousValue: T, currentValue: T, set: LdSet) => T, initialValue: T): T; + reduce(callbackfn: (previousValue: U, currentValue: T, array: LdSet) => U, initialValue: U): U; + toArray(): T[]; + toJSON(): T[]; + difference(other: Set): LdSet; + intersection(other: Set): LdSet; + isDisjointFrom(other: Set): boolean; + isSubsetOf(other: Set): boolean; + isSupersetOf(other: Set): boolean; + symmetricDifference(other: Set): LdSet; + union(other: Set): LdSet; +} +``` + +### Overwriting an Object +If an object literal is set and the id is equivalent to an existing id, that node will be overwritten. All triples from the previous object are removed and replaced with triples from the new object. + +```typescript +const dataset = await serializedToDataset(` + @prefix example: . + @prefix foaf: . + @prefix xsd: . + + example:Person2 + foaf:name "Alice"^^xsd:string; + foaf:age "28"^^xsd:integer. +`); +const person = jsonldDatasetProxy( + dataset, + PersonContext, +).fromSubject(namedNode("http://example.com/Person1")); +person.bestFriend = { + "@id": "http://example.com/Person2", + name: set("Jane"), +}; +console.log(dataset.toString()); +// "Jane" . +// . +``` + +### Changing an Object's Id +You can rename an object by setting its `@id` field. This will update all triples that reference the id to the new id. Setting the `@id` field to `undefined` will turn it into a blank node. + +```typescript +const dataset = await serializedToDataset(` + @prefix example: . + @prefix foaf: . + @prefix xsd: . + + example:Person1 + foaf:name "Alice"^^xsd:string; + foaf:bestFriend example:Person2. + + example:Person2 + foaf:bestFriend example:Person1. +`); +const person = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")) +person["@id"] = "http://example.com/NewPersonId"; +console.log(dataset.toString()); +// . +// "Alice" . +// . +``` + +### Removing an Object Connection +Removing a connection between nodes can be done by setting a field to `undefined` or using the `delete` operator. Values can be removed from a set by using the `delete` method or the `clear` method to remove all connections. + +```typescript +const dataset = await serializedToDataset(` + @prefix example: . + @prefix foaf: . + @prefix xsd: . + + example:Person1 + foaf:name "Alice"^^xsd:string; + foaf:bestFriend example:Person2. + + example:Person2 + foaf:name "Bob"^^xsd:string; + foaf:bestFriend example:Person1. +`); +const person = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +perons.bestFriend.name.delete("Bob"); +person.bestFriend = undefined; +console.log(dataset.toString()); +// "Alice" . +// . +``` + +### Deleting an Entire Object +If you want to delete all triples represented by an object you can call `delete` on the `@id` property. + +```typescript +const dataset = await serializedToDataset(` + @prefix example: . + @prefix foaf: . + @prefix xsd: . + + example:Person1 + foaf:name "Alice"^^xsd:string; + foaf:bestFriend example:Person2. + + example:Person2 + foaf:name "Bob"^^xsd:string; + foaf:bestFriend example:Person1. +`); +const person = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +delete person["@id"]; +console.log(dataset.toString()); +// "Bob" . +``` + +### Using Blank Nodes +If you want to create an object with a blankNode subject, simply omit the `@id` field when you're making the object. +```typescript +const dataset = await createDataset(); +const person = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +person.bestFriend = { + name: set("Charlie"), +}; +console.log(dataset.toString()); +// _:b1 . +// _:b1 "Charlie" . +``` + +If your dataset has blank nodes and you want to assign that blank node as a triple's object, you can retrieve it from the JSONLD Dataset Proxy and assign it. +```typescript +const dataset = await serializedToDataset(` + @prefix example: . + @prefix foaf: . + @prefix xsd: . + + example:Person1 + foaf:knows [ + foaf:name "Alice"^^xsd:string; + ]. +`); +const person = jsonldDatasetProxy( + dataset, + PersonContext, +).fromSubject(namedNode("http://example.com/Person1")); + +const alice = person.knows?.toArray()[0]; +person.bestFriend = alice; +console.log(dataset.toString()); +// _:n3-0 "Alice" . +// _:n3-0 . +// _:n3-0 . +``` + +### Writing Information to a Specific Graph +By default, all new quads are added to the default graph, but you can change the graph to which new quads are added in a few different ways: + +NOTE: These operations only dictate the graph for new triples. Any operations that delete triples will delete triples regardless of their graph. + +#### `jsonldDatasetProxy(...).write(...graphs)` +The write graph can be set upon creating a jsonld dataset proxy by using the `write` method. This method takes in any number of graphs. + +```typescript +const person1 = jsonldDatasetProxy(dataset, PersonContext) + .write(namedNode("http://example.com/ExampleGraph")) + .fromSubject(namedNode("http://example.com/Person1")); +person1.name.add("Jack"); +console.log(dataset.toString()); +// Logs: +// "Jack" . +``` + +#### `write(...graphs).using(...jsonldDatasetProxies)` +The `write(...).using(...)` function lets you define the graphs you wish to write to using specific jsonldDatasetProxies. + +```typescript +import jsonldDatasetProxy, { write } from "jsonld-dataset-proxy"; + +const person1 = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +// Now all additions with person1 will be on ExampleGraph1 +write(namedNode("http://example.com/ExampleGraph1")).using(person1); +person1.name.add("Jack"); +// Now all additions with person1 will be on ExampleGraph2 +write(namedNode("http://example.com/ExampleGraph2")).using(person1); +person1.name.add("Spicer"); + +console.log(dataset.toString()); +// Logs: +// "Jack" . +// "Spicer" . +``` + +The function also returns an `end` function that will reset the graph to what it was before. This is useful for nesting graph modifications. + +```typescript +const person1 = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +person1.name.add("default"); +const end1 = write(namedNode("http://example.com/Graph1")).using(person1); +person1.name.add("1"); +const end2 = write(namedNode("http://example.com/Graph2")).using(person1); +person1.name.add("2"); +const end3 = write(namedNode("http://example.com/Graph3")).using(person1); +person1.name.add("3"); +end3(); +person1.name.add("2 again"); +end2(); +person1.name.add("1 again"); +end1(); +person1.name.add("default again"); +console.log(dataset.toString()); +// Logs: +// "default" . +// "default again" . +// "1" . +// "1 again" . +// "2" . +// "2 again" . +// "3" . +``` + +#### `write(...graphs).usingCopy(...jsonldDatasetProxies)` +If you would like a new variable to write to without modifying the original Jsonld Dataset Proxy, you can use `write(...).usingCopy(...)`. + +```typescript +const person1 = jsonldDatasetProxy( + dataset, + PersonContext +).fromSubject(namedNode("http://example.com/Person1")); +const [person1WritingToNewGraph] = write( + namedNode("http://example.com/NewGraph") +).usingCopy(person1); +person1WritingToNewGraph.name.add("Brandon"); +person1.name.add("Sanderson"); +console.log(dataset.toString()); +// Logs: +// "Brandon" . +// "Sanderson" . +``` + +### Detecting a the graph of specific information + +The graph of specific information can be detected using the `graphOf(subject, predicate, object)` function. The `graphOf` function takes in two to three arguments. + + - `subject`: A Jsonld Dataset Proxy that represents the subject of a quad. + - `predicate`: A string key + - `object?`: A representation of the direct object of the triple in question. This could be a jsonld-dataset-proxy or simply and object with an `@id` field. + +```typescript +graphOf(person, "name", "Bob"); // returns defaultGraph() +graphOf(person, "age"); // returns defaultGraph() +``` + +## Managing Language Tags + +RDF includes a special attribute for string literals called a [language tag](https://www.w3.org/TR/rdf11-concepts/#section-Graph-Literal). Lanugage tags let developers provide string representations for many different translations and JSON-LD Dataset Proxy helps you manage them. + +To use language tags, RDF requires the datatype of a literal to be `http://www.w3.org/1999/02/22-rdf-syntax-ns#langString`, and LDO's functions will only work on literals of type that type. + +For the following examples, we'll use this context and dataset, typescript typing and JSON-LD Context. Notice that there is a field called "label" with translations for French and Korean and one language string that doesn't have a language tag. There's also a field called "description" that holds multiple strings per language. + +```typescript +// Define initial data +const initialData = ` + @prefix example: . + @prefix rdfs: . + @prefix ns: . + + example:Hospital + rdfs:label "Hospital"^^ns:langString; + rdfs:label "Hôpital"@fr; + rdfs:label "병원"@ko; + rdfs:description "Heals patients"^^ns:langString; + rdfs:description "Has doctors"^^ns:langString; + rdfs:description "Guérit les malades"@fr; + rdfs:description "A des médecins"@fr; + rdfs:description "환자를 치료하다"@ko; + rdfs:description "의사 있음"@ko. +`; + +// Typescript Typing +interface IThing { + label: string; + description: string[]; +} + +// Define JSON-LD Context +const PersonContext: ContextDefinition = { + label: { + "@id": "http://www.w3.org/2000/01/rdf-schema#label", + "@type": "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + }, + description: { + "@id": "http://www.w3.org/2000/01/rdf-schema#description", + "@type": "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + "@container": "@set", + }, +}; +``` + +### Language Preferences +A language preference is an ordered list telling the JSON-LD Dataset Proxy the language you prefer as well as callbacks. + +Valid values for the language preferences includes any [IETF Language Tag](https://en.wikipedia.org/wiki/IETF_language_tag) as well as the special tags `@none` and `@other`. `@none` represents any language literal that doesn't have a language tag. `@other` represents any language literal that isn't listed among the language preferences. + +For read operations, the JSON-LD Dataset Proxy will search for values in order of the preference. Write operations will choose the first language in the language preference, unless that language is `@other`, in which case it will choose the next language. + +```typescript +// Read Spansih first, then Korean, then language strings with no language +// New writes are in Spanish +["es", "ko", "@none"] + +// Read any language other than french, then french +// New writes are in French +["@other", "fr"] +``` + +Language preferences can be set when a JSON-LD Dataset Proxy is created using the `setLanguagePreferences` method. + +```typescript +// Create a dataset loaded with initial data +const dataset = await serializedToDataset(initialData); +// Make a JSONLD Dataset Proxy +const hospitalInfo = jsonldDatasetProxy(dataset, PersonContext) + .setLanguagePreferences("es", "ko", "@none") + .fromSubject(namedNode("http://example.com/Hospital")); + +console.log(hospitalInfo.label); // Logs "병원" +console.log(hospitalInfo.description.size); // Logs "2" for the 2 korean entries +console.log(hospitalInfo.description.toArray()[0]); // Logs "환자를 치료하다" +console.log(hospitalInfo.description.toArray()[1]); // Logs "의사 있음" + +// Adds a string to the description in spanish, because spanish if the first +// language in the language preference +hospitalInfo.description.add("Cura a las pacientes"); + +// Now that a spanish entry exists, JSON-LD dataset proxy focuses on that +console.log(hospitalInfo.description.length); // Logs "1" for the 1 spanish entry +console.log(hospitalInfo.description.toArray()[0]); // Logs "Cura a las pacientes" +``` + +### `setLanguagePreferences(...languagePreferences).using(...jsonldDatasetProxies)` +The `setLanguagePreferences(...).using(...)` function sets the language preferences for a set of JSON-LD Dataset Proxies. It follows roughly the same paridigms as the `write(...).using(...)` function. + +```typescript +import { setLanguagePreferences } from "jsonld-dataset-proxy"; + +setLanguagePreferences("fr", "ko").using(hospitalInfo); +console.log(hospitalInfo.label); // Logs "Hôpital" +setLanguagePreferences("@none").using(hospitalInfo); +console.log(hospitalInfo.label); // Logs "Hospital" +``` + +### `setLanguagePreferences(...languagePreferences).usingCopy(...jsonldDatasetProxies)` +The `setLanguagePreferences(...).usingCopy(...)` function returns a copy of the provided JSON-LD Dataset Proxies with the given language preferences. It follows roughly the same paridigms as the `write(...).usingCopy(...)` function. + +```typescript +import { setLanguagePreferences } from "jsonld-dataset-proxy"; + +// ... + +const [frenchPreference] = setLanguagePreferences("fr").usingCopy(hospitalInfo); +const [koreanPreference] = setLanguagePreferences("ko").usingCopy(hospitalInfo); +console.log(frenchPreference.label); // Logs "Hôpital" +console.log(koreanPreference.label); // Logs "병원" +``` + +### `languageOf(jsonldDatasetProxy, key)` +The `languageOf` function lets you view and modify the languages more directly. `languageOf` takes two properties: + + - `jsonldDatasetProxy`: A JSON-LD dataset proxy + - `key`: A key on the JSON-LD dataset proxy pointing to a language string. + +It returns a mapping of languages to strings or sets of strings depending on the cardinality of the JSON-LD context. + +```typescript +const labelLanguages = languagesOf(hospitalInfo, "label"); +// labelLanguages: { '@none': 'Hospital', fr: 'Hôpital', ko: '병원' } +const descriptionLanguages = languagesOf(hospitalInfo, "description"); +// descriptionLanguages: +// { +// '@none': Set(2) { 'Heals patients', 'Has doctors' }, +// fr: Set(2) { 'Guérit les malades', 'A des médecins' }, +// ko: Set(2) { '환자를 치료하다', '의사 있음' } +// } +``` + +You can also modify languauages by changing the mappings. Mappings with sets of strings follow the JavaScript [`Set` interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set). + +```typescript +// Adds a Chinese label +labelLanguages.zh = "医院"; +// Changes the no-language label from to "Super Hospital" +labelLanguages["@none"] = "Super Hospital"; +// Removes the French label +delete labelLanguages.fr; +// Adds a Hindi description +descriptionLanguages.hi?.add("रोगियों को ठीक करता है"); +// Checks to see if the korean label contains "의사 있음" +descriptionLanguages.ko?.has("의사 있음"); // returns true +// Removes "Has Doctors" from the no-language description +descriptionLanguages["@none"]?.delete("Has Doctors"); +``` + +## Limitations + - Currently this library only supports the following features of JSON-LD context: + - "@id", + - "@type", + - "@container": "@set" + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/jest.config.cjs b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/jest.config.cjs new file mode 100644 index 0000000..3ad2cee --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/jest.config.cjs @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +// packages/dataset/jest.config.cjs +const sharedConfig = require("../../jest.config.js"); + +module.exports = { + ...sharedConfig, + rootDir: "./", // Sets context for this package + collectCoverageFrom: [ + "src/**/*.ts", + "!src/**/*.d.ts", + // "!src/index.ts", // Optional, if index.ts only re-exports + ], + modulePathIgnorePatterns: ["/dist/"], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/package.json new file mode 100644 index 0000000..7c13252 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/package.json @@ -0,0 +1,61 @@ +{ + "name": "@ldo/jsonld-dataset-proxy", + "version": "1.0.0-alpha.32", + "description": "", + "type": "module", + "main": "./dist/cjs/index.cjs", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.cjs" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "rimraf dist && npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --project tsconfig.cjs.json && node ../../scripts/rename-to-cjs.js", + "build:esm": "tsc --project tsconfig.esm.json", + "test": "jest --coverage", + "prepublishOnly": " npm run build", + "start": "ts-node ./example/example.ts", + "start:lang": "ts-node ./example/languageExample.ts", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "remove-dist": "rimraf dist/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/jsonld-dataset-proxy#readme", + "devDependencies": { + "@rdfjs/types": "^1.1.0", + "@types/jsonld": "^1.5.6", + "@types/n3": "^1.10.4", + "@types/rdfjs__dataset": "^1.0.5", + "@types/shexj": "2.1.4", + "shex-test": "^0.5.5", + "ts-node": "^10.4.0", + "tsc-watch": "^6.0.0" + }, + "files": [ + "dist", + "src" + ], + "dependencies": { + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@ldo/subscribable-dataset": "^1.0.0-alpha.32", + "jsonld2graphobject": "^0.0.4" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "840910c56ec3f61416f031cc76771a5673af6757" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/readme-images/Intellisense.png b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/readme-images/Intellisense.png new file mode 100644 index 0000000..6a9f53b Binary files /dev/null and b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/readme-images/Intellisense.png differ diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/ContextUtil.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/ContextUtil.ts new file mode 100644 index 0000000..f72c55a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/ContextUtil.ts @@ -0,0 +1,173 @@ +import type { ContextDefinition, ExpandedTermDefinition } from "jsonld"; +import type { + LdoJsonldContext, + LdoJsonldContextExpandedTermDefinition, +} from "./LdoJsonldContext.js"; +import type { NamedNode } from "@rdfjs/types"; + +// Create JSONLD Shorthands +const shorthandToIriMap: Record = { + "@type": "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", +}; + +/** + * Context Util + * Handles the JSON-LD context and allows conversion between IRIs and terms + */ +export class ContextUtil { + public readonly context: ContextDefinition | LdoJsonldContext; + private iriToKeyMap: Record; + private typeNameToIriToKeyMap: Record>; + + constructor(context: ContextDefinition | LdoJsonldContext) { + this.context = context; + this.iriToKeyMap = {}; + + // Create the iriToKeyMap + this.iriToKeyMap = this.createIriToKeyMap(context); + this.typeNameToIriToKeyMap = {}; + Object.entries(context).forEach(([contextKey, contextValue]) => { + if ( + typeof contextValue === "object" && + contextValue !== null && + !!contextValue["@id"] && + (contextValue as ExpandedTermDefinition)["@context"] + ) { + this.typeNameToIriToKeyMap[contextKey] = this.createIriToKeyMap( + contextValue["@context"], + ); + } + }); + } + + private createIriToKeyMap( + context: ContextDefinition, + ): Record { + const iriToKeyMap = {}; + Object.entries(context).forEach(([contextKey, contextValue]) => { + if (typeof contextValue === "string") { + iriToKeyMap[this.keyIdToIri(contextValue)] = contextKey; + } else if ( + typeof contextValue === "object" && + contextValue !== null && + !!contextValue["@id"] + ) { + const iri = this.keyIdToIri(contextValue["@id"]); + iriToKeyMap[iri] = contextKey; + } + }); + return iriToKeyMap; + } + + /** + * Helper method that gets the relevant context to use if a typename is + * provided + */ + private getRelevantContext( + key: string, + typeNames: NamedNode[], + ): ContextDefinition | LdoJsonldContext { + for (const typeNameNode of typeNames) { + const typeName = this.iriToKey((typeNameNode as NamedNode).value, []); + if ( + typeof this.context[typeName] === "object" && + this.context[typeName]?.["@context"] && + this.context[typeName]?.["@context"][key] + ) { + return this.context[typeName]?.["@context"]; + } + } + return this.context; + } + + /** + * Helper function that applies shorthands to keys + */ + private keyIdToIri(keyId: string) { + if (shorthandToIriMap[keyId]) { + return shorthandToIriMap[keyId]; + } else { + return keyId; + } + } + + /** + * Converts a given JsonLd key into an RDF IRI + */ + public keyToIri(key: string, typeName: NamedNode[]): string { + const relevantContext = this.getRelevantContext(key, typeName); + if (!relevantContext[key]) { + return key; + } else if (typeof relevantContext[key] === "string") { + return this.keyIdToIri(relevantContext[key] as string); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } else if (relevantContext[key] && (relevantContext[key] as any)["@id"]) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return this.keyIdToIri((relevantContext[key] as any)["@id"]); + } + return key; + } + + /** + * Converts a given RDF IRI into the JsonLd key + */ + public iriToKey(iri: string, typeNames: NamedNode[]): string { + let relevantMap = this.iriToKeyMap; + for (const typeNameNode of typeNames) { + const typeName = this.iriToKey((typeNameNode as NamedNode).value, []); + relevantMap = this.typeNameToIriToKeyMap[typeName]?.[iri] + ? this.typeNameToIriToKeyMap[typeName] + : this.iriToKeyMap; + } + if (relevantMap[iri]) { + return relevantMap[iri]; + } + return iri; + } + + /** + * Returns the IRI of a datatype of a specific object + */ + public getDataType(key: string, typeName: NamedNode[]): string { + const relevantContext = this.getRelevantContext(key, typeName); + if ( + typeof relevantContext[key] === "object" && + (relevantContext[key] as ExpandedTermDefinition)["@type"] + ) { + return (relevantContext[key] as ExpandedTermDefinition)[ + "@type" + ] as string; + } + return "http://www.w3.org/2001/XMLSchema#string"; + } + + /** + * Returns true if the object is a collection + */ + public isSet(key: string, typeName: NamedNode[]): boolean { + const relevantContext = this.getRelevantContext(key, typeName); + return !!( + relevantContext[key] && + typeof relevantContext[key] === "object" && + ((relevantContext[key] as ExpandedTermDefinition)["@container"] === + "@set" || + (relevantContext[key] as LdoJsonldContextExpandedTermDefinition)[ + "@isCollection" + ]) + ); + } + + /** + * Returns true if the object is a language string + */ + public isLangString(key: string, typeName: NamedNode[]): boolean { + const relevantContext = this.getRelevantContext(key, typeName); + return !!( + relevantContext[key] && + typeof relevantContext[key] === "object" && + (relevantContext[key] as ExpandedTermDefinition)["@type"] && + (relevantContext[key] as ExpandedTermDefinition)["@type"] === + "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/JsonldDatasetProxyBuilder.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/JsonldDatasetProxyBuilder.ts new file mode 100644 index 0000000..1fc815c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/JsonldDatasetProxyBuilder.ts @@ -0,0 +1,107 @@ +import { namedNode, blankNode } from "@ldo/rdf-utils"; +import type { BlankNode, NamedNode } from "@rdfjs/types"; +import type { GraphNode, QuadMatch } from "@ldo/rdf-utils"; +import type { LanguageOrdering } from "./language/languageTypes.js"; +import type { ProxyContext } from "./ProxyContext.js"; +import type { LiteralLike, ObjectLike } from "./types.js"; +import type { LdSet } from "./setProxy/ldSet/LdSet.js"; + +/** + * Helps build JSON LD Dataset Proxies for a specific dataset and context + */ +export class JsonldDatasetProxyBuilder { + private proxyContext: ProxyContext; + + constructor(proxyContext: ProxyContext) { + this.proxyContext = proxyContext; + } + + /** + * Designates that all Jsonld Dataset Proxies created should write to the + * specified graphs + */ + write(...graphs: GraphNode[]): JsonldDatasetProxyBuilder { + return new JsonldDatasetProxyBuilder( + this.proxyContext.duplicate({ writeGraphs: graphs }), + ); + } + + /** + * List the language tags in the order they should be used. When a langString + * is accessed, LDO will search for values in the order of language given. + * @param languageOrdering The ordering of languages. For example + * ("en", "fr", "none", "other"). Defaults to + * ("none", "en", "other") + */ + setLanguagePreferences( + ...languageOrdering: LanguageOrdering + ): JsonldDatasetProxyBuilder { + return new JsonldDatasetProxyBuilder( + this.proxyContext.duplicate({ languageOrdering }), + ); + } + + /** + * Creates a JSON LD Dataset Proxy that matches the given subject + * @param subject The node to match + */ + fromSubject(subject: NamedNode | BlankNode): T { + return this.proxyContext.createSubjectProxy(subject) as unknown as T; + } + + /** + * Matches Subjects to provided predicates, objects, and graphs. Returns a + * JSON LD Dataset that can be read an modified. + * @param predicate The predicate to match + * @param object The object to match + * @param graph The graph to match + */ + matchSubject( + predicate?: QuadMatch[1] | undefined | null, + object?: QuadMatch[2] | undefined | null, + graph?: QuadMatch[3] | undefined | null, + ): LdSet { + return this.proxyContext.createSetProxy( + [null, predicate, object, graph], + true, + ) as unknown as LdSet; + } + + /** + * Matches Objects to provided subjects, predicates, and graphs. Returns a + * JSON LD Dataset that can be read an modified. + * @param subject The subject to match + * @param predicate The predicate to match + * @param graph The graph to match + */ + matchObject( + subject?: QuadMatch[0] | undefined | null, + predicate?: QuadMatch[1], + graph?: QuadMatch[3] | undefined | null, + ): LdSet { + return this.proxyContext.createSetProxy([ + subject, + predicate, + null, + graph, + ]) as unknown as LdSet; + } + + /** + * Takes a given object and places it in the dataset while returning a JSON LD + * Dataset Proxy representing the object. + * + * @param inputData Initial Data + * @param graph Optional graph to save this data to + */ + fromJson(inputData: T): T { + const entryNode = inputData["@id"] + ? namedNode(inputData["@id"]) + : blankNode(); + const proxy = this.fromSubject(entryNode); + Object.entries(inputData).forEach(([key, value]) => { + proxy[key] = value; + }); + return proxy; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/LdoJsonldContext.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/LdoJsonldContext.ts new file mode 100644 index 0000000..089ebb9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/LdoJsonldContext.ts @@ -0,0 +1,14 @@ +import type { ContextDefinition, ExpandedTermDefinition } from "jsonld"; + +export interface LdoJsonldContext extends ContextDefinition { + [key: string]: + | null + | string + | LdoJsonldContextExpandedTermDefinition + | LdoJsonldContext[keyof LdoJsonldContext]; +} + +export type LdoJsonldContextExpandedTermDefinition = ExpandedTermDefinition & { + "@context"?: LdoJsonldContext | undefined; + "@isCollection"?: boolean | undefined; +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/ProxyContext.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/ProxyContext.ts new file mode 100644 index 0000000..a1031a2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/ProxyContext.ts @@ -0,0 +1,118 @@ +import type { GraphNode, QuadMatch, SubjectNode } from "@ldo/rdf-utils"; +import type { BlankNode, Dataset, NamedNode } from "@rdfjs/types"; +import { createSubjectHandler } from "./subjectProxy/createSubjectHandler.js"; +import type { SubjectProxy } from "./subjectProxy/SubjectProxy.js"; +import type { SetProxy } from "./setProxy/SetProxy.js"; +import type { ContextUtil } from "./ContextUtil.js"; +import type { LanguageOrdering } from "./language/languageTypes.js"; +import { namedNode } from "@ldo/rdf-utils"; +import type { RawValue } from "./util/RawObject.js"; +import { createNewSetProxy } from "./setProxy/createNewSetProxy.js"; + +export interface ProxyContextOptions { + dataset: Dataset; + contextUtil: ContextUtil; + writeGraphs: GraphNode[]; + languageOrdering: LanguageOrdering; + state?: Record; +} + +const rdfType = namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); + +/** + * This file keeps track of the target objects used in the proxies. + * The reason is so that JSON.stringify does not recurse inifinitely + * when it encounters a circular object. + */ +export class ProxyContext { + private subjectMap: Map = new Map(); + private setMap: Map>> = new Map(); + + readonly dataset: Dataset; + readonly contextUtil: ContextUtil; + readonly writeGraphs: GraphNode[]; + readonly languageOrdering: LanguageOrdering; + public state: Record; + + constructor(options: ProxyContextOptions) { + this.dataset = options.dataset; + this.contextUtil = options.contextUtil; + this.writeGraphs = options.writeGraphs; + this.languageOrdering = options.languageOrdering; + this.state = options.state || {}; + } + + public createSubjectProxy(node: NamedNode | BlankNode): SubjectProxy { + if (!this.subjectMap.has(node.value)) { + const proxy = this.createNewSubjectProxy(node); + this.subjectMap.set(node.value, proxy); + } + return this.subjectMap.get(node.value) as SubjectProxy; + } + + protected createNewSubjectProxy(node: NamedNode | BlankNode): SubjectProxy { + return new Proxy( + { "@id": node }, + createSubjectHandler(this), + ) as unknown as SubjectProxy; + } + + private getSetKey(...quadMatch: QuadMatch) { + return `${quadMatch[0]?.value || "undefined"}|${ + quadMatch[1]?.value || "undefined" + }|${quadMatch[2]?.value || "undefined"}|${ + quadMatch[3]?.value || "undefined" + }`; + } + + public createSetProxy( + quadMatch: QuadMatch, + isSubjectOriented?: boolean, + isLangStringSet?: boolean, + ): SetProxy { + const key = this.getSetKey(...quadMatch); + if (!this.setMap.has(key)) { + const proxy = this.createNewSetProxy( + quadMatch, + isSubjectOriented, + isLangStringSet, + ); + this.setMap.set(key, proxy); + } + return this.setMap.get(key)!; + } + + protected createNewSetProxy( + quadMatch: QuadMatch, + isSubjectOriented?: boolean, + isLangStringSet?: boolean, + ) { + return createNewSetProxy( + quadMatch, + isSubjectOriented ?? false, + this, + isLangStringSet, + ); + } + + public duplicate(alternativeOptions: Partial) { + const fullOptions: ProxyContextOptions = { + ...{ + dataset: this.dataset, + contextUtil: this.contextUtil, + writeGraphs: this.writeGraphs, + languageOrdering: this.languageOrdering, + }, + ...alternativeOptions, + }; + return new ProxyContext(fullOptions); + } + + public getRdfType(subjectNode: SubjectNode): NamedNode[] { + return this.dataset + .match(subjectNode, rdfType) + .toArray() + .map((quad) => quad.object) + .filter((object): object is NamedNode => object.termType === "NamedNode"); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/graphOf.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/graphOf.ts new file mode 100644 index 0000000..9e654f0 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/graphOf.ts @@ -0,0 +1,52 @@ +import type { ObjectNode, GraphNode } from "@ldo/rdf-utils"; +import { namedNode } from "@ldo/rdf-utils"; +import { getSubjectProxyFromObject } from "./subjectProxy/isSubjectProxy.js"; +import type { ObjectLike } from "./types.js"; +import { + _getUnderlyingDataset, + _getUnderlyingMatch, + _getUnderlyingNode, + _proxyContext, +} from "./types.js"; +import type { LdSet } from "./setProxy/ldSet/LdSet.js"; +import { getNodeFromRawValue } from "./util/getNodeFromRaw.js"; + +/** + * Returns the graph for which a defined triple is a member + * @param subject A JsonldDatasetProxy that represents the subject + * @param predicate The key on the JsonldDatasetProxy + * @param object The direct object. This can be a JsonldDatasetProxy. This field + * is optional. + * @returns a list of graphs for which the triples are members + */ +export function graphOf( + subject: Subject, + predicate: Key, + object?: NonNullable extends LdSet ? T : Subject[Key], +): GraphNode[] { + const subjectProxy = getSubjectProxyFromObject(subject); + const proxyContext = subjectProxy[_proxyContext]; + const subjectNode = subjectProxy[_getUnderlyingNode]; + const predicateNode = namedNode( + proxyContext.contextUtil.keyToIri( + predicate as string, + proxyContext.getRdfType(subjectNode), + ), + ); + let objectNode: ObjectNode | undefined | null; + if (object == null) { + objectNode = null; + } else { + const datatype = proxyContext.contextUtil.getDataType( + predicate as string, + proxyContext.getRdfType(subjectNode), + ); + objectNode = getNodeFromRawValue(object, proxyContext, datatype); + } + const quads = subjectProxy[_getUnderlyingDataset].match( + subjectNode, + predicateNode, + objectNode, + ); + return quads.toArray().map((quad): GraphNode => quad.graph as GraphNode); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/index.ts new file mode 100644 index 0000000..25ff637 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/index.ts @@ -0,0 +1,39 @@ +import { jsonldDatasetProxy } from "./jsonldDatasetProxy.js"; + +export default jsonldDatasetProxy; +export * from "./types.js"; +export * from "./ContextUtil.js"; +export * from "./ProxyContext.js"; +export * from "./JsonldDatasetProxyBuilder.js"; +export * from "./jsonldDatasetProxy.js"; +export * from "./write.js"; +export * from "./graphOf.js"; +export * from "./setLanguagePreferences.js"; +export * from "./LdoJsonldContext.js"; + +export * from "./language/languagesOf.js"; +export * from "./language/languageMapProxy.js"; +export * from "./language/languageSet.js"; +export * from "./language/languageTypes.js"; +export * from "./language/languageUtils.js"; + +export * from "./setProxy/createNewSetProxy.js"; +export * from "./setProxy/isSetProxy.js"; +export * from "./setProxy/SetProxy.js"; +export * from "./setProxy/set.js"; +export * from "./setProxy/ldSet/LdSet.js"; +export * from "./setProxy/ldSet/BasicLdSet.js"; + +export * from "./subjectProxy/createSubjectHandler.js"; +export * from "./subjectProxy/SubjectProxy.js"; +export * from "./subjectProxy/getValueForKey.js"; +export * from "./subjectProxy/deleteFromDataset.js"; +export * from "./subjectProxy/isSubjectProxy.js"; + +export * from "./util/addObjectToDataset.js"; +export * from "./util/nodeToJsonldRepresentation.js"; +export * from "./util/RawObject.js"; +export * from "./util/getNodeFromRaw.js"; +export * from "./util/NodeSet.js"; +export * from "./util/isProxy.js"; +export * from "./util/createInteractOptions.js"; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/jsonldDatasetProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/jsonldDatasetProxy.ts new file mode 100644 index 0000000..2308419 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/jsonldDatasetProxy.ts @@ -0,0 +1,28 @@ +import { defaultGraph } from "@ldo/rdf-utils"; +import type { Dataset } from "@rdfjs/types"; +import type { ContextDefinition } from "jsonld"; +import { ContextUtil } from "./ContextUtil.js"; +import { JsonldDatasetProxyBuilder } from "./JsonldDatasetProxyBuilder.js"; +import { ProxyContext } from "./ProxyContext.js"; +import type { LdoJsonldContext } from "./LdoJsonldContext.js"; + +/** + * Creates a JSON-LD Dataset Proxy + * + * @param inputDataset the source dataset + * @param context JSON-LD Context + * @returns a JSON-LD Dataset proxy + */ +export function jsonldDatasetProxy( + inputDataset: Dataset, + context: ContextDefinition | LdoJsonldContext, +): JsonldDatasetProxyBuilder { + const contextUtil = new ContextUtil(context); + const proxyContext = new ProxyContext({ + dataset: inputDataset, + contextUtil, + writeGraphs: [defaultGraph()], + languageOrdering: ["none", "en", "other"], + }); + return new JsonldDatasetProxyBuilder(proxyContext); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageMapProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageMapProxy.ts new file mode 100644 index 0000000..5483e20 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageMapProxy.ts @@ -0,0 +1,75 @@ +import type { PredicateNode, SubjectNode } from "@ldo/rdf-utils"; +import { quad, literal } from "@ldo/rdf-utils"; +import type { ProxyContext } from "../ProxyContext.js"; +import { + languageKeyToLiteralLanguage, + quadsToLanguageQuadMap, + languageDeleteMatch, +} from "./languageUtils.js"; +import type { LanguageMap, LanguageSetMap } from "./languagesOf.js"; +import LanguageSet from "./languageSet.js"; + +export function createLanguageMapProxy< + Target extends LanguageMap | LanguageSetMap, +>( + subject: SubjectNode, + predicate: PredicateNode, + proxyContext: ProxyContext, + isArray: boolean, +): Target { + const target: Target = {} as Target; + // Function to call to update the target to represent what's in the dataset + const targetSetter = (target: Target) => { + // Clear the target + Object.keys(target).forEach((key) => delete target[key]); + // Add current language map to target + const allQuads = proxyContext.dataset.match(subject, predicate); + const languageQuadMap = quadsToLanguageQuadMap(allQuads); + Object.entries(languageQuadMap).forEach(([language, quads]) => { + const stringArray = quads.toArray().map((quad) => quad.object.value); + if (isArray) { + target[language] = new Set(stringArray); + } else { + target[language] = stringArray[0]; + } + }); + }; + + targetSetter(target); + + return new Proxy(target, { + get: (target, key) => { + targetSetter(target); + if (typeof key !== "string") { + return Reflect.get(target, key); + } + if (isArray) { + return new LanguageSet(subject, predicate, key, proxyContext); + } + return Reflect.get(target, key); + }, + set: (target, key, value) => { + const language = languageKeyToLiteralLanguage(key); + // Delete all quads with the language currently + if (!isArray) { + languageDeleteMatch(proxyContext.dataset, subject, predicate, language); + } + // Add the new quad for the language + proxyContext.writeGraphs.forEach((writeGraph) => { + proxyContext.dataset.add( + quad(subject, predicate, literal(value, language), writeGraph), + ); + }); + return Reflect.set(target, key, value); + }, + deleteProperty: (target, key) => { + languageDeleteMatch( + proxyContext.dataset, + subject, + predicate, + languageKeyToLiteralLanguage(key), + ); + return Reflect.deleteProperty(target, key); + }, + }) as Target; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageSet.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageSet.ts new file mode 100644 index 0000000..7ede47f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageSet.ts @@ -0,0 +1,129 @@ +import { literal, quad } from "@ldo/rdf-utils"; +import type { PredicateNode, SubjectNode } from "@ldo/rdf-utils"; +import type { Dataset, Literal } from "@rdfjs/types"; +import type { LanguageKey } from "./languageTypes.js"; +import type { LiteralObjectQuad } from "./languageUtils.js"; +import { languageDeleteMatch, languageMatch } from "./languageUtils.js"; +import type { ProxyContext } from "../ProxyContext.js"; + +export default class LanguageSet implements Set { + private subject: SubjectNode; + private predicate: PredicateNode; + private languageKey: LanguageKey; + private proxyContext: ProxyContext; + + constructor( + subject: SubjectNode, + predicate: PredicateNode, + languageKey: LanguageKey, + proxyContext: ProxyContext, + ) { + this.subject = subject; + this.predicate = predicate; + this.languageKey = languageKey; + this.proxyContext = proxyContext; + } + + private matchThis(): Dataset { + return languageMatch( + this.proxyContext.dataset, + this.subject, + this.predicate, + this.languageKey, + ); + } + + private getLiteral(value: string): Literal { + return this.languageKey === "@none" + ? literal(value) + : literal(value, this.languageKey); + } + + public get size(): number { + return this.matchThis().size; + } + + add(value: string): this { + this.proxyContext.writeGraphs.forEach((graph) => { + this.proxyContext.dataset.add( + quad( + this.subject, + this.predicate, + literal(value, this.languageKey), + graph, + ), + ); + }); + return this; + } + + clear(): void { + languageDeleteMatch( + this.proxyContext.dataset, + this.subject, + this.predicate, + this.languageKey, + ); + } + + delete(value: string): boolean { + const hadValue = this.has(value); + this.proxyContext.dataset.deleteMatches( + this.subject, + this.predicate, + this.getLiteral(value), + ); + return hadValue; + } + + forEach( + callbackfn: (value: string, value2: string, set: Set) => void, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + thisArg?: any, + ): void { + const quads = this.matchThis(); + quads.forEach((curQuad) => { + callbackfn(curQuad.object.value, curQuad.object.value, thisArg || this); + }); + } + + has(item: string): boolean { + return ( + this.proxyContext.dataset.match( + this.subject, + this.predicate, + this.getLiteral(item), + ).size > 0 + ); + } + + *entries(): IterableIterator<[string, string]> { + const quads = this.matchThis(); + for (const curQuad of quads) { + yield [curQuad.object.value, curQuad.object.value]; + } + } + + *keys(): IterableIterator { + const quads = this.matchThis(); + for (const curQuad of quads) { + yield curQuad.object.value; + } + } + + *values(): IterableIterator { + const quads = this.matchThis(); + for (const curQuad of quads) { + yield curQuad.object.value; + } + } + + *[Symbol.iterator](): IterableIterator { + const quads = this.matchThis(); + for (const curQuad of quads) { + yield curQuad.object.value; + } + } + + [Symbol.toStringTag] = "LanguageSet"; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageTypes.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageTypes.ts new file mode 100644 index 0000000..0efff8e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageTypes.ts @@ -0,0 +1,3 @@ +export type LanguageOrdering = ("@none" | "@other" | string)[]; + +export type LanguageKey = "@none" | string; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageUtils.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageUtils.ts new file mode 100644 index 0000000..6a2e65b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languageUtils.ts @@ -0,0 +1,159 @@ +import type { Dataset, Literal, Quad, Quad_Object } from "@rdfjs/types"; +import type { ObjectNode, PredicateNode, SubjectNode } from "@ldo/rdf-utils"; +import { createDataset } from "@ldo/dataset"; +import type { LanguageKey, LanguageOrdering } from "./languageTypes.js"; + +/** + * + * @param dataset + * @param subject + * @param predicate + * @param languageKey + * @returns + */ +export function languageMatch( + dataset: Dataset, + subject: ObjectNode, + predicate: PredicateNode, + languageKey: LanguageKey, +): Dataset { + const literalLanguage = languageKeyToLiteralLanguage(languageKey); + return dataset.match(subject, predicate).filter((quad) => { + return ( + isLanguageLiteral(quad.object) && quad.object.language === literalLanguage + ); + }) as Dataset; +} + +/** + * + * @param dataset + * @param subject + * @param predicate + * @param languageKey + */ +export function languageDeleteMatch( + dataset: Dataset, + subject: SubjectNode, + predicate: PredicateNode, + languageKey: LanguageKey, +): void { + const quadsToDelete = languageMatch(dataset, subject, predicate, languageKey); + quadsToDelete.forEach((quad) => { + dataset.delete(quad); + }); +} + +/** + * Given a node, will return true if that node is a literal that could have a + * language. This does not guarantee that it is a language literal. + * @param node the node to test + * @returns boolean + */ +export function isLanguageLiteral(node: Quad_Object): node is Literal { + return ( + node.termType === "Literal" && + (node.datatype.value === + "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" || + node.datatype.value === "http://www.w3.org/2001/XMLSchema#string") + ); +} + +export interface LiteralObjectQuad extends Quad { + object: Literal; +} + +export function quadsToLanguageQuadMap( + quads: Dataset, +): Record> { + const languageQuadMap: Record> = {}; + quads.forEach((quad) => { + const literal = quad.object; + if (isLanguageLiteral(literal)) { + const languageKey = literalLanguageToLanguageKey(literal.language); + if (!languageQuadMap[languageKey]) { + languageQuadMap[languageKey] = + createDataset() as Dataset; + } + languageQuadMap[languageKey].add(quad as LiteralObjectQuad); + } + }); + return languageQuadMap; +} + +export function filterQuadsByLanguageOrdering( + quads: Dataset, + languageOrdering: LanguageOrdering, +): Dataset { + const languageQuadMap = quadsToLanguageQuadMap(quads); + const validLanguages = new Set(languageOrdering); + const presentLanguages = new Set(Object.keys(languageQuadMap)); + for (const currentLanguageKey of languageOrdering) { + if (presentLanguages.has(currentLanguageKey)) { + return languageQuadMap[currentLanguageKey]; + } + if (currentLanguageKey === "@other") { + for (const presentLang of presentLanguages) { + if (!validLanguages.has(presentLang)) { + return languageQuadMap[presentLang]; + } + } + } + } + return createDataset(); +} + +export function getLanguageKeyForWriteOperation( + languageOrdering: LanguageOrdering, +): LanguageKey | undefined { + return languageOrdering.find((lang) => lang !== "@other"); +} + +// function addToDatasetMap( +// key: string, +// value: Quad, +// map: Record +// ) { +// if (!map[key]) { +// map[key] = createDataset(); +// } +// map[key].add(value); +// } + +// export function filterDatasetByLanguageOrdering( +// dataset: Dataset, +// proxyContext: ProxyContext +// ): Dataset { +// // TODO: This is an O(n) task that could be reduced to O(1) if we cached some +// // of the processing +// const validLangs = new Set(proxyContext.languageOrdering); +// const sortedLangs: Record = {}; +// dataset.forEach((quad) => { +// const literal = quad.object; +// if (isLangStringNode(literal)) { +// if (literal.language === "") { +// addToDatasetMap("@none", quad, sortedLangs); +// } else if (validLangs.has(literal.language)) { +// addToDatasetMap(literal.language, quad, sortedLangs); +// } else { +// addToDatasetMap("@other", quad, sortedLangs); +// } +// } +// }); +// for (const language of proxyContext.languageOrdering) { +// if (sortedLangs[language]) { +// return sortedLangs[language]; +// } +// } +// return createDataset(); +// } + +export function languageKeyToLiteralLanguage( + languageKey: string | symbol, +): string { + return (languageKey === "@none" ? "" : languageKey) as string; +} + +export function literalLanguageToLanguageKey(literalLanguage: string): string { + return literalLanguage === "" ? "@none" : literalLanguage; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languagesOf.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languagesOf.ts new file mode 100644 index 0000000..3bfb537 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/language/languagesOf.ts @@ -0,0 +1,65 @@ +import { namedNode } from "@ldo/rdf-utils"; +import { getSubjectProxyFromObject } from "../subjectProxy/isSubjectProxy.js"; +import type { ObjectLike } from "../types.js"; +import { _getUnderlyingNode, _proxyContext } from "../types.js"; +import { createLanguageMapProxy } from "./languageMapProxy.js"; +import type { LdSet } from "../setProxy/ldSet/LdSet.js"; + +/** + * ----------------------------------------------------------------------------- + * Types + * ----------------------------------------------------------------------------- + */ + +export type LanguageMap = { + "@none"?: string; + [language: string]: string | undefined; +}; + +export type LanguageSetMap = { + "@none"?: LanguageSet; + [language: string]: LanguageSet | undefined; +}; + +export type LanguageSet = Set; + +export type LanguageOfConditionalReturn< + SubjectObject extends ObjectLike, + Key extends keyof SubjectObject, +> = NonNullable extends LdSet + ? LanguageSetMap + : LanguageMap; + +/** + * ----------------------------------------------------------------------------- + * Functions + * ----------------------------------------------------------------------------- + */ + +/** + * + * @param subject + * @param predicate + * @returns + */ +export function languagesOf< + SubjectObject extends ObjectLike, + Key extends keyof SubjectObject, +>( + subjectObject: SubjectObject, + key: Key, +): LanguageOfConditionalReturn { + const proxy = getSubjectProxyFromObject(subjectObject); + const proxyContext = proxy[_proxyContext]; + const subject = proxy[_getUnderlyingNode]; + const rdfTypes = proxyContext.getRdfType(subject); + const predicate = namedNode( + proxyContext.contextUtil.keyToIri(key as string, rdfTypes), + ); + return createLanguageMapProxy( + subject, + predicate, + proxyContext, + proxyContext.contextUtil.isSet(key as string, rdfTypes), + ) as LanguageOfConditionalReturn; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setLanguagePreferences.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setLanguagePreferences.ts new file mode 100644 index 0000000..6d007a1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setLanguagePreferences.ts @@ -0,0 +1,14 @@ +import type { LanguageOrdering } from "./language/languageTypes.js"; +import type { InteractOptions } from "./util/createInteractOptions.js"; +import { createProxyInteractOptions } from "./util/createInteractOptions.js"; + +/** + * Set the default language pr + * @param graphs The graphs that should be written to + * @returns a write builder + */ +export function setLanguagePreferences( + ...languageOrdering: LanguageOrdering +): InteractOptions { + return createProxyInteractOptions("languageOrdering", languageOrdering); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/ObjectSetProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/ObjectSetProxy.ts new file mode 100644 index 0000000..cb974ae --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/ObjectSetProxy.ts @@ -0,0 +1,66 @@ +import type { GraphNode, PredicateNode, SubjectNode } from "@ldo/rdf-utils"; +import type { RawObject, RawValue } from "../util/RawObject.js"; +import { WildcardObjectSetProxy } from "./WildcardObjectSetProxy.js"; +import { addObjectToDataset } from "../util/addObjectToDataset.js"; +import type { ProxyContext } from "../ProxyContext.js"; + +export type ObjectSetProxyQuadMatch = [ + SubjectNode, + PredicateNode, + undefined | null, + GraphNode | undefined | null, +]; + +export class ObjectSetProxy< + T extends NonNullable, +> extends WildcardObjectSetProxy { + protected quadMatch: ObjectSetProxyQuadMatch; + + constructor( + context: ProxyContext, + quadMatch: ObjectSetProxyQuadMatch, + isLangSet?: boolean, + ) { + super(context, quadMatch, isLangSet); + this.quadMatch = quadMatch; + } + + /** + * Appends a new element with a specified value to the end of the Set. + */ + add(value: T): this { + addObjectToDataset( + { + "@id": this.quadMatch[0], + [this.context.contextUtil.iriToKey( + this.quadMatch[1].value, + this.context.getRdfType(this.quadMatch[0]), + )]: value, + } as RawObject, + false, + this.context, + ); + return this; + } + + /** + * Clears the set of all values + */ + clear(): void { + for (const value of this) { + this.delete(value); + } + } + + /** + * Deletes an item for the set + * @param value the item to delete + * @returns true if the item was present before deletion + */ + delete(value: T): boolean { + const { dataset } = this.context; + const quads = this.getQuads(value); + quads.forEach((quad) => dataset.delete(quad)); + return quads.size > 0; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/SetProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/SetProxy.ts new file mode 100644 index 0000000..7cadec0 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/SetProxy.ts @@ -0,0 +1,141 @@ +/** + * This file handles the underlying functionality of a set, including hidden + * helper methods + */ +import type { Dataset, Quad } from "@rdfjs/types"; +import type { + GraphNode, + ObjectNode, + QuadMatch, + SubjectNode, +} from "@ldo/rdf-utils"; +import { + _isSubjectOriented, + _getUnderlyingDataset, + _proxyContext, + _isLangString, + _getUnderlyingMatch, + _getUnderlyingNode, + _writeGraphs, +} from "../types.js"; +import type { ProxyContext } from "../ProxyContext.js"; +import type { RawValue } from "../util/RawObject.js"; +import { nodeToJsonldRepresentation } from "../util/nodeToJsonldRepresentation.js"; +import { BasicLdSet } from "./ldSet/BasicLdSet.js"; + +/** + * A Set Proxy represents a set of items in a dataset and is a proxy for + * accessing those items in the dataset. + */ +export abstract class SetProxy< + T extends NonNullable = NonNullable, +> extends BasicLdSet { + protected quadMatch: QuadMatch; + protected context: ProxyContext; + + constructor(context: ProxyContext, quadMatch: QuadMatch) { + super(); + this.context = context; + this.quadMatch = quadMatch; + } + + /** + * Gets the subject, predicate and object for this set + */ + protected abstract getQuads(value?: T): Dataset; + + protected abstract getNodeOfFocus(quad: Quad): SubjectNode | ObjectNode; + + /** + * The add method on a wildcard set does nothing. + * @deprecated You cannot add data to a wildcard set as it is simply a proxy to an underlying dataset + */ + add(_value: T) { + console.warn( + 'You\'ve attempted to call "add" on a wildcard set. You cannot add data to a wildcard set as it is simply a proxy to an underlying dataset', + ); + return this; + } + + /** + * The clear method on an abstract set does nothing. + * @deprecated You cannot clear data from an abstract set as it is simply a proxy to an underlying dataset + */ + clear(): void { + console.warn( + 'You\'ve attempted to call "clear" on an abstract set. You cannot clear data from an abstract set as it is simply a proxy to an underlying dataset', + ); + return; + } + + /** + * The delete method on an abstract set does nothing. + * @deprecated You cannot delete data from an abstract set as it is simply a proxy to an underlying dataset + */ + delete(_value: T): boolean { + console.warn( + 'You\'ve attempted to call "clear" on an abstract set. You cannot delete data from an abstract set as it is simply a proxy to an underlying dataset', + ); + return false; + } + + has(value: T): boolean { + return this.getQuads(value).size > 0; + } + + get size() { + return this.getQuads().size; + } + + entries(): IterableIterator<[T, T]> { + const iteratorSet = new Set<[T, T]>(); + for (const value of this) { + iteratorSet.add([value, value]); + } + return iteratorSet[Symbol.iterator](); + } + + keys(): IterableIterator { + return this.values(); + } + + values(): IterableIterator { + return this[Symbol.iterator](); + } + + [Symbol.iterator](): IterableIterator { + const quads = this.getQuads(); + const collection: T[] = quads.toArray().map((quad) => { + const quadSubject = this.getNodeOfFocus(quad); + return nodeToJsonldRepresentation(quadSubject, this.context) as T; + }); + return new Set(collection)[Symbol.iterator](); + } + + get [Symbol.toStringTag]() { + // TODO: Change this to be human readable. + return "LdSet"; + } + + get [_getUnderlyingDataset](): Dataset { + return this.context.dataset; + } + + get [_getUnderlyingMatch](): QuadMatch { + return this.quadMatch; + } + + get [_proxyContext](): ProxyContext { + return this.context; + } + + set [_proxyContext](newContext: ProxyContext) { + this.context = newContext; + } + + get [_writeGraphs](): GraphNode[] { + return this.context.writeGraphs; + } + + abstract get [_isSubjectOriented](): boolean; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/SubjectSetProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/SubjectSetProxy.ts new file mode 100644 index 0000000..8bc0b99 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/SubjectSetProxy.ts @@ -0,0 +1,85 @@ +import { + type GraphNode, + type ObjectNode, + type PredicateNode, +} from "@ldo/rdf-utils"; +import type { RawObject } from "../util/RawObject.js"; +import { addObjectToDataset } from "../util/addObjectToDataset.js"; +import type { ProxyContext } from "../ProxyContext.js"; +import { WildcardSubjectSetProxy } from "./WildcardSubjectSetProxy.js"; +import { _getUnderlyingNode } from "../types.js"; +import { quad, defaultGraph } from "@ldo/rdf-utils"; +import { + createTransactionDatasetFactory, + TransactionDataset, +} from "@ldo/subscribable-dataset"; +import { createDatasetFactory } from "@ldo/dataset"; +import { getNodeFromRawObject } from "../util/getNodeFromRaw.js"; +import { nodeToString } from "../util/NodeSet.js"; + +export type SubjectSetProxyQuadMatch = [ + undefined | null, + PredicateNode, + ObjectNode, + GraphNode | undefined | null, +]; + +export class SubjectSetProxy< + T extends RawObject, +> extends WildcardSubjectSetProxy { + protected quadMatch: SubjectSetProxyQuadMatch; + + constructor(context: ProxyContext, quadMatch: SubjectSetProxyQuadMatch) { + super(context, quadMatch); + this.quadMatch = quadMatch; + } + + /** + * Appends a new element with a specified value to the end of the Set. + */ + add(value: T): this { + if (typeof value !== "object") { + throw new Error( + `Cannot add a literal "${value}"(${typeof value}) to a subject-oriented collection.`, + ); + } + // Create a test dataset to see if the inputted data is valid + const testDataset = new TransactionDataset( + this.context.dataset, + createDatasetFactory(), + createTransactionDatasetFactory(), + ); + addObjectToDataset( + value, + false, + this.context.duplicate({ + writeGraphs: [defaultGraph()], + }), + ); + const isValidAddition = + testDataset.match( + getNodeFromRawObject(value, this.context.contextUtil), + this.quadMatch[1], + this.quadMatch[2], + ).size !== 0; + if (!isValidAddition) { + throw new Error( + `Cannot add value to collection. This must contain a quad that matches (${nodeToString( + this.quadMatch[0], + )}, ${nodeToString(this.quadMatch[1])}, ${nodeToString( + this.quadMatch[2], + )}, ${nodeToString(this.quadMatch[3])})`, + ); + } + + // Add the object if everything's okay + const added = addObjectToDataset(value as RawObject, false, this.context); + const addedNode = added[_getUnderlyingNode]; + this.context.writeGraphs.forEach((graph) => { + this.context.dataset.add( + quad(addedNode, this.quadMatch[1], this.quadMatch[2], graph), + ); + }); + return this; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/WildcardObjectSetProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/WildcardObjectSetProxy.ts new file mode 100644 index 0000000..6c7154b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/WildcardObjectSetProxy.ts @@ -0,0 +1,89 @@ +import type { + SubjectNode, + PredicateNode, + ObjectNode, + GraphNode, +} from "@ldo/rdf-utils"; +import type { Dataset, Quad } from "@rdfjs/types"; +import type { RawValue } from "../util/RawObject.js"; +import { SetProxy } from "./SetProxy.js"; +import type { ProxyContext } from "../ProxyContext.js"; +import { getNodeFromRawValue } from "../util/getNodeFromRaw.js"; +import { _isSubjectOriented } from "../types.js"; +import { filterQuadsByLanguageOrdering } from "../language/languageUtils.js"; + +export type WildcardObjectSetProxyQuadMatch = [ + SubjectNode | undefined | null, + PredicateNode | undefined | null, + undefined | null, + GraphNode | undefined | null, +]; + +/** + * A WildcardObjectProxy represents a set of nodes in a dataset that are all the + * object of a given subject and predicate. Because this is a wildcard, the + * subject and predicate don't necissarily need to be defined. + */ +export class WildcardObjectSetProxy< + T extends NonNullable, +> extends SetProxy { + protected quadMatch: WildcardObjectSetProxyQuadMatch; + protected isLangStringSet: boolean; + + constructor( + context: ProxyContext, + quadMatch: WildcardObjectSetProxyQuadMatch, + isLangStringSet?: boolean, + ) { + super(context, quadMatch); + this.quadMatch = quadMatch; + this.isLangStringSet = isLangStringSet ?? false; + } + + protected getQuads(value?: T | undefined): Dataset { + const { dataset } = this.context; + let quads: Dataset; + // Get the RDF Node that represents the value, skip if no value + const subject = this.quadMatch[0] ?? undefined; + const predicate = this.quadMatch[1] ?? undefined; + const graph = this.quadMatch[3] ?? undefined; + if (value) { + // Get datatype if applicable + let datatype: string | undefined = undefined; + if (this.quadMatch[0] && predicate) { + const rdfType = this.context.getRdfType(this.quadMatch[0]); + const key = this.context.contextUtil.iriToKey(predicate.value, rdfType); + datatype = this.context.contextUtil.getDataType(key, rdfType); + } + const valueNode = getNodeFromRawValue(value, this.context, datatype); + quads = dataset.match(subject, predicate, valueNode, graph); + // If there is no valueNode, we must filter by value manually as we + // weren't able to deduce the datatype. + if (!valueNode) { + quads = quads.filter( + (quad) => + quad.object.termType === "Literal" && quad.object.value === value, + ); + } + } else { + // SPO for no value + quads = dataset.match(subject, predicate, undefined, graph); + } + // If this is a langStringSet, filter by language preferences + if (this.isLangStringSet) { + return filterQuadsByLanguageOrdering( + quads, + this.context.languageOrdering, + ); + } + return quads; + } + + protected getNodeOfFocus(quad: Quad): ObjectNode { + return quad.object as ObjectNode; + } + + get [_isSubjectOriented](): false { + return false; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/WildcardSubjectSetProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/WildcardSubjectSetProxy.ts new file mode 100644 index 0000000..7521edb --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/WildcardSubjectSetProxy.ts @@ -0,0 +1,58 @@ +import type { + SubjectNode, + PredicateNode, + ObjectNode, + GraphNode, +} from "@ldo/rdf-utils"; +import type { Dataset, Quad } from "@rdfjs/types"; +import type { RawObject } from "../util/RawObject.js"; +import { SetProxy } from "./SetProxy.js"; +import type { ProxyContext } from "../ProxyContext.js"; +import { getNodeFromRawObject } from "../util/getNodeFromRaw.js"; +import { _isSubjectOriented } from "../types.js"; + +export type WildcardSubjectSetProxyQuadMatch = [ + undefined | null, + PredicateNode | undefined | null, + ObjectNode | undefined | null, + GraphNode | undefined | null, +]; + +/** + * A WildcardObjectProxy represents a set of nodes in a dataset that are all the + * object of a given subject and predicate. Because this is a wildcard, the + * subject and predicate don't necissarily need to be defined. + */ +export class WildcardSubjectSetProxy extends SetProxy { + protected quadMatch: WildcardSubjectSetProxyQuadMatch; + + constructor( + context: ProxyContext, + quadMatch: WildcardSubjectSetProxyQuadMatch, + ) { + super(context, quadMatch); + this.quadMatch = quadMatch; + } + + protected getQuads(value?: T | undefined): Dataset { + const { dataset } = this.context; + // Get the RDF Node that represents the value, skip is no value + const predicate = this.quadMatch[1]; + const object = this.quadMatch[2]; + const graph = this.quadMatch[3]; + if (value) { + const valueNode = getNodeFromRawObject(value, this.context.contextUtil); + return dataset.match(valueNode, predicate, object, graph); + } + // SPO for no value + return dataset.match(undefined, predicate, object, graph); + } + + protected getNodeOfFocus(quad: Quad): SubjectNode { + return quad.subject as SubjectNode; + } + + get [_isSubjectOriented](): true { + return true; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/createNewSetProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/createNewSetProxy.ts new file mode 100644 index 0000000..d8d3d3d --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/createNewSetProxy.ts @@ -0,0 +1,47 @@ +import type { QuadMatch } from "@ldo/rdf-utils"; +import type { ProxyContext } from "../ProxyContext.js"; +import type { RawObject, RawValue } from "../util/RawObject.js"; +import type { ObjectSetProxyQuadMatch } from "./ObjectSetProxy.js"; +import { ObjectSetProxy } from "./ObjectSetProxy.js"; +import type { SubjectSetProxyQuadMatch } from "./SubjectSetProxy.js"; +import { SubjectSetProxy } from "./SubjectSetProxy.js"; +import type { WildcardObjectSetProxyQuadMatch } from "./WildcardObjectSetProxy.js"; +import { WildcardObjectSetProxy } from "./WildcardObjectSetProxy.js"; +import type { WildcardSubjectSetProxyQuadMatch } from "./WildcardSubjectSetProxy.js"; +import { WildcardSubjectSetProxy } from "./WildcardSubjectSetProxy.js"; +import type { SetProxy } from "./SetProxy.js"; + +export function createNewSetProxy>( + quadMatch: QuadMatch, + isSubjectOriented: boolean, + proxyContext: ProxyContext, + isLangSet?: boolean, +): SetProxy { + if (!isSubjectOriented) { + if (quadMatch[0] && quadMatch[1]) { + return new ObjectSetProxy( + proxyContext, + quadMatch as ObjectSetProxyQuadMatch, + isLangSet, + ); + } else { + return new WildcardObjectSetProxy( + proxyContext, + quadMatch as WildcardObjectSetProxyQuadMatch, + isLangSet, + ); + } + } else { + if (quadMatch[1] && quadMatch[2]) { + return new SubjectSetProxy( + proxyContext, + quadMatch as SubjectSetProxyQuadMatch, + ); + } else { + return new WildcardSubjectSetProxy( + proxyContext, + quadMatch as WildcardSubjectSetProxyQuadMatch, + ); + } + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/isSetProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/isSetProxy.ts new file mode 100644 index 0000000..f0d4e1c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/isSetProxy.ts @@ -0,0 +1,7 @@ +import { SetProxy } from "./SetProxy.js"; + +export function isSetProxy(someObject?: unknown): someObject is SetProxy { + if (!someObject) return false; + if (typeof someObject !== "object") return false; + return someObject instanceof SetProxy; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/ldSet/BasicLdSet.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/ldSet/BasicLdSet.ts new file mode 100644 index 0000000..bd4ece3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/ldSet/BasicLdSet.ts @@ -0,0 +1,266 @@ +import type { BlankNode, NamedNode } from "@rdfjs/types"; +import { _getUnderlyingNode } from "../../types.js"; +import type { RawValue } from "../../util/RawObject.js"; +import type { LdSet } from "./LdSet.js"; +import { blankNode } from "@ldo/rdf-utils"; + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export class BasicLdSet = NonNullable> + implements LdSet +{ + private hashMap: Map; + + constructor(values?: Iterable | null) { + this.hashMap = new Map(); + if (values) { + for (const value of values) { + this.add(value); + } + } + } + + private hashFn(value: T): string { + if (typeof value !== "object") return value.toString(); + if (value[_getUnderlyingNode]) { + return (value[_getUnderlyingNode] as NamedNode | BlankNode).value; + } else if (!value["@id"]) { + return blankNode().value; + } else if (typeof value["@id"] === "string") { + return value["@id"]; + } else { + return value["@id"].value; + } + } + + /** + * =========================================================================== + * Base Set Functions + * =========================================================================== + */ + + add(value: T): this { + const key = this.hashFn(value); + if (!this.hashMap.has(key)) { + this.hashMap.set(key, value); + } + return this; + } + + clear(): void { + this.hashMap.clear(); + } + + delete(value: T): boolean { + const key = this.hashFn(value); + return this.hashMap.delete(key); + } + + has(value: T): boolean { + const key = this.hashFn(value); + return this.hashMap.has(key); + } + + get size(): number { + return this.hashMap.size; + } + + *entries(): IterableIterator<[T, T]> { + for (const [, value] of this.hashMap.entries()) { + yield [value, value]; + } + } + + keys(): IterableIterator { + return this.hashMap.values(); + } + + values(): IterableIterator { + return this.hashMap.values(); + } + [Symbol.iterator](): IterableIterator { + return this.hashMap.values(); + } + + get [Symbol.toStringTag]() { + // TODO: Change this to be human readable. + return "BasicLdSet"; + } + + /** + * =========================================================================== + * Array Functions + * =========================================================================== + */ + + every( + predicate: (value: T, set: LdSet) => value is S, + thisArg?: any, + ): this is LdSet; + every( + predicate: (value: T, set: LdSet) => unknown, + thisArg?: any, + ): boolean; + every(predicate: (value: T, set: LdSet) => any, thisArg?: any): boolean { + for (const value of this) { + if (!predicate.call(thisArg, value, this)) return false; + } + return true; + } + + some( + predicate: (value: T, set: LdSet) => unknown, + thisArg?: any, + ): boolean { + for (const value of this) { + if (predicate.call(thisArg, value, this)) return true; + } + return false; + } + + forEach( + callbackfn: (value: T, value2: T, set: LdSet) => void, + thisArg?: any, + ): void { + for (const value of this) { + callbackfn.call(thisArg, value, value, this); + } + } + + map(callbackfn: (value: T, set: LdSet) => U, thisArg?: any): U[] { + const returnValues: U[] = []; + for (const value of this) { + returnValues.push(callbackfn.call(thisArg, value, this)); + } + return returnValues; + } + + filter( + predicate: (value: T, set: LdSet) => value is S, + thisArg?: any, + ): LdSet; + filter( + predicate: (value: T, set: LdSet) => unknown, + thisArg?: any, + ): LdSet; + filter( + predicate: (value: T, set: LdSet) => any, + thisArg?: unknown, + ): LdSet { + const newSet = new BasicLdSet(); + for (const value of this) { + if (predicate.call(thisArg, value, this)) newSet.add(value); + } + return newSet; + } + + reduce( + callbackfn: (previousValue: T, currentValue: T, set: LdSet) => T, + ): T; + reduce( + callbackfn: (previousValue: T, currentValue: T, set: LdSet) => T, + initialValue: T, + ): T; + reduce( + callbackfn: (previousValue: U, currentValue: T, set: LdSet) => U, + initialValue: U, + ): U; + reduce(callbackfn: any, initialValue?: any): any { + const iterator = this[Symbol.iterator](); + let accumulator; + + if (initialValue === undefined) { + const first = iterator.next(); + if (first.done) { + throw new TypeError("Reduce of empty collection with no initial value"); + } + accumulator = first.value; + } else { + accumulator = initialValue; + } + + let result = iterator.next(); + while (!result.done) { + accumulator = callbackfn(accumulator, result.value, this); + result = iterator.next(); + } + + return accumulator; + } + + toArray(): T[] { + const arr: T[] = []; + this.forEach((value) => arr.push(value)); + return arr; + } + + toJSON(): T[] { + return this.toArray(); + } + + /** + * =========================================================================== + * Set Methods + * =========================================================================== + */ + + difference(other: Set): LdSet { + return this.filter((value) => !other.has(value)); + } + + intersection(other: Set): LdSet { + const newSet = new BasicLdSet(); + const iteratingSet = this.size < other.size ? this : other; + const comparingSet = this.size < other.size ? other : this; + for (const value of iteratingSet) { + if (comparingSet.has(value)) { + newSet.add(value); + } + } + return newSet; + } + + isDisjointFrom(other: Set): boolean { + const iteratingSet = this.size < other.size ? this : other; + const comparingSet = this.size < other.size ? other : this; + for (const value of iteratingSet) { + if (comparingSet.has(value)) return false; + } + return true; + } + + isSubsetOf(other: Set): boolean { + if (this.size > other.size) return false; + for (const value of this) { + if (!other.has(value)) return false; + } + return true; + } + + isSupersetOf(other: Set): boolean { + if (this.size < other.size) return false; + for (const value of other) { + if (!this.has(value)) return false; + } + return true; + } + + symmetricDifference(other: Set): LdSet { + const newSet = new BasicLdSet(); + this.forEach((value) => newSet.add(value)); + other.forEach((value) => { + if (newSet.has(value)) { + newSet.delete(value); + } else { + newSet.add(value); + } + }); + return newSet; + } + + union(other: Set): LdSet { + const newSet = new BasicLdSet(); + this.forEach((value) => newSet.add(value)); + other.forEach((value) => newSet.add(value)); + return newSet; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/ldSet/LdSet.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/ldSet/LdSet.ts new file mode 100644 index 0000000..f0be486 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/ldSet/LdSet.ts @@ -0,0 +1,189 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +/** + * An abract representation for a set of Linked Data Objects + */ +export interface LdSet extends Set { + /** + * =========================================================================== + * BASE METHODS + * =========================================================================== + */ + /** + * Appends a new element with a specified value to the end of the Set. + */ + add(value: T): this; + /** + * Clears this set of all values, but keeps the values in the datastore + */ + clear(): void; + /** + * Removes a specified value from the Set. + * @returns Returns true if an element in the Set existed and has been removed, or false if the element does not exist. + */ + delete(value: T): boolean; + /** + * @returns a boolean indicating whether an element with the specified value exists in the Set or not. + */ + has(value: T): boolean; + /** + * @returns the number of (unique) elements in Set. + */ + readonly size: number; + /** Iterates over values in the set. */ + [Symbol.iterator](): IterableIterator; + /** + * Returns an iterable of [v,v] pairs for every value `v` in the set. + */ + entries(): IterableIterator<[T, T]>; + /** + * Despite its name, returns an iterable of the values in the set. + */ + keys(): IterableIterator; + /** + * Returns an iterable of values in the set. + */ + values(): IterableIterator; + /** + * =========================================================================== + * ITERATOR METHODS + * These methods mimic array methods + * =========================================================================== + */ + /** + * Determines whether all the members of an set satisfy the specified test. + * @param predicate A function that accepts up to two arguments. The every method calls + * the predicate function for each element in the set until the predicate returns a value + * which is coercible to the Boolean value false, or until the end of the set. + * @param thisArg An object to which the this keyword can refer in the predicate function. + * If thisArg is omitted, undefined is used as the this value. + */ + every( + predicate: (value: T, set: LdSet) => value is S, + thisArg?: any, + ): this is LdSet; + /** + * Determines whether all the members of an set satisfy the specified test. + * @param predicate A function that accepts up to two arguments. The every method calls + * the predicate function for each element in the set until the predicate returns a value + * which is coercible to the Boolean value false, or until the end of the set. + * @param thisArg An object to which the this keyword can refer in the predicate function. + * If thisArg is omitted, undefined is used as the this value. + */ + every( + predicate: (value: T, set: LdSet) => unknown, + thisArg?: any, + ): boolean; + /** + * Determines whether the specified callback function returns true for any element of a set. + * @param predicate A function that accepts up to two arguments. The some method calls + * the predicate function for each element in the set until the predicate returns a value + * which is coercible to the Boolean value true, or until the end of the set. + * @param thisArg An object to which the this keyword can refer in the predicate function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(predicate: (value: T, set: LdSet) => unknown, thisArg?: any): boolean; + /** + * Performs the specified action for each element in an set. + * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the set. A "value2" is provided for parity with the base set. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + forEach( + callbackfn: (value: T, value2: T, set: LdSet) => void, + thisArg?: any, + ): void; + /** + * Calls a defined callback function on each element of an set, and returns a set that contains the results. + * @param callbackfn A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the set. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: T, set: LdSet) => U, thisArg?: any): U[]; + /** + * Returns the elements of a set that meet the condition specified in a callback function. + * @param predicate A function that accepts up to two arguments. The filter method calls the predicate function one time for each element in the set. + * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. + */ + filter( + predicate: (value: T, set: LdSet) => value is S, + thisArg?: any, + ): LdSet; + /** + * Returns the elements of a set that meet the condition specified in a callback function. + * @param predicate A function that accepts up to two arguments. The filter method calls the predicate function one time for each element in the set. + * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. + */ + filter( + predicate: (value: T, set: LdSet) => unknown, + thisArg?: any, + ): LdSet; + /** + * Calls the specified callback function for all the elements in a set. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the set. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduce( + callbackfn: (previousValue: T, currentValue: T, set: LdSet) => T, + ): T; + /** + * Calls the specified callback function for all the elements in a set. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the set. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduce( + callbackfn: (previousValue: T, currentValue: T, set: LdSet) => T, + initialValue: T, + ): T; + /** + * Calls the specified callback function for all the elements in a set. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the set. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. + */ + reduce( + callbackfn: (previousValue: U, currentValue: T, array: LdSet) => U, + initialValue: U, + ): U; + + /** + * Converts the current LdSet to an array. + */ + toArray(): T[]; + + /** + * Converts to JSON + */ + toJSON(): T[]; + + /** + * =========================================================================== + * EXTENDED SET METHODS + * =========================================================================== + */ + /** + * Returns a new set containing elements in this set but not in the given set. + */ + difference(other: Set): LdSet; + /** + * returns a new set containing elements in both this set and the given set. + */ + intersection(other: Set): LdSet; + /** + * Returns a boolean indicating if this set has no elements in common with the given set. + */ + isDisjointFrom(other: Set): boolean; + /** + * Returns a boolean indicating if all elements of this set are in the given set. + */ + isSubsetOf(other: Set): boolean; + /** + * Returns a boolean indicating if all elements of the given set are in this set. + */ + isSupersetOf(other: Set): boolean; + /** + * Returns a new set containing elements which are in either this set or the given set, but not in both. + */ + symmetricDifference(other: Set): LdSet; + /** + * Returns a new set containing elements which are in either or both of this set and the given set. + */ + union(other: Set): LdSet; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/set.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/set.ts new file mode 100644 index 0000000..29f9d60 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/setProxy/set.ts @@ -0,0 +1,14 @@ +import type { RawValue } from "../util/RawObject.js"; +import { BasicLdSet } from "./ldSet/BasicLdSet.js"; +import type { LdSet } from "./ldSet/LdSet.js"; + +/** + * Creates an LdSet used by LDO as a list of items. + * @param values The list of items in the set + * @returns An LdSet + */ +export function set(...values: T[]): LdSet { + return new BasicLdSet( + values as Iterable>, + ) as unknown as LdSet; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/SubjectProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/SubjectProxy.ts new file mode 100644 index 0000000..5e9d2b7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/SubjectProxy.ts @@ -0,0 +1,20 @@ +import type { GraphNode } from "@ldo/rdf-utils"; +import type { BlankNode, Dataset, NamedNode } from "@rdfjs/types"; +import type { ContextDefinition } from "jsonld"; +import type { ProxyContext } from "../ProxyContext.js"; +import type { + _getUnderlyingDataset, + _getUnderlyingNode, + _proxyContext, + _writeGraphs, +} from "../types.js"; + +export type SubjectProxy = { + "@id"?: string; + "@context": ContextDefinition; + [key: string | number | symbol]: unknown; + readonly [_getUnderlyingDataset]: Dataset; + readonly [_getUnderlyingNode]: NamedNode | BlankNode; + [_proxyContext]: ProxyContext; + readonly [_writeGraphs]: GraphNode[]; +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/createSubjectHandler.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/createSubjectHandler.ts new file mode 100644 index 0000000..ede4a7e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/createSubjectHandler.ts @@ -0,0 +1,114 @@ +import { namedNode, blankNode, quad } from "@ldo/rdf-utils"; +import type { BlankNode, NamedNode } from "@rdfjs/types"; +import { addObjectToDataset } from "../util/addObjectToDataset.js"; +import { deleteValueFromDataset } from "./deleteFromDataset.js"; +import { + _getUnderlyingDataset, + _getUnderlyingNode, + _proxyContext, + _writeGraphs, +} from "../types.js"; +import { getValueForKey } from "./getValueForKey.js"; +import type { ProxyContext } from "../ProxyContext.js"; +export interface SubjectProxyTarget { + "@id": NamedNode | BlankNode; +} + +export function createSubjectHandler( + initialProxyContext: ProxyContext, +): ProxyHandler { + let proxyContext = initialProxyContext; + return { + get(target: SubjectProxyTarget, key: string | symbol) { + switch (key) { + case _getUnderlyingDataset: + return proxyContext.dataset; + case _getUnderlyingNode: + return target["@id"]; + case _proxyContext: + return proxyContext; + case _writeGraphs: + return proxyContext.writeGraphs; + case "@context": + return proxyContext.contextUtil.context; + } + return getValueForKey(target, key, proxyContext); + }, + getOwnPropertyDescriptor(target: SubjectProxyTarget, key: string) { + return { + value: getValueForKey(target, key, proxyContext), + writable: true, + enumerable: true, + configurable: true, + }; + }, + ownKeys(target) { + const subject = target["@id"]; + const tripleDataset = proxyContext.dataset.match(subject); + const keys: Set = new Set(["@id"]); + tripleDataset.toArray().forEach((quad) => { + keys.add( + proxyContext.contextUtil.iriToKey( + quad.predicate.value, + proxyContext.getRdfType(subject), + ), + ); + }); + return Array.from(keys); + }, + set: (target: SubjectProxyTarget, key, value) => { + if (key === _proxyContext) { + proxyContext = value; + return true; + } + if ( + key === "@id" && + (typeof value === "string" || typeof value == "undefined") + ) { + const newSubjectNode = value ? namedNode(value) : blankNode(); + // Replace Subject Quads + const currentSubjectQuads = proxyContext.dataset + .match(target["@id"]) + .toArray(); + const newSubjectQuads = currentSubjectQuads.map((curQuad) => + quad( + newSubjectNode, + curQuad.predicate, + curQuad.object, + curQuad.graph, + ), + ); + currentSubjectQuads.forEach((curQuad) => + proxyContext.dataset.delete(curQuad), + ); + proxyContext.dataset.addAll(newSubjectQuads); + // Replace Object Quads + const currentObjectQuads = proxyContext.dataset + .match(undefined, undefined, target["@id"]) + .toArray(); + const newObjectQuads = currentObjectQuads.map((curQuad) => + quad( + curQuad.subject, + curQuad.predicate, + newSubjectNode, + curQuad.graph, + ), + ); + currentObjectQuads.forEach((curQuad) => + proxyContext.dataset.delete(curQuad), + ); + proxyContext.dataset.addAll(newObjectQuads); + target["@id"] = newSubjectNode; + } + addObjectToDataset( + { "@id": target["@id"], [key]: value }, + true, + proxyContext, + ); + return true; + }, + deleteProperty(target, key) { + return deleteValueFromDataset(target, key, proxyContext); + }, + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/deleteFromDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/deleteFromDataset.ts new file mode 100644 index 0000000..338247c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/deleteFromDataset.ts @@ -0,0 +1,33 @@ +import type { SubjectProxyTarget } from "./createSubjectHandler.js"; +import type { ProxyContext } from "../ProxyContext.js"; +import { addObjectToDataset } from "../util/addObjectToDataset.js"; + +export function deleteValueFromDataset( + target: SubjectProxyTarget, + key: string | symbol, + proxyContext: ProxyContext, +) { + if (key === "@context") { + return true; + } + if (key === "toString" || key === Symbol.toStringTag) { + return true; + } + if (typeof key === "symbol") { + return true; + } + // Remove this node completely if delete on ID + if (key === "@id") { + const thisNode = target["@id"]; + proxyContext.dataset.deleteMatches(thisNode, undefined, undefined); + proxyContext.dataset.deleteMatches(undefined, undefined, thisNode); + return true; + } + // Otherwise, this is essentially treated like setting a key to undefined. + addObjectToDataset( + { "@id": target["@id"], [key]: undefined }, + true, + proxyContext, + ); + return true; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/getValueForKey.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/getValueForKey.ts new file mode 100644 index 0000000..2041e9c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/getValueForKey.ts @@ -0,0 +1,62 @@ +import type { SubjectProxyTarget } from "./createSubjectHandler.js"; +import { namedNode } from "@ldo/rdf-utils"; +import { nodeToJsonldRepresentation } from "../util/nodeToJsonldRepresentation.js"; +import type { SubjectProxy } from "./SubjectProxy.js"; +import type { SetProxy } from "../setProxy/SetProxy.js"; +import type { ProxyContext } from "../ProxyContext.js"; +import { filterQuadsByLanguageOrdering } from "../language/languageUtils.js"; + +/** + * Given a subject target and a key return the correct value + */ +export function getValueForKey( + target: SubjectProxyTarget, + key: string | symbol, + proxyContext: ProxyContext, +): SubjectProxy | SetProxy | string | number | boolean | undefined { + const { contextUtil, dataset } = proxyContext; + if (key === "@id") { + if (target["@id"].termType === "BlankNode") { + return undefined; + } + // Purposly don't provide a typeName because we don't want to use the nested + // context + return contextUtil.iriToKey(target["@id"].value, []); + } + if (key === "toString" || key === Symbol.toStringTag) { + // TODO: this toString method right now returns [object Object], + // which is correct, but it could be more descriptive, especially + // because console.log doesn't return anyting helpful due to the proxy. + return Reflect.get(target, "toString"); + } + if (typeof key === "symbol") { + return; + } + const subject = target["@id"]; + const rdfType = proxyContext.getRdfType(subject); + const predicate = namedNode(contextUtil.keyToIri(key, rdfType)); + if (contextUtil.isSet(key, rdfType)) { + const arrayProxy = proxyContext.createSetProxy( + [subject, predicate, null, null], + false, + contextUtil.isLangString(key, rdfType), + ); + return arrayProxy; + } + let objectDataset = dataset.match(subject, predicate); + if (contextUtil.isLangString(key, rdfType)) { + objectDataset = filterQuadsByLanguageOrdering( + objectDataset, + proxyContext.languageOrdering, + ); + } + if (objectDataset.size === 0) { + return undefined; + } else { + const thing = nodeToJsonldRepresentation( + objectDataset.toArray()[0].object, + proxyContext, + ); + return thing; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/isSubjectProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/isSubjectProxy.ts new file mode 100644 index 0000000..8dddbba --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/subjectProxy/isSubjectProxy.ts @@ -0,0 +1,30 @@ +import type { ObjectLike } from "../types.js"; +import { + _getUnderlyingDataset, + _getUnderlyingNode, + _proxyContext, + _writeGraphs, +} from "../types.js"; +import type { SubjectProxy } from "./SubjectProxy.js"; + +export function isSubjectProxy( + someObject?: unknown, +): someObject is SubjectProxy { + if (!someObject) return false; + if (typeof someObject !== "object") return false; + const potentialSubjectProxy = someObject as SubjectProxy; + return !( + typeof potentialSubjectProxy[_writeGraphs] !== "object" || + typeof potentialSubjectProxy[_getUnderlyingDataset] !== "object" || + typeof potentialSubjectProxy[_getUnderlyingNode] !== "object" || + typeof potentialSubjectProxy[_proxyContext] !== "object" + ); +} + +export function getSubjectProxyFromObject(object: ObjectLike): SubjectProxy { + const potentialSubjectProxy = object as SubjectProxy; + if (!isSubjectProxy(potentialSubjectProxy)) { + throw new Error(`${object} is not a Jsonld Dataset Proxy Subject`); + } + return potentialSubjectProxy; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/types.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/types.ts new file mode 100644 index 0000000..ea50d52 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/types.ts @@ -0,0 +1,11 @@ +export const _getUnderlyingNode = Symbol("_getUnderlyingNode"); +export const _getUnderlyingMatch = Symbol("_getUnderlyingMatch"); +export const _isSubjectOriented = Symbol("_isSubjectOriented"); +export const _isLangString = Symbol("_isLangString"); +export const _getUnderlyingDataset = Symbol("_getUnderlyingDataset"); +export const _proxyContext = Symbol("_proxyContext"); +export const _writeGraphs = Symbol("_writeGraphs"); + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type ObjectLike = Record; +export type LiteralLike = string | number | boolean; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/NodeSet.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/NodeSet.ts new file mode 100644 index 0000000..b9e6bfc --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/NodeSet.ts @@ -0,0 +1,35 @@ +import type { BlankNode, DefaultGraph, Literal, NamedNode } from "@rdfjs/types"; +import type { ObjectNode } from "@ldo/rdf-utils"; + +export function nodeToString( + node: NamedNode | BlankNode | DefaultGraph | Literal | null | undefined, +): string { + if (node == null) { + return "null"; + } + switch (node.termType) { + case "NamedNode": + return `namedNode(${node.value})`; + case "BlankNode": + return `blankNode(${node.value})`; + case "Literal": + return `literal(${node.value},${node.datatype.value})`; + case "DefaultGraph": + return "defaultGraph()"; + } +} + +export class NodeSet { + private set: Set = new Set(); + private map: Record = {}; + + add(node: ObjectNode) { + const key = nodeToString(node); + this.set.add(key); + this.map[key] = node; + } + + has(node: ObjectNode): boolean { + return this.set.has(nodeToString(node)); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/RawObject.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/RawObject.ts new file mode 100644 index 0000000..f5a4bad --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/RawObject.ts @@ -0,0 +1,21 @@ +import type { BlankNode, NamedNode } from "@rdfjs/types"; +import { _getUnderlyingNode } from "../types.js"; +import type { LdSet } from "../setProxy/ldSet/LdSet.js"; +import type { SubjectProxy } from "../subjectProxy/SubjectProxy.js"; + +export type RawObject = + | ({ + "@id"?: string | NamedNode | BlankNode; + } & { + [key: string | symbol | number]: RawValue | LdSet; + }) + | SubjectProxy; + +export type RawValue = + | string + | boolean + | number + | RawObject + | NamedNode + | BlankNode + | undefined; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/addObjectToDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/addObjectToDataset.ts new file mode 100644 index 0000000..8f1042c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/addObjectToDataset.ts @@ -0,0 +1,147 @@ +import type { BlankNode, NamedNode } from "@rdfjs/types"; +import { namedNode, literal, quad } from "@ldo/rdf-utils"; +import { _getUnderlyingNode } from "../types.js"; +import type { SubjectProxy } from "../subjectProxy/SubjectProxy.js"; +import { getNodeFromRawObject, getNodeFromRawValue } from "./getNodeFromRaw.js"; +import type { RawObject, RawValue } from "./RawObject.js"; +import type { ProxyContext } from "../ProxyContext.js"; +import { isSubjectProxy } from "../subjectProxy/isSubjectProxy.js"; +import { NodeSet } from "./NodeSet.js"; +import { + getLanguageKeyForWriteOperation, + languageDeleteMatch, + languageKeyToLiteralLanguage, +} from "../language/languageUtils.js"; +import { BasicLdSet } from "../setProxy/ldSet/BasicLdSet.js"; + +export function addRawValueToDatasetRecursive( + subject: NamedNode | BlankNode, + key: string, + value: RawValue, + visitedObjects: NodeSet, + shouldDeleteOldTriples: boolean, + proxyContext: ProxyContext, +): void { + const { dataset, contextUtil } = proxyContext; + const rdfType = proxyContext.getRdfType(subject); + const predicate = namedNode(contextUtil.keyToIri(key, rdfType)); + // Get the Object Node + const object = getNodeFromRawValue( + value, + proxyContext, + contextUtil.getDataType(key, rdfType), + ); + if (object == undefined) { + dataset.deleteMatches(subject, predicate); + } else if (object.termType === "Literal") { + let languageAppliedObject = object; + // Handle language use case + if (contextUtil.isLangString(key, rdfType)) { + const languageKey = getLanguageKeyForWriteOperation( + proxyContext.languageOrdering, + ); + if (!languageKey) return; + languageAppliedObject = literal( + object.value, + languageKeyToLiteralLanguage(languageKey), + ); + } + proxyContext.writeGraphs.forEach((graph) => { + proxyContext.dataset.add( + quad(subject, predicate, languageAppliedObject, graph), + ); + }); + } else { + // Delete any triples if the id is the same + // if (!visitedObjects.has(object) && !isSubjectProxy(value)) { + // console.log("deleting 2", object.value); + // dataset.deleteMatches(object, undefined, undefined); + // } + proxyContext.writeGraphs.forEach((graph) => { + dataset.add(quad(subject, predicate, object, graph)); + }); + if (!isSubjectProxy(value)) { + const updateData: RawObject = ( + typeof value === "object" + ? { ...value, "@id": object } + : { "@id": object } + ) as RawObject; + addRawObjectToDatasetRecursive( + updateData, + visitedObjects, + shouldDeleteOldTriples, + proxyContext, + ); + } + } +} + +export function addRawObjectToDatasetRecursive( + item: RawObject, + visitedObjects: NodeSet, + shouldDeleteOldTriples: boolean, + proxyContext: ProxyContext, +): SubjectProxy { + const { dataset } = proxyContext; + const subject = getNodeFromRawObject(item, proxyContext.contextUtil); + const rdfType = proxyContext.getRdfType(subject); + if (visitedObjects.has(subject)) { + return proxyContext.createSubjectProxy(subject); + } + visitedObjects.add(subject); + Object.entries(item).forEach(([key, value]) => { + if (key === "@id") { + return; + } + const predicate = namedNode( + proxyContext.contextUtil.keyToIri(key, rdfType), + ); + if (shouldDeleteOldTriples) { + if (proxyContext.contextUtil.isLangString(key, rdfType)) { + const languageKey = getLanguageKeyForWriteOperation( + proxyContext.languageOrdering, + ); + if (languageKey) { + languageDeleteMatch(dataset, subject, predicate, languageKey); + } + } else { + dataset.deleteMatches(subject, predicate); + } + } + if (value instanceof BasicLdSet) { + value.forEach((valueItem) => { + addRawValueToDatasetRecursive( + subject, + key, + valueItem, + visitedObjects, + true, + proxyContext, + ); + }); + } else { + addRawValueToDatasetRecursive( + subject, + key, + value as RawValue, + visitedObjects, + true, + proxyContext, + ); + } + }); + return proxyContext.createSubjectProxy(subject); +} + +export function addObjectToDataset( + item: RawObject, + shouldDeleteOldTriples: boolean, + proxyContext: ProxyContext, +): SubjectProxy { + return addRawObjectToDatasetRecursive( + item, + new NodeSet(), + shouldDeleteOldTriples, + proxyContext, + ); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/createInteractOptions.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/createInteractOptions.ts new file mode 100644 index 0000000..84eb06f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/createInteractOptions.ts @@ -0,0 +1,55 @@ +import { getSubjectProxyFromObject } from "../subjectProxy/isSubjectProxy.js"; +import type { ObjectLike } from "../types.js"; +import { _getUnderlyingNode, _proxyContext } from "../types.js"; +import { getProxyFromObject } from "./isProxy.js"; + +export interface InteractOptions { + /** + * Given a dataset proxy, this will set the action on that dataset proxy + * @param objects Any number of dataset proxies + * @returns An end function. Call this if to reset the interaction + */ + using(...objects: ObjectLike[]): () => void; + /** + * Given a dataset proxy this will copy the dataset proxy and set the action + * on the copy + * @param objects Any number of dataset proxies + * @returns cloned dataset proxies + */ + usingCopy(...objects: T[]): T[]; +} + +export function createProxyInteractOptions( + paramKey: string, + parameter: unknown, +): InteractOptions { + return { + using(...objects: ObjectLike[]): () => void { + const onEndFunctions: (() => void)[] = []; + objects.forEach((object) => { + const proxy = getProxyFromObject(object); + const oldProxyContext = proxy[_proxyContext]; + proxy[_proxyContext] = proxy[_proxyContext].duplicate({ + [paramKey]: parameter, + }); + onEndFunctions.push(() => { + proxy[_proxyContext] = oldProxyContext; + }); + }); + return function endWrite() { + onEndFunctions.forEach((func) => func()); + }; + }, + usingCopy(...objects: T[]): T[] { + return objects.map((object) => { + const proxy = getSubjectProxyFromObject(object); + const newProxyContext = proxy[_proxyContext].duplicate({ + [paramKey]: parameter, + }); + return newProxyContext.createSubjectProxy( + proxy[_getUnderlyingNode], + ) as unknown as T; + }); + }, + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/getNodeFromRaw.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/getNodeFromRaw.ts new file mode 100644 index 0000000..ebf2e5b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/getNodeFromRaw.ts @@ -0,0 +1,54 @@ +import type { BlankNode, Literal, NamedNode } from "@rdfjs/types"; +import { blankNode, namedNode, literal } from "@ldo/rdf-utils"; +import type { ContextUtil } from "../ContextUtil.js"; +import { _getUnderlyingNode } from "../types.js"; +import type { RawObject, RawValue } from "./RawObject.js"; +import type { ProxyContext } from "../ProxyContext.js"; + +export function getNodeFromRawObject( + item: RawObject, + contextUtil: ContextUtil, +): NamedNode | BlankNode { + if (item[_getUnderlyingNode]) { + return item[_getUnderlyingNode] as NamedNode | BlankNode; + } else if (!item["@id"]) { + return blankNode(); + } else if (typeof item["@id"] === "string") { + // Purposly do not include typeName because we don't want to reference + // nested context + return namedNode(contextUtil.keyToIri(item["@id"], [])); + } else { + return item["@id"]; + } +} + +export function getNodeFromRawValue( + value: RawValue, + proxyContext: ProxyContext, + // To get this run proxyContext.contextUtil.getDataType(key, proxyContext.getRdfType(subjectNode)) + datatype?: string, +): BlankNode | NamedNode | Literal | undefined { + // Get the Object Node + if (value == undefined) { + return undefined; + } else if ( + typeof value === "string" || + typeof value === "boolean" || + typeof value === "number" + ) { + if (!datatype) { + return undefined; + } else if (datatype === "@id") { + return namedNode(value.toString()); + } else { + return literal(value.toString(), datatype); + } + } else if ( + typeof value.termType === "string" && + (value.termType === "NamedNode" || value.termType === "BlankNode") + ) { + return value as NamedNode | BlankNode; + } else { + return getNodeFromRawObject(value as RawObject, proxyContext.contextUtil); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/isProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/isProxy.ts new file mode 100644 index 0000000..b9f074f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/isProxy.ts @@ -0,0 +1,21 @@ +import { isSetProxy } from "../setProxy/isSetProxy.js"; +import type { LdSet } from "../setProxy/ldSet/LdSet.js"; +import type { SetProxy } from "../setProxy/SetProxy.js"; +import { isSubjectProxy } from "../subjectProxy/isSubjectProxy.js"; +import type { SubjectProxy } from "../subjectProxy/SubjectProxy.js"; +import type { ObjectLike } from "../types.js"; + +export function isProxy( + someObject?: unknown, +): someObject is SetProxy | SubjectProxy { + return isSubjectProxy(someObject) || isSetProxy(someObject); +} + +export function getProxyFromObject( + object: ObjectLike | LdSet, +): SubjectProxy | SetProxy { + if (!isProxy(object)) { + throw new Error(`${object} is not a Jsonld Dataset Proxy`); + } + return object; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/nodeToJsonldRepresentation.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/nodeToJsonldRepresentation.ts new file mode 100644 index 0000000..840b36e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/util/nodeToJsonldRepresentation.ts @@ -0,0 +1,78 @@ +import type { Literal, Quad_Object } from "@rdfjs/types"; +import type { ProxyContext } from "../ProxyContext.js"; +import type { SubjectProxy } from "../subjectProxy/SubjectProxy.js"; +import type { LiteralLike } from "../types.js"; + +export type ObjectJsonRepresentation = LiteralLike | SubjectProxy; + +export function literalToJsonldRepresentation(literal: Literal) { + switch (literal.datatype.value) { + case "http://www.w3.org/2001/XMLSchema#string": + case "http://www.w3.org/2001/XMLSchema#ENTITIES": + case "http://www.w3.org/2001/XMLSchema#ENTITY": + case "http://www.w3.org/2001/XMLSchema#ID": + case "http://www.w3.org/2001/XMLSchema#IDREF": + case "http://www.w3.org/2001/XMLSchema#IDREFS": + case "http://www.w3.org/2001/XMLSchema#language": + case "http://www.w3.org/2001/XMLSchema#Name": + case "http://www.w3.org/2001/XMLSchema#NCName": + case "http://www.w3.org/2001/XMLSchema#NMTOKEN": + case "http://www.w3.org/2001/XMLSchema#NMTOKENS": + case "http://www.w3.org/2001/XMLSchema#normalizedString": + case "http://www.w3.org/2001/XMLSchema#QName": + case "http://www.w3.org/2001/XMLSchema#token": + return literal.value; + case "http://www.w3.org/2001/XMLSchema#date": + case "http://www.w3.org/2001/XMLSchema#dateTime": + case "http://www.w3.org/2001/XMLSchema#duration": + case "http://www.w3.org/2001/XMLSchema#gDay": + case "http://www.w3.org/2001/XMLSchema#gMonth": + case "http://www.w3.org/2001/XMLSchema#gMonthDay": + case "http://www.w3.org/2001/XMLSchema#gYear": + case "http://www.w3.org/2001/XMLSchema#gYearMonth": + case "http://www.w3.org/2001/XMLSchema#time": + return literal.value; + case "http://www.w3.org/2001/XMLSchema#integer": + case "http://www.w3.org/2001/XMLSchema#byte": + case "http://www.w3.org/2001/XMLSchema#decimal": + case "http://www.w3.org/2001/XMLSchema#double": + case "http://www.w3.org/2001/XMLSchema#int": + case "http://www.w3.org/2001/XMLSchema#long": + case "http://www.w3.org/2001/XMLSchema#negativeInteger": + case "http://www.w3.org/2001/XMLSchema#nonNegativeInteger": + case "http://www.w3.org/2001/XMLSchema#nonPositiveInteger": + case "http://www.w3.org/2001/XMLSchema#positiveInteger": + case "http://www.w3.org/2001/XMLSchema#short": + case "http://www.w3.org/2001/XMLSchema#unsignedLong": + case "http://www.w3.org/2001/XMLSchema#unsignedInt": + case "http://www.w3.org/2001/XMLSchema#unsignedShort": + case "http://www.w3.org/2001/XMLSchema#unsignedByte": + return parseFloat(literal.value); + case "http://www.w3.org/2001/XMLSchema#boolean": + return literal.value === "true"; + case "http://www.w3.org/2001/XMLSchema#hexBinary": + return literal.value; + case "http://www.w3.org/2001/XMLSchema#anyURI": + return literal.value; + case "http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML": + case "http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral": + case "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral": + case "http://www.w3.org/1999/02/22-rdf-syntax-ns#JSON": + return literal.value; + default: + return literal.value; + } +} + +export function nodeToJsonldRepresentation( + node: Quad_Object, + proxyContext: ProxyContext, +): ObjectJsonRepresentation { + if (node.termType === "Literal") { + return literalToJsonldRepresentation(node); + } else if (node.termType === "NamedNode" || node.termType === "BlankNode") { + return proxyContext.createSubjectProxy(node); + } else { + throw new Error("Can only convert NamedNodes or Literals or BlankNodes"); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/write.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/write.ts new file mode 100644 index 0000000..ee4cf31 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/src/write.ts @@ -0,0 +1,12 @@ +import type { GraphNode } from "@ldo/rdf-utils"; +import type { InteractOptions } from "./util/createInteractOptions.js"; +import { createProxyInteractOptions } from "./util/createInteractOptions.js"; + +/** + * Set the graphs that should be written to + * @param graphs The graphs that should be written to + * @returns a write builder + */ +export function write(...graphs: GraphNode[]): InteractOptions { + return createProxyInteractOptions("writeGraphs", graphs); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/BasicLdSet.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/BasicLdSet.test.ts new file mode 100644 index 0000000..1a3f7fa --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/BasicLdSet.test.ts @@ -0,0 +1,328 @@ +import { namedNode } from "@ldo/rdf-utils"; +import jsonldDatasetProxy, { + BasicLdSet, + _getUnderlyingNode, +} from "../src/index.js"; +import { createDataset } from "@ldo/dataset"; + +describe("BasicLdSet", () => { + describe("constructor and add", () => { + test("should add primitive values correctly", () => { + const set = new BasicLdSet(); + expect(set.size).toBe(0); + set.add(1); + expect(set.size).toBe(1); + expect(set.has(1)).toBe(true); + // Duplicate primitives should not increase size. + set.add(1); + expect(set.size).toBe(1); + }); + + test('should add objects with "@id" as string correctly', () => { + const obj1 = { "@id": "testId" }; + const set = new BasicLdSet(); + set.add(obj1); + expect(set.has(obj1)).toBe(true); + expect(set.size).toBe(1); + // A different object with the same "@id" should be considered a duplicate. + const obj2 = { "@id": "testId" }; + set.add(obj2); + expect(set.size).toBe(1); + }); + + test('should add objects with "@id" as an object correctly', () => { + // In this case the object’s "@id" is a string already. + const obj1 = { "@id": "testIdObj" }; + const set = new BasicLdSet(); + set.add(obj1); + expect(set.has(obj1)).toBe(true); + expect(set.size).toBe(1); + // A different object with an equivalent "@id" should not increase the size. + const obj2 = { "@id": "testIdObj" }; + set.add(obj2); + expect(set.size).toBe(1); + }); + + test("should add LinkedDataObject", () => { + // In this case the object’s "@id" is a string already. + const obj1 = jsonldDatasetProxy(createDataset(), {}).fromSubject( + namedNode("testIdObj"), + ); + const set = new BasicLdSet(); + set.add(obj1); + expect(set.has(obj1)).toBe(true); + expect(set.size).toBe(1); + // A different object with an equivalent "@id" should not increase the size. + const obj2 = { "@id": "testIdObj" }; + set.add(obj2); + expect(set.size).toBe(1); + }); + + test("should add objects with underlying nodes correctly", () => { + // Here we simulate a case where the object has a NamedNode stored as its "@id" + // which in turn yields its .value. + const obj1 = { "@id": namedNode("testIdObj") }; + const set = new BasicLdSet(); + set.add(obj1); + expect(set.has(obj1)).toBe(true); + expect(set.size).toBe(1); + // A different object with an equivalent "@id".value should not increase the size. + const obj2 = { "@id": "testIdObj" }; + set.add(obj2); + expect(set.size).toBe(1); + }); + + test('should treat objects with no "@id" as unique even if same reference', () => { + // When an object does not have "@id" (or _getUnderlyingNode), + // the hashFn falls back to generating a new blank node each time. + const obj = {}; + const set = new BasicLdSet(); + set.add(obj); + // Adding the same object twice produces two different hash keys. + set.add(obj); + expect(set.size).toBe(2); + }); + + test("should initialize with iterable values", () => { + const set = new BasicLdSet([1, 2, 3, 3]); + expect(set.size).toBe(3); + expect([...set]).toEqual([1, 2, 3]); + }); + }); + + describe("clear", () => { + test("should clear all elements", () => { + const set = new BasicLdSet([1, 2, 3]); + expect(set.size).toBe(3); + set.clear(); + expect(set.size).toBe(0); + expect([...set]).toEqual([]); + }); + }); + + describe("delete", () => { + test("should delete an existing element and return true", () => { + const set = new BasicLdSet([1, 2, 3]); + expect(set.delete(2)).toBe(true); + expect(set.has(2)).toBe(false); + expect(set.size).toBe(2); + }); + + test("should return false when deleting a non-existent element", () => { + const set = new BasicLdSet([1, 2, 3]); + expect(set.delete(4)).toBe(false); + expect(set.size).toBe(3); + }); + }); + + describe("has", () => { + test("should correctly identify the presence of elements", () => { + const set = new BasicLdSet([1, 2, 3]); + expect(set.has(1)).toBe(true); + expect(set.has(4)).toBe(false); + }); + }); + + describe("iteration functions", () => { + test("every should return true if all elements satisfy the predicate", () => { + const set = new BasicLdSet([2, 4, 6]); + const result = set.every((num) => num % 2 === 0); + expect(result).toBe(true); + }); + + test("every should return false if any element fails the predicate", () => { + const set = new BasicLdSet([2, 3, 6]); + const result = set.every((num) => num % 2 === 0); + expect(result).toBe(false); + }); + + test("some should return true if any element satisfies the predicate", () => { + const set = new BasicLdSet([1, 3, 4]); + const result = set.some((num) => num % 2 === 0); + expect(result).toBe(true); + }); + + test("some should return false if no element satisfies the predicate", () => { + const set = new BasicLdSet([1, 3, 5]); + const result = set.some((num) => num % 2 === 0); + expect(result).toBe(false); + }); + + test("forEach should call the callback for each element", () => { + const set = new BasicLdSet([1, 2, 3]); + const mockFn = jest.fn(); + set.forEach((value, value2, collection) => { + expect(collection).toBe(set); + expect(value).toBe(value2); + mockFn(value); + }); + expect(mockFn).toHaveBeenCalledTimes(3); + expect(mockFn).toHaveBeenCalledWith(1); + expect(mockFn).toHaveBeenCalledWith(2); + expect(mockFn).toHaveBeenCalledWith(3); + }); + + test("map should return an array with mapped values", () => { + const set = new BasicLdSet([1, 2, 3]); + const result = set.map((num) => num * 2); + expect(result).toEqual([2, 4, 6]); + }); + + test("filter should return a new set with filtered elements", () => { + const set = new BasicLdSet([1, 2, 3, 4]); + const filtered = set.filter((num) => num % 2 === 0); + expect(filtered.size).toBe(2); + expect(filtered.has(2)).toBe(true); + expect(filtered.has(4)).toBe(true); + }); + + test("reduce should work without an initial value", () => { + const set = new BasicLdSet([1, 2, 3, 4]); + const result = set.reduce((acc, curr) => acc + curr); + expect(result).toBe(10); + }); + + test("reduce should work with an initial value", () => { + const set = new BasicLdSet([1, 2, 3, 4]); + const result = set.reduce((acc, curr) => acc + curr, 10); + expect(result).toBe(20); + }); + + test("reduce should throw an error for an empty set without an initial value", () => { + const set = new BasicLdSet(); + expect(() => { + set.reduce((acc, curr) => acc + curr); + }).toThrow("Reduce of empty collection with no initial value"); + }); + + test("toArray and toJSON should return an array of elements", () => { + const elements = [1, 2, 3]; + const set = new BasicLdSet(elements); + expect(set.toArray()).toEqual(elements); + expect(set.toJSON()).toEqual(elements); + }); + }); + + describe("set operations", () => { + test("difference should return elements in the first set not present in the second", () => { + const set1 = new BasicLdSet([1, 2, 3, 4]); + const set2 = new Set([3, 4, 5]); + const diff = set1.difference(set2); + expect(diff.size).toBe(2); + expect(diff.has(1)).toBe(true); + expect(diff.has(2)).toBe(true); + }); + + test("intersection should return only the common elements", () => { + const set1 = new BasicLdSet([1, 2, 3, 4]); + const set2 = new BasicLdSet([3, 4, 5]); + const inter = set1.intersection(set2); + expect(inter.size).toBe(2); + expect(inter.has(3)).toBe(true); + expect(inter.has(4)).toBe(true); + const inter2 = set2.intersection(set1); + expect(inter2.size).toBe(2); + expect(inter2.has(3)).toBe(true); + expect(inter2.has(4)).toBe(true); + }); + + test("isDisjointFrom should return true if the sets have no common elements", () => { + const set1 = new BasicLdSet([1, 2]); + const set2 = new BasicLdSet([3, 4, 5]); + expect(set1.isDisjointFrom(set2)).toBe(true); + expect(set2.isDisjointFrom(set1)).toBe(true); + }); + + test("isDisjointFrom should return false if the sets share elements", () => { + const set1 = new BasicLdSet([1, 2]); + const set2 = new Set([2, 3]); + expect(set1.isDisjointFrom(set2)).toBe(false); + }); + + test("isSubsetOf should return true when the set is a subset of another", () => { + const set1 = new BasicLdSet([1, 2]); + const set2 = new BasicLdSet([1, 2, 3]); + expect(set1.isSubsetOf(set2)).toBe(true); + expect(set2.isSubsetOf(set1)).toBe(false); + }); + + test("isSubsetOf should return false when the set is not a subset of another", () => { + const set1 = new BasicLdSet([1, 2, 4]); + const set2 = new Set([1, 2, 3]); + expect(set1.isSubsetOf(set2)).toBe(false); + }); + + test("isSupersetOf should return true when the set is a superset of another", () => { + const set1 = new BasicLdSet([1, 2, 3]); + const set2 = new Set([1, 2]); + expect(set1.isSupersetOf(set2)).toBe(true); + }); + + test("isSupersetOf should return false when the set is larger", () => { + const set1 = new BasicLdSet([1, 2]); + const set2 = new BasicLdSet([1, 2, 3]); + expect(set1.isSupersetOf(set2)).toBe(false); + }); + + test("isSupersetOf should return false when the set is not a superset of another", () => { + const set1 = new BasicLdSet([1, 2, 5]); + const set2 = new BasicLdSet([1, 2, 3]); + expect(set1.isSupersetOf(set2)).toBe(false); + }); + + test("symmetricDifference should return the symmetric difference of two sets", () => { + const set1 = new BasicLdSet([1, 2, 3]); + const set2 = new Set([2, 3, 4]); + const symDiff = set1.symmetricDifference(set2); + expect(symDiff.size).toBe(2); + expect(symDiff.has(1)).toBe(true); + expect(symDiff.has(4)).toBe(true); + }); + + test("union should return the union of two sets", () => { + const set1 = new BasicLdSet([1, 2]); + const set2 = new Set([2, 3]); + const union = set1.union(set2); + expect(union.size).toBe(3); + expect(union.has(1)).toBe(true); + expect(union.has(2)).toBe(true); + expect(union.has(3)).toBe(true); + }); + }); + + describe("iterator methods", () => { + test("entries returns pairs [value, value]", () => { + const set = new BasicLdSet([1, 2, 3]); + const entries = Array.from(set.entries()); + expect(entries).toEqual([ + [1, 1], + [2, 2], + [3, 3], + ]); + }); + + test("keys returns all values", () => { + const set = new BasicLdSet([1, 2, 3]); + const keys = Array.from(set.keys()); + expect(keys).toEqual([1, 2, 3]); + }); + + test("values returns all values", () => { + const set = new BasicLdSet([1, 2, 3]); + const values = Array.from(set.values()); + expect(values).toEqual([1, 2, 3]); + }); + + test("iterator returns all values", () => { + const set = new BasicLdSet([1, 2, 3]); + const iterated = [...set]; + expect(iterated).toEqual([1, 2, 3]); + }); + + test("toStringTag returns 'BasicLdSet'", () => { + const set = new BasicLdSet(); + expect(Object.prototype.toString.call(set)).toBe("[object BasicLdSet]"); + expect(set[Symbol.toStringTag]).toBe("BasicLdSet"); + }); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/ContextUtil.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/ContextUtil.test.ts new file mode 100644 index 0000000..0f75801 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/ContextUtil.test.ts @@ -0,0 +1,64 @@ +import { namedNode } from "@ldo/rdf-utils"; +import { ContextUtil } from "../src/ContextUtil.js"; +import { scopedContext } from "./scopedExampleData.js"; + +describe("ContextUtil", () => { + describe("keyToIri and iriToKey", () => { + it("handles a context that is simply a string map", () => { + const fakeContext = { + name: "http://hl7.org/fhir/name", + }; + const contextUtil = new ContextUtil(fakeContext); + expect(contextUtil.keyToIri("name", [])).toBe("http://hl7.org/fhir/name"); + }); + + it("returns the given key if it is not in the context", () => { + const contextUtil = new ContextUtil({}); + expect(contextUtil.keyToIri("name", [])).toBe("name"); + expect(contextUtil.iriToKey("http://hl7.org/fhir/name", [])).toBe( + "http://hl7.org/fhir/name", + ); + }); + + it("handles a context that exists, but does not have an id", () => { + const contextUtil = new ContextUtil({ + name: { "@type": "http://www.w3.org/2001/XMLSchema#string" }, + }); + expect(contextUtil.keyToIri("name", [])).toBe("name"); + }); + + it("handles a nested context", () => { + const contextUtil = new ContextUtil(scopedContext); + expect( + contextUtil.keyToIri("element", [ + namedNode("http://example.com/Bender"), + ]), + ).toBe("http://example.com/element"); + expect( + contextUtil.iriToKey("http://example.com/element", [ + namedNode("http://example.com/Bender"), + ]), + ).toBe("element"); + }); + }); + + describe("getType", () => { + it("returns xsd:string if no type is provided", () => { + const contextUtil = new ContextUtil({ + name: { "@id": "http://hl7.org/fhir/name" }, + }); + expect(contextUtil.getDataType("name", [])).toBe( + "http://www.w3.org/2001/XMLSchema#string", + ); + }); + }); + + describe("isSet", () => { + it("indicates that the special @isCollection field means array", () => { + const contextUtil = new ContextUtil(scopedContext); + expect( + contextUtil.isSet("element", [namedNode("http://example.com/Avatar")]), + ).toBe(true); + }); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/isProxy.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/isProxy.test.ts new file mode 100644 index 0000000..048fe48 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/isProxy.test.ts @@ -0,0 +1,36 @@ +import { + getProxyFromObject, + getSubjectProxyFromObject, + isSetProxy, + isSubjectProxy, +} from "../src/index.js"; + +describe("isSubjectProxy", () => { + it("returns false if undefined is passed as a parameter", () => { + expect(isSubjectProxy(undefined)).toBe(false); + }); + + it("throws an error if the given object isn't a subject proxy", () => { + expect(() => getSubjectProxyFromObject({ cool: "bean" })).toThrowError( + `[object Object] is not a Jsonld Dataset Proxy`, + ); + }); +}); + +describe("isProxy", () => { + it("throws an error if the given object isn't a proxy", () => { + expect(() => getProxyFromObject({ cool: "bean" })).toThrowError( + `[object Object] is not a Jsonld Dataset Proxy`, + ); + }); +}); + +describe("isSetProxy", () => { + it("returns false if undefined is passed as a parameter", () => { + expect(isSetProxy(undefined)).toBe(false); + }); + + it("returns false if string is passed as a parameter", () => { + expect(isSetProxy("hello")).toBe(false); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/jsonldDatasetProxy.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/jsonldDatasetProxy.test.ts new file mode 100644 index 0000000..8fbdbd9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/jsonldDatasetProxy.test.ts @@ -0,0 +1,1559 @@ +import { createDataset, serializedToDataset } from "@ldo/dataset"; +import type { + JsonldDatasetProxyBuilder, + LanguageSet, + LdSet, +} from "../src/index.js"; +import { + graphOf, + jsonldDatasetProxy, + languagesOf, + setLanguagePreferences, + write, + _getUnderlyingDataset, + _getUnderlyingMatch, + _getUnderlyingNode, + _isSubjectOriented, + _proxyContext, + _writeGraphs, + set, + SetProxy, +} from "../src/index.js"; +import type { ObservationShape, PatientShape } from "./patientExampleData.js"; +import { + patientData, + tinyPatientData, + tinyArrayPatientData, + patientDataWithBlankNodes, + tinyPatientDataWithBlankNodes, + tinyPatientDataWithLanguageTags, + patientUnnestedContext, + patientNestedContext, +} from "./patientExampleData.js"; +import { + namedNode, + quad, + literal, + defaultGraph, + blankNode, +} from "@ldo/rdf-utils"; +import type { Dataset, NamedNode } from "@rdfjs/types"; +import type { ContextDefinition } from "jsonld"; +import type { LdoJsonldContext } from "../src/LdoJsonldContext.js"; +import { + scopedContext, + scopedData, + type Avatar, + type Bender, +} from "./scopedExampleData.js"; +import { WildcardSubjectSetProxy } from "../src/setProxy/WildcardSubjectSetProxy.js"; + +global.console.warn = () => {}; + +const testJsonldDatasetProxy = (patientContext: LdoJsonldContext) => () => { + async function getLoadedDataset(): Promise< + [Dataset, ObservationShape, JsonldDatasetProxyBuilder] + > { + const dataset = await serializedToDataset(patientData); + const builder = await jsonldDatasetProxy(dataset, patientContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Observation1")), + builder, + ]; + } + + async function getLoadedDatasetWithBlankNodes(): Promise< + [Dataset, ObservationShape, JsonldDatasetProxyBuilder] + > { + const dataset = await serializedToDataset(patientDataWithBlankNodes); + const builder = await jsonldDatasetProxy(dataset, patientContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Observation1")), + builder, + ]; + } + + async function getTinyLoadedDataset(): Promise< + [Dataset, ObservationShape, JsonldDatasetProxyBuilder] + > { + const dataset = await serializedToDataset(tinyPatientData); + const builder = await jsonldDatasetProxy(dataset, patientContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Observation1")), + builder, + ]; + } + + async function getGraphLoadedDataset(): Promise< + [Dataset, ObservationShape, JsonldDatasetProxyBuilder] + > { + const tempDataset = await serializedToDataset(patientData); + const dataset = createDataset(); + const subjectGraphMap: Record = { + "http://example.com/Observation1": namedNode( + "http://example.com/Observation1Doc", + ), + "http://example.com/Patient1": namedNode( + "http://example.com/Patient1Doc", + ), + "http://example.com/Patient2": namedNode( + "http://example.com/Patient2Doc", + ), + "http://example.com/Patient3": namedNode( + "http://example.com/Patient3Doc", + ), + }; + tempDataset.forEach((tempQuad) => { + dataset.add( + quad( + tempQuad.subject, + tempQuad.predicate, + tempQuad.object, + subjectGraphMap[tempQuad.subject.value], + ), + ); + }); + const builder = await jsonldDatasetProxy(dataset, patientContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Observation1")), + builder, + ]; + } + + async function getTinyLoadedDatasetWithBlankNodes(): Promise< + [Dataset, ObservationShape, JsonldDatasetProxyBuilder] + > { + const dataset = await serializedToDataset(tinyPatientDataWithBlankNodes); + const builder = await jsonldDatasetProxy(dataset, patientContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Observation1")), + builder, + ]; + } + + async function getTinyLoadedDatasetWithLanguageTags(): Promise< + [Dataset, ObservationShape, JsonldDatasetProxyBuilder] + > { + const dataset = await serializedToDataset(tinyPatientDataWithLanguageTags); + const builder = await jsonldDatasetProxy(dataset, patientContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Observation1")), + builder, + ]; + } + + async function getArrayLoadedDataset(): Promise< + [Dataset, PatientShape, JsonldDatasetProxyBuilder] + > { + const dataset = await serializedToDataset(tinyArrayPatientData); + const builder = await jsonldDatasetProxy(dataset, patientContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Patient1")), + builder, + ]; + } + + async function getEmptyObservationDataset(): Promise< + [Dataset, ObservationShape, JsonldDatasetProxyBuilder] + > { + const dataset = await createDataset(); + const builder = await jsonldDatasetProxy(dataset, patientContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Observation1")), + builder, + ]; + } + + async function getEmptyPatientDataset(): Promise< + [Dataset, PatientShape, JsonldDatasetProxyBuilder] + > { + const dataset = await createDataset(); + const builder = await jsonldDatasetProxy(dataset, patientContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Patient1")), + builder, + ]; + } + + async function getScopedDataset(): Promise< + [Dataset, Bender, Avatar, JsonldDatasetProxyBuilder] + > { + const dataset = await serializedToDataset(scopedData); + const builder = await jsonldDatasetProxy(dataset, scopedContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Katara")), + builder.fromSubject(namedNode("http://example.com/Aang")), + builder, + ]; + } + + describe("read", () => { + it("retreives a primitive", async () => { + const [, observation] = await getLoadedDataset(); + expect(observation["@id"]).toBe("http://example.com/Observation1"); + expect(observation.notes).toBe("Cool Notes"); + }); + + it("retreives a primitive with blank nodes", async () => { + const [, observation] = await getLoadedDatasetWithBlankNodes(); + expect(observation.subject?.age).toBe(35); + }); + + it("retrieves a nested primitive", async () => { + const [, observation] = await getLoadedDataset(); + expect(observation?.subject && observation.subject["@id"]).toBe( + "http://example.com/Patient1", + ); + expect(observation?.subject?.age).toBe(35); + expect(observation?.subject?.birthdate).toBe("1986-01-01"); + expect(observation?.subject?.isHappy).toBe(true); + }); + + it("retrieves a nested primitive with a blank node", async () => { + const [, observation] = await getLoadedDatasetWithBlankNodes(); + expect(observation?.subject?.roommate?.map((obj) => obj.age)).toContain( + 34, + ); + }); + + it("retreives a @type value as rdf:type", async () => { + const [, observation] = await getLoadedDataset(); + expect(observation.subject?.type?.["@id"]).toBe("Patient"); + }); + + it("simulates the getter behavior of an array of primitives", async () => { + const [, observation] = await getLoadedDataset(); + const set = observation!.subject!.name!; + expect(set.size).toBe(3); + expect(set).toContain("Garrett"); + expect(set).toContain("Bobby"); + expect(set).toContain("Ferguson"); + const entriesIterator = set.entries(); + expect(entriesIterator.next()).toEqual({ + value: ["Garrett", "Garrett"], + done: false, + }); + expect(entriesIterator.next()).toEqual({ + value: ["Bobby", "Bobby"], + done: false, + }); + expect(entriesIterator.next()).toEqual({ + value: ["Ferguson", "Ferguson"], + done: false, + }); + expect(entriesIterator.next()).toEqual({ + value: undefined, + done: true, + }); + expect(set.every((val) => val.length > 2)).toBe(true); + expect(set.every((val) => val.length > 6)).toBe(false); + const filteredSet = set.filter((val) => val.length > 6); + expect(filteredSet.size).toBe(2); + expect(filteredSet).toContain("Garrett"); + expect(filteredSet).toContain("Ferguson"); + let concatTest = ""; + set.forEach((value) => (concatTest += value)); + expect(concatTest).toBe("GarrettBobbyFerguson"); + expect(set.has("Bobby")).toBe(true); + const keysIterator = set.keys(); + expect(keysIterator.next()).toEqual({ + value: "Garrett", + done: false, + }); + expect(keysIterator.next()).toEqual({ + value: "Bobby", + done: false, + }); + expect(keysIterator.next()).toEqual({ + value: "Ferguson", + done: false, + }); + expect(keysIterator.next()).toEqual({ + value: undefined, + done: true, + }); + expect(set.map((val) => val.toUpperCase())).toEqual([ + "GARRETT", + "BOBBY", + "FERGUSON", + ]); + expect(set.reduce((agg, val) => agg + val, "")).toBe( + "GarrettBobbyFerguson", + ); + expect(set.some((val) => val.startsWith("G"))).toBe(true); + const valuesIterator = set.values(); + expect(valuesIterator.next()).toEqual({ + value: "Garrett", + done: false, + }); + expect(valuesIterator.next()).toEqual({ + value: "Bobby", + done: false, + }); + expect(valuesIterator.next()).toEqual({ + value: "Ferguson", + done: false, + }); + expect(valuesIterator.next()).toEqual({ + value: undefined, + done: true, + }); + expect(JSON.stringify(set)).toBe(`["Garrett","Bobby","Ferguson"]`); + expect(set.toString()).toBe("[object LdSet]"); + }); + + it("can traverse a circular graph", async () => { + const [, observation] = await getLoadedDataset(); + expect( + observation.subject?.roommate + ?.toArray()[0] + .roommate?.toArray()[0] + ?.name?.toArray()[0], + ).toBe("Garrett"); + }); + + it("simulates getter object properties", async () => { + const [, observation] = await getLoadedDataset(); + const obj = observation.subject as PatientShape; + + expect(obj["@id"]).toEqual("http://example.com/Patient1"); + expect(obj.type).toEqual({ "@id": "Patient" }); + expect(obj.name).toContain("Garrett"); + expect(obj.name).toContain("Bobby"); + expect(obj.name).toContain("Ferguson"); + expect(obj.birthdate).toEqual("1986-01-01"); + expect(obj.age).toEqual(35); + expect(obj.isHappy).toEqual(true); + const entries = Object.entries(obj); + expect(entries[0][0]).toBe("@id"); + expect(entries[0][1]).toBe("http://example.com/Patient1"); + expect(entries[1][0]).toBe("type"); + expect(entries[1][1]).toEqual({ "@id": "Patient" }); + expect(entries[2][0]).toBe("name"); + expect(entries[2][1]).toContain("Garrett"); + expect(entries[2][1]).toContain("Bobby"); + expect(entries[2][1]).toContain("Ferguson"); + expect(entries[3][0]).toBe("birthdate"); + expect(entries[3][1]).toBe("1986-01-01"); + expect(entries[4][0]).toBe("age"); + expect(entries[4][1]).toBe(35); + expect(entries[5][0]).toBe("isHappy"); + expect(entries[5][1]).toBe(true); + expect(entries[6][0]).toEqual("roommate"); + expect(Object.keys(obj)).toEqual([ + "@id", + "type", + "name", + "birthdate", + "age", + "isHappy", + "roommate", + ]); + const values = Object.values(obj); + expect(values[0]).toEqual("http://example.com/Patient1"); + expect(values[1]).toEqual({ "@id": "Patient" }); + expect(values[2]).toContain("Garrett"); + expect(values[2]).toContain("Bobby"); + expect(values[2]).toContain("Ferguson"); + expect(values[3]).toEqual("1986-01-01"); + expect(values[4]).toEqual(35); + expect(values[5]).toEqual(true); + }); + + it("handles stringification of a non circular object", async () => { + const [, observation] = await getLoadedDataset(); + const obj = observation.subject!.roommate!.toArray()[1]; + expect(obj.toString()).toBe("[object Object]"); + expect(JSON.stringify(obj)).toBe( + `{"@id":"http://example.com/Patient3","type":{"@id":"Patient"},"name":["Amy"],"birthdate":"1988-01-01","age":33,"isHappy":true}`, + ); + }); + + it("Returns an array for required array fields even if no data is in the dataset", async () => { + const [, observation] = await getLoadedDataset(); + const obj = observation.subject!.roommate!.toArray()[1]; + expect(obj.roommate).toBeInstanceOf(SetProxy); + expect(obj.roommate?.size).toBe(0); + }); + + it("updates when the dataset is updated", async () => { + const [dataset, observation] = await getLoadedDataset(); + expect(observation.notes).toBe("Cool Notes"); + dataset.delete( + quad( + namedNode("http://example.com/Observation1"), + namedNode("http://hl7.org/fhir/notes"), + literal("Cool Notes", "http://www.w3.org/2001/XMLSchema#string"), + ), + ); + dataset.add( + quad( + namedNode("http://example.com/Observation1"), + namedNode("http://hl7.org/fhir/notes"), + literal("Bad Notes", "http://www.w3.org/2001/XMLSchema#string"), + ), + ); + expect(observation.notes).toBe("Bad Notes"); + }); + + it("handles stringfication of a circular object", async () => { + const [, observation] = await getLoadedDataset(); + const obj = observation.subject as PatientShape; + expect(obj.toString()).toBe("[object Object]"); + + expect(() => JSON.stringify(obj)).toThrow( + "Converting circular structure to JSON", + ); + }); + + it("returns undefined if called with an unrecognized symbol", async () => { + const [, observation] = await getLoadedDataset(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + expect(observation[Symbol.toPrimitive]).toBe(undefined); + }); + + it("If a container is not a set, but multiple triples exist, it should still return only 1.", async () => { + const dataset = await serializedToDataset(patientData); + const fakePatientSContext: ContextDefinition = { + name: { + "@id": "http://hl7.org/fhir/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + }; + const builder = jsonldDatasetProxy(dataset, fakePatientSContext); + const patient = builder.fromSubject( + namedNode("http://example.com/Patient1"), + ); + expect(patient.name).toBe("Garrett"); + }); + + it("returns context when the @context key is called", async () => { + const [, observation] = await getLoadedDataset(); + expect(observation["@context"]).toEqual(patientContext); + }); + + it("reads an array for collections, but a var for non collections", async () => { + const [, bender, avatar] = await getScopedDataset(); + expect(avatar.element.map((obj) => obj["@id"])).toContain( + "http://example.com/Air", + ); + expect(avatar.element.map((obj) => obj["@id"])).toContain( + "http://example.com/Water", + ); + expect(bender.element["@id"]).toBe("http://example.com/Water"); + }); + }); + + describe("write", () => { + it("sets a primitive value that doesn't exist yet", async () => { + const [dataset, observation] = await getEmptyObservationDataset(); + observation.type = { "@id": "Observation" }; + observation.notes = "Cool Notes"; + expect(dataset.toString()).toBe( + ' .\n "Cool Notes" .\n', + ); + }); + + it("sets primitive number and boolean values", async () => { + const [dataset, patient] = await getEmptyPatientDataset(); + patient.type = { "@id": "Patient" }; + patient.age = 35; + patient.isHappy = true; + expect(dataset.toString()).toBe( + ' .\n "35"^^ .\n "true"^^ .\n', + ); + }); + + it("sets a @type value as rdf:type", async () => { + const [dataset, patient] = await getEmptyPatientDataset(); + patient.type = { "@id": "Patient" }; + expect(dataset.toString()).toBe( + " .\n", + ); + }); + + it("replaces a primitive value that currently exists", async () => { + const [dataset, observation] = await getEmptyObservationDataset(); + dataset.addAll([ + quad( + namedNode("http://example.com/Observation1"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://hl7.org/fhir/Observation"), + ), + quad( + namedNode("http://example.com/Observation1"), + namedNode("http://hl7.org/fhir/notes"), + literal("Cool Notes"), + ), + ]); + observation.notes = "Lame Notes"; + expect(dataset.toString()).toBe( + ' .\n "Lame Notes" .\n', + ); + }); + + it("adds all quads from a set object", async () => { + const [dataset, observation] = await getEmptyObservationDataset(); + const patient: PatientShape = { + "@id": "http://example.com/Patient1", + type: { "@id": "Patient" }, + birthdate: "2001-01-01", + }; + observation.type = { "@id": "Observation" }; + observation.subject = patient; + expect(dataset.toString()).toBe( + ' .\n .\n .\n "2001-01-01"^^ .\n', + ); + }); + + it("sets a retrieved blank node object", async () => { + const [, observation] = await getTinyLoadedDatasetWithBlankNodes(); + const patient2 = observation.subject?.roommate?.toArray()[0]; + observation.subject = patient2; + expect(observation.subject?.name).toContain("Rob"); + expect(observation.subject?.roommate?.toArray()[0].name).toContain( + "Garrett", + ); + expect( + observation.subject?.roommate?.toArray()[0]?.roommate?.toArray()[0] + .name, + ).toContain("Rob"); + }); + + it("only removes the connection when a value is set to undefined", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + observation.subject = undefined; + expect(dataset.toString()).toBe( + ' .\n .\n "Garrett" .\n .\n .\n "Rob" .\n .\n', + ); + }); + + it("Creates a blank node if the id is blank during set", async () => { + const [dataset, observation] = await getEmptyObservationDataset(); + observation.type = { "@id": "Observation" }; + observation.subject = { type: { "@id": "Patient" }, name: set("Joe") }; + expect(observation.subject?.["@id"]).toBeUndefined(); + expect(observation.subject.name).toContain("Joe"); + expect( + dataset + .match( + namedNode("http://example.com/Observation1"), + namedNode("http://hl7.org/fhir/subject"), + ) + .toArray()[0].object.termType, + ).toBe("BlankNode"); + }); + + it("adds all quads from a set object that includes an array", async () => { + const [dataset, observation] = await getEmptyObservationDataset(); + const patient: PatientShape = { + "@id": "http://example.com/Patient1", + type: { "@id": "Patient" }, + birthdate: "2001-01-01", + name: set("Jon", "Bon", "Jovi"), + }; + observation.type = { "@id": "Observation" }; + observation.subject = patient; + expect(dataset.toString()).toBe( + ' .\n .\n .\n "2001-01-01"^^ .\n "Jon" .\n "Bon" .\n "Jovi" .\n', + ); + }); + + it("does not infinitely recurse if there is a loop when setting an object", async () => { + const [dataset, observation] = await getEmptyObservationDataset(); + const patient1: PatientShape = { + "@id": "http://example.com/Patient1", + type: { "@id": "Patient" }, + name: set("jon"), + }; + const patient2: PatientShape = { + "@id": "http://example.com/patient2", + type: { "@id": "Patient" }, + name: set("jane"), + roommate: set(patient1), + }; + patient1.roommate = set(patient2); + observation.type = { "@id": "Observation" }; + observation.subject = patient1; + expect(dataset.toString()).toBe( + ' .\n .\n .\n "jon" .\n .\n .\n "jane" .\n .\n', + ); + }); + + it("adds a proxy object to the array", async () => { + const [, , builder] = await getTinyLoadedDataset(); + const patient3: PatientShape = builder.fromSubject( + namedNode("http://example.com/Patient3"), + ); + patient3.type = { "@id": "Patient" }; + const patient1: PatientShape = builder.fromSubject( + namedNode("http://example.com/Patient1"), + ); + patient3.roommate?.add(patient1); + }); + + it("sets an array", async () => { + const [dataset, patient] = await getEmptyPatientDataset(); + patient.type = { "@id": "Patient" }; + patient.name = set("Joe", "Mama"); + expect(dataset.toString()).toBe( + ' .\n "Joe" .\n "Mama" .\n', + ); + }); + + it("Does not remove the full object when it is replaced on an object", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + const replacementPatient: PatientShape = { + "@id": "http://example.com/ReplacementPatient", + type: { "@id": "Patient" }, + name: set("Jackson"), + }; + observation.subject = replacementPatient; + expect(dataset.toString()).toBe( + ' .\n .\n .\n "Garrett" .\n .\n .\n "Rob" .\n .\n .\n "Jackson" .\n', + ); + }); + + it("Does not overwrite the full object when a partial object is provided", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + observation.subject = { + "@id": "http://example.com/Patient2", + type: { "@id": "Patient" }, + }; + expect(dataset.toString()).toBe( + ' .\n .\n .\n "Garrett" .\n .\n .\n "Rob" .\n .\n', + ); + }); + + it("allows instances of proxies to be set", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + const patient2 = observation.subject!.roommate!.toArray()[0]; + observation.subject = patient2; + expect(dataset.toString()).toBe( + ' .\n .\n .\n "Garrett" .\n .\n .\n "Rob" .\n .\n', + ); + }); + + it("Changes the subject name if the @id is changed", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + const patient = observation?.subject as PatientShape; + patient["@id"] = "http://example.com/RenamedPatient"; + expect(patient["@id"]).toBe("http://example.com/RenamedPatient"); + expect(dataset.toString()).toBe( + ' .\n .\n .\n "Rob" .\n .\n .\n "Garrett" .\n .\n', + ); + }); + + it("converts a node to a blank node when @id is set to undefined", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + const patient1 = observation.subject!; + patient1["@id"] = undefined; + const underlyingNode = patient1[_getUnderlyingNode]; + expect(underlyingNode.termType).toBe("BlankNode"); + expect(dataset.match(underlyingNode).size).toBe(3); + expect(patient1.name).toContain("Garrett"); + expect(patient1.roommate?.toArray()[0].name).toContain("Rob"); + const roommatesRoommate = patient1 + .roommate!.toArray()[0]! + .roommate!.toArray()[0]; + expect(roommatesRoommate.name).toContain("Garrett"); + expect(roommatesRoommate[_getUnderlyingNode].termType).toBe("BlankNode"); + expect(roommatesRoommate[_getUnderlyingNode].equals(underlyingNode)).toBe( + true, + ); + }); + + it("treats deleting a field as setting that field to undefined", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + delete observation.subject; + + expect(dataset.toString()).toBe( + ' .\n .\n "Garrett" .\n .\n .\n "Rob" .\n .\n', + ); + }); + + it("treats deleting a field to a collection as setting that field to undefined", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + delete observation.subject?.name; + expect(dataset.toString()).toBe( + ' .\n .\n .\n .\n .\n "Rob" .\n .\n', + ); + }); + + it("Removes connecting triples when the delete method is called on a set", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + const firstRoommate = observation.subject!.roommate!.toArray()[0]; + observation.subject!.roommate!.delete(firstRoommate); + expect(dataset.toString()).toBe( + ' .\n .\n .\n "Garrett" .\n .\n "Rob" .\n .\n', + ); + }); + + it("Removes connecting triples when the delete method is called on a set with blank nodes", async () => { + const [dataset, observation] = await getTinyLoadedDatasetWithBlankNodes(); + const originalDatasetSize = dataset.size; + const roommate1 = observation.subject!.roommate!.toArray()[0]; + observation.subject!.roommate!.delete(roommate1); + expect(dataset.size).toBe(originalDatasetSize - 1); + expect( + dataset.match( + observation.subject![_getUnderlyingNode], + null, + roommate1[_getUnderlyingNode], + ).size, + ).toBe(0); + }); + + it("Removes a literal in an array when using the delete method", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + observation.subject!.name!.delete("Garrett"); + expect(dataset.toString()).toBe( + ' .\n .\n .\n .\n .\n "Rob" .\n .\n', + ); + }); + + it("removes all literals in a set using the clear method", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + observation.subject!.name!.clear(); + expect(dataset.toString()).toBe( + ' .\n .\n .\n .\n .\n "Rob" .\n .\n', + ); + }); + + it("Deletes itself if @id is deleted", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + delete observation["@id"]; + expect(observation).toEqual({ "@id": "http://example.com/Observation1" }); + expect(dataset.toString()).toBe( + ' .\n "Garrett" .\n .\n .\n "Rob" .\n .\n', + ); + }); + + it("Does nothing when deleting triples that don't exist", async () => { + const [dataset, observation] = await getEmptyObservationDataset(); + delete observation.subject; + expect(dataset.toString()).toBe(""); + }); + + it("Does nothing when deleting context", async () => { + const [, observation] = await getTinyLoadedDataset(); + delete observation["@context"]; + expect(observation["@context"]).toEqual(patientContext); + }); + + it("Does nothing when deleting toString", async () => { + const [, observation] = await getTinyLoadedDataset(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + delete observation.toString; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + delete observation[Symbol.toStringTag]; + expect(typeof observation.toString).toBe("function"); + }); + + it("Does nothing when deleting any symbol", async () => { + const [, observation] = await getTinyLoadedDataset(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + delete observation[Symbol.search]; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + expect(observation[Symbol.search]).toBe(undefined); + }); + + it("Only replaces referenced triples on a node that has the same id as the one it replaced", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + const replacementPatient: PatientShape = { + "@id": "http://example.com/Patient1", + type: { "@id": "Patient" }, + name: set("Mister Sneaky"), + }; + observation.subject = replacementPatient; + expect(dataset.toString()).toBe( + ' .\n .\n .\n "Mister Sneaky" .\n .\n .\n "Rob" .\n .\n', + ); + }); + + it("handles Object.assign", async () => { + const [dataset, observation] = await getTinyLoadedDataset(); + Object.assign(observation.subject!, { + age: 35, + isHappy: true, + }); + expect(dataset.toString()).toBe( + ' .\n .\n .\n "Garrett" .\n .\n "35"^^ .\n "true"^^ .\n .\n "Rob" .\n .\n', + ); + }); + + it("Adds elements to the array even if they were modified by the datastore", async () => { + const [dataset, patient] = await getEmptyPatientDataset(); + patient.type = { "@id": "Patient" }; + patient.name = set("Joe", "Blow"); + dataset.add( + quad( + namedNode("http://example.com/Patient1"), + namedNode("http://hl7.org/fhir/name"), + literal("Tow"), + ), + ); + expect(patient.name.size).toBe(3); + expect(patient.name).toContain("Joe"); + expect(patient.name).toContain("Blow"); + expect(patient.name).toContain("Tow"); + }); + + it("Removes elements from the set even if they were modified by the datastore", async () => { + const [dataset, patient] = await getEmptyPatientDataset(); + patient.type = { "@id": "Patient" }; + patient.name = set("Joe", "Blow"); + dataset.delete( + quad( + namedNode("http://example.com/Patient1"), + namedNode("http://hl7.org/fhir/name"), + literal("Blow"), + ), + ); + expect(patient.name.size).toBe(1); + expect(patient.name).toContain("Joe"); + }); + + it("Removes and adds from the array even if they were modified by the datastore", async () => { + const [dataset, patient] = await getEmptyPatientDataset(); + patient.type = { "@id": "Patient" }; + patient.name = set("Joe", "Blow"); + dataset.delete( + quad( + namedNode("http://example.com/Patient1"), + namedNode("http://hl7.org/fhir/name"), + literal("Blow"), + ), + ); + dataset.add( + quad( + namedNode("http://example.com/Patient1"), + namedNode("http://hl7.org/fhir/name"), + literal("Tow"), + ), + ); + expect(patient.name.size).toBe(2); + expect(patient.name).toContain("Joe"); + expect(patient.name).toContain("Tow"); + }); + + it("Prevents duplicates from being added to the array", async () => { + const [, patient] = await getArrayLoadedDataset(); + const arr = patient.name!; + arr.add("Garrett"); + expect(arr.size).toBe(3); + expect(arr).toContain("Garrett"); + expect(arr).toContain("Bobby"); + expect(arr).toContain("Ferguson"); + }); + + it("Prevents duplicates for Objects", async () => { + const [, observation] = await getLoadedDataset(); + const roommates = observation.subject!.roommate!; + roommates.add({ + "@id": "http://example.com/Patient3", + type: { "@id": "Patient" }, + }); + expect(roommates.size).toBe(2); + const roommateNames = roommates.reduce((s, obj) => { + obj.name?.forEach((n) => s.add(n)); + return s; + }, set()); + expect(roommateNames).toContain("Amy"); + }); + + it("allows rdf namedNodes to be added to a set", async () => { + const [, observation] = await getTinyLoadedDataset(); + observation.subject?.roommate?.add( + // @ts-expect-error This isn't technically allowed by the generated types + namedNode("http://example.com/Patient3"), + ); + expect(observation.subject?.roommate?.map((r) => r["@id"])).toContain( + "http://example.com/Patient3", + ); + }); + + it("allows rdf bankNodes to be added to a set", async () => { + const [, observation] = await getTinyLoadedDataset(); + const blank = blankNode(); + observation.subject?.roommate?.add( + // @ts-expect-error This isn't technically allowed by the generated types + blank, + ); + expect( + observation.subject?.roommate?.map((r) => r[_getUnderlyingNode]), + ).toContain(blank); + }); + + it("Can set a triple object named node with just a string", async () => { + const [dataset, observation] = await getEmptyObservationDataset(); + observation.type = { "@id": "Observation" }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + observation.subject = "http://example.com/Patient1"; + expect(observation.subject).toEqual({ + "@id": "http://example.com/Patient1", + }); + expect(dataset.toString()).toBe( + " .\n .\n", + ); + }); + }); + + describe("underlying data", () => { + it("retrieves underlying data", async () => { + const dataset = await serializedToDataset(patientData); + const entryNode = namedNode("http://example.com/Observation1"); + const context = patientContext; + const builder = jsonldDatasetProxy(dataset, context); + const observation = builder.fromSubject(entryNode); + expect(observation[_getUnderlyingDataset]).toBe(dataset); + expect(observation[_getUnderlyingNode].value).toBe( + "http://example.com/Observation1", + ); + expect(observation[_writeGraphs][0].termType).toBe("DefaultGraph"); + expect(observation[_proxyContext].writeGraphs[0].termType).toBe( + "DefaultGraph", + ); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const roommateArr = observation.subject!.roommate!; + expect(roommateArr[_getUnderlyingDataset]).toBe(dataset); + expect(roommateArr[_isSubjectOriented]).toBe(false); + const match = roommateArr[_getUnderlyingMatch]; + expect(match[0].value).toBe("http://example.com/Patient1"); + expect(match[1].value).toBe("http://hl7.org/fhir/roommate"); + expect(match[2]).toBe(null); + expect(match[3]).toBe(null); + }); + }); + + describe("matchSubject", () => { + let patients: LdSet; + let dataset: Dataset; + + beforeEach(async () => { + const [receivedDataset, , builder] = await getLoadedDataset(); + dataset = receivedDataset; + patients = builder.matchSubject( + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://hl7.org/fhir/Patient"), + ); + }); + + it("creates a list of subjects that match a certain pattern", async () => { + expect(patients.toArray()[0].name?.toArray()[0]).toBe("Garrett"); + expect(patients.toArray()[1].name?.toArray()[0]).toBe("Rob"); + expect(patients.toArray()[2].name?.toArray()[0]).toBe("Amy"); + }); + + it("Successfully adds a node to the list", async () => { + patients.add({ + "@id": "http://example.com/Patient4", + type: { "@id": "Patient" }, + name: set("Dippy"), + age: 2, + }); + expect( + dataset + .match( + null, + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://hl7.org/fhir/Patient"), + ) + .some((quad) => { + return quad.subject.value === "http://example.com/Patient4"; + }), + ).toBe(true); + expect(patients.toArray()[3].name?.toArray()[0]).toBe("Dippy"); + }); + + it("will read a new object if something has been added to the dataset after object creation", async () => { + dataset.add( + quad( + namedNode("http://example.com/Patient4"), + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://hl7.org/fhir/Patient"), + ), + ); + dataset.add( + quad( + namedNode("http://example.com/Patient4"), + namedNode("http://hl7.org/fhir/name"), + literal("Dippy"), + ), + ); + + expect( + dataset + .match( + null, + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://hl7.org/fhir/Patient"), + ) + .some((quad) => { + return quad.subject.value === "http://example.com/Patient4"; + }), + ).toBe(true); + expect(patients.toArray()[3].name?.toArray()[0]).toBe("Dippy"); + }); + + it("errors if an object is added without the correct parameters", async () => { + expect(() => + patients.add({ + "@id": "http://example.com/Patient4", + // @ts-expect-error This object is purposely wrong + name: ["Dippy"], + age: 2, + }), + ).toThrowError( + `Cannot add value to collection. This must contain a quad that matches (null, namedNode(http://www.w3.org/1999/02/22-rdf-syntax-ns#type), namedNode(http://hl7.org/fhir/Patient), null)`, + ); + }); + + it("errors if a literal is added to the collection", async () => { + // @ts-expect-error Purposely pushing an incorrect value to trigger an error + expect(() => patients.add("some string")).toThrowError( + `Cannot add a literal "some string"(string) to a subject-oriented collection.`, + ); + }); + + it("creates a collection that matches only collections in a certain graph", async () => { + const [, , builder] = await getGraphLoadedDataset(); + patients = builder.matchSubject( + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + namedNode("http://hl7.org/fhir/Patient"), + namedNode("http://example.com/Patient1Doc"), + ); + expect(patients.size).toBe(1); + expect(patients.map((o) => o["@id"])).toContain( + "http://example.com/Patient1", + ); + }); + + it("creates a WildcardSubjectSetProxy when providing wildcard subject matches", async () => { + const [, , builder] = await getLoadedDataset(); + patients = builder.matchSubject( + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + ); + expect(patients).toBeInstanceOf(WildcardSubjectSetProxy); + expect(patients[_isSubjectOriented]).toBe(true); + expect( + patients.has({ + "@id": "http://example.com/Patient1", + type: { "@id": "Patient" }, + }), + ).toBe(true); + }); + + it("does nothing when attempting to modify an abstract set", async () => { + const [dataset, , builder] = await getLoadedDataset(); + patients = builder.matchSubject( + namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + ); + const unmodifiedDataset = dataset.toString(); + patients.add({ "@id": "dontaddthisguy", type: { "@id": "Patient" } }); + expect(dataset.toString()).toBe(unmodifiedDataset); + patients.delete({ + "@id": "http://example.com/Patient1", + type: { "@id": "Patient" }, + }); + expect(dataset.toString()).toBe(unmodifiedDataset); + patients.clear(); + expect(dataset.toString()).toBe(unmodifiedDataset); + }); + }); + + describe("matchObject", () => { + let patients: LdSet; + let builder: JsonldDatasetProxyBuilder; + let dataset: Dataset; + + beforeEach(async () => { + const [recievedDataset, , receivedBuilder] = await getLoadedDataset(); + dataset = recievedDataset; + builder = receivedBuilder; + patients = builder.matchObject( + null, + namedNode("http://hl7.org/fhir/roommate"), + null, + ); + }); + + it("create a collection that matches the null, predicate, null pattern", async () => { + expect(patients.toArray()[0].name?.toArray()[0]).toBe("Garrett"); + expect(patients.toArray()[1].name?.toArray()[0]).toBe("Amy"); + expect(patients.toArray()[2].name?.toArray()[0]).toBe("Rob"); + }); + + it("cannot write to a collection that matches the null, predicate, null pattern", () => { + patients.add({ + "@id": "http://example.com/Patient4", + type: { "@id": "Patient" }, + }); + expect(dataset.match(namedNode("http://example.com/Patient4")).size).toBe( + 0, + ); + }); + + it("creates a collection that matches the subject, null, null pattern", () => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const hodgePodge = builder.matchObject( + namedNode("http://example.com/Patient3"), + null, + null, + ); + expect(hodgePodge.size).toBe(5); + expect(hodgePodge.toArray()[0]["@id"]).toBe("Patient"); + expect(hodgePodge.toArray()[1]).toBe("Amy"); + expect(hodgePodge.toArray()[2]).toBe("1988-01-01"); + expect(hodgePodge.toArray()[3]).toBe(33); + expect(hodgePodge.toArray()[4]).toBe(true); + }); + + it("can match object when the object is a literal.", () => { + const allNames = builder.matchObject( + null, + namedNode("http://hl7.org/fhir/name"), + null, + ); + expect(allNames.size).toBe(5); + expect(allNames).toContain("Garrett"); + expect(allNames).toContain("Bobby"); + expect(allNames).toContain("Ferguson"); + expect(allNames).toContain("Rob"); + expect(allNames).toContain("Amy"); + expect(allNames.has("Bobby")).toBe(true); + expect(allNames.has("WrongName")).toBe(false); + }); + }); + + describe("fromJson", () => { + it("initializes a patient using the fromJSON method", async () => { + const [, , builder] = await getEmptyPatientDataset(); + const patient = builder.fromJson({ + type: { "@id": "Patient" }, + name: set("Jack", "Horner"), + birthdate: "1725/11/03", + age: 298, + roommate: set({ + type: { "@id": "Patient" }, + name: set("Ethical", "Bug"), + }), + }); + expect(patient.name).toContain("Jack"); + expect(patient.name).toContain("Horner"); + expect(patient.birthdate).toBe("1725/11/03"); + expect(patient.age).toBe(298); + expect(patient.roommate?.toArray()[0].name).toContain("Ethical"); + expect(patient.roommate?.toArray()[0].name).toContain("Bug"); + }); + + it("initializes a patient using the fromJSON method with a named node", async () => { + const [, , builder] = await getEmptyPatientDataset(); + const patient = builder.fromJson({ + "@id": "http://example.com/Patient13", + type: { "@id": "Patient" }, + name: set("Jack", "Horner"), + birthdate: "1725/11/03", + age: 298, + roommate: set({ + type: { "@id": "Patient" }, + name: set("Ethical", "Bug"), + }), + }); + expect(patient["@id"]).toBe("http://example.com/Patient13"); + expect(patient.name).toContain("Jack"); + expect(patient.name).toContain("Horner"); + expect(patient.birthdate).toBe("1725/11/03"); + expect(patient.age).toBe(298); + expect(patient.roommate?.toArray()[0].name).toContain("Ethical"); + expect(patient.roommate?.toArray()[0].name).toContain("Bug"); + }); + }); + + describe("Graph Methods", () => { + describe("builder", () => { + it("sets write graph", async () => { + const [dataset, , builder] = await getEmptyObservationDataset(); + const patient4 = builder + .write(namedNode("http://example.com/Patient4Doc")) + .fromSubject(namedNode("https://example.com/Patient4")); + patient4.type = { "@id": "Patient" }; + patient4.name = set("Jackson"); + expect(dataset.toString()).toBe( + ' .\n "Jackson" .\n', + ); + }); + }); + + describe("graphOf", () => { + it("detects the graph of a single value", async () => { + const [, observation] = await getGraphLoadedDataset(); + expect(graphOf(observation, "subject").map((n) => n.value)).toContain( + "http://example.com/Observation1Doc", + ); + expect( + graphOf(observation, "subject", observation.subject)[0].value, + ).toBe("http://example.com/Observation1Doc"); + expect( + graphOf(observation.subject as PatientShape, "age")[0].value, + ).toBe("http://example.com/Patient1Doc"); + }); + + it("detects the graph of an array value", async () => { + const [, observation] = await getGraphLoadedDataset(); + const patient1 = observation.subject!; + expect( + graphOf(patient1, "name", "Garrett").map((n) => n.value), + ).toContain("http://example.com/Patient1Doc"); + expect( + graphOf(patient1, "roommate", { + "@id": "http://example.com/Patient2", + } as PatientShape).map((n) => n.value), + ).toContain("http://example.com/Patient1Doc"); + }); + + it("detects the graph of a value in multiple graphs", async () => { + const [dataset, observation] = await getGraphLoadedDataset(); + dataset.add( + quad( + namedNode("http://example.com/Observation1"), + namedNode("http://hl7.org/fhir/subject"), + namedNode("http://example.com/Patient1"), + namedNode("http://example.com/SomeOtherDoc"), + ), + ); + expect(graphOf(observation, "subject")[0].value).toBe( + "http://example.com/Observation1Doc", + ); + expect(graphOf(observation, "subject")[1].value).toBe( + "http://example.com/SomeOtherDoc", + ); + }); + }); + + describe("write method", () => { + it("changes the write graph", async () => { + const [, observation] = await getGraphLoadedDataset(); + write(namedNode("http://example.com/SomeOtherDoc")).using(observation); + observation.notes = "Cool Notes"; + expect(graphOf(observation, "notes")[0].value).toBe( + "http://example.com/SomeOtherDoc", + ); + }); + + it("allows the write graph to be reset", async () => { + const doc1 = namedNode("http://example.com/Doc1"); + const doc2 = namedNode("http://example.com/Doc2"); + const doc3 = namedNode("http://example.com/Doc3"); + + const [, patient] = await getEmptyPatientDataset(); + patient.type = { "@id": "Patient" }; + patient.name?.add("default"); + const end1 = write(doc1).using(patient); + patient.name?.add("1"); + const end2 = write(doc2).using(patient); + patient.name?.add("2"); + const end3 = write(doc3).using(patient); + patient.name?.add("3"); + end3(); + patient.name?.add("2 again"); + end2(); + patient.name?.add("1 again"); + end1(); + patient.name?.add("default again"); + + expect(graphOf(patient, "name", "default")[0].value).toBe( + defaultGraph().value, + ); + expect(graphOf(patient, "name", "1")[0].value).toBe(doc1.value); + expect(graphOf(patient, "name", "2")[0].value).toBe(doc2.value); + expect(graphOf(patient, "name", "3")[0].value).toBe(doc3.value); + expect(graphOf(patient, "name", "2 again")[0].value).toBe(doc2.value); + expect(graphOf(patient, "name", "1 again")[0].value).toBe(doc1.value); + expect(graphOf(patient, "name", "default again")[0].value).toBe( + defaultGraph().value, + ); + }); + + it("copies the proxy and changes the write graphs without modifying the original", async () => { + const doc1 = namedNode("http://example.com/Doc1"); + + const [, patient] = await getEmptyPatientDataset(); + patient.type = { "@id": "Patient" }; + patient.name?.add("Default"); + const [patientOnDoc1] = write(doc1).usingCopy(patient); + patientOnDoc1.name?.add("Doc1"); + expect(graphOf(patient, "name", "Default")[0].value).toBe( + defaultGraph().value, + ); + expect(graphOf(patient, "name", "Doc1")[0].value).toBe(doc1.value); + }); + + it("works with set proxies", async () => { + const [, , builder] = await getTinyLoadedDataset(); + const allRoommates = builder.matchObject( + namedNode("http://example.com/Patient1"), + namedNode("http://hl7.org/fhir/roommate"), + ); + write(namedNode("http://example.com/SomeGraph")).using(allRoommates); + const firstRoommate = allRoommates.toArray()[0]; + firstRoommate.age = 20; + expect(graphOf(firstRoommate, "age")[0].value).toBe( + "http://example.com/SomeGraph", + ); + }); + }); + }); + + describe("languageTag Support", () => { + it("Retrieves the proper language given the languageOrdering", async () => { + const [, , builder] = await getTinyLoadedDatasetWithLanguageTags(); + + const observation = builder + .setLanguagePreferences("fr", "en") + .fromSubject( + namedNode("http://example.com/Observation1"), + ); + + const patient = observation.subject as PatientShape; + + expect(observation.langNotes).toBe("Notes Sympas"); + expect(patient.langName?.toArray()[0]).toBe("Jean"); + + setLanguagePreferences("ru", "zh").using(observation, patient); + + expect(observation.langNotes).toBeUndefined(); + expect(patient.langName?.size).toBe(0); + + setLanguagePreferences("@other", "fr").using(observation, patient); + expect(observation.langNotes).not.toBe("Notes Sympas"); + expect(patient.langName?.toArray()[0]).not.toBe("Jean"); + + setLanguagePreferences().using(observation, patient); + expect(observation.langNotes).toBe(undefined); + expect(patient.langName?.size).toBe(0); + }); + + it("sets language strings based on the default language", async () => { + const [, , builder] = await getTinyLoadedDatasetWithLanguageTags(); + const observation = builder + .setLanguagePreferences("fr", "en") + .fromSubject( + namedNode("http://example.com/Observation1"), + ); + observation.langNotes = "quelques notes"; + expect(languagesOf(observation, "langNotes")).toEqual({ + fr: "quelques notes", + "@none": "Cool Notes", + en: "Cooler Notes", + es: "Notas Geniales", + }); + const patient = observation.subject as PatientShape; + patient.langName?.add("Luc"); + expect(languagesOf(patient, "langName").fr?.has("Jean")).toBe(true); + expect(languagesOf(patient, "langName").fr?.has("Luc")).toBe(true); + expect(languagesOf(patient, "langName")["@none"]?.has("Jon")).toBe(true); + expect(languagesOf(patient, "langName").en?.has("John")).toBe(true); + expect(languagesOf(patient, "langName").es?.has("Juan")).toBe(true); + + // Skips other in favor of setting the next language + setLanguagePreferences("@other", "es").using(observation, patient); + observation.langNotes = "algunas notas"; + expect(languagesOf(observation, "langNotes")).toEqual({ + fr: "quelques notes", + "@none": "Cool Notes", + en: "Cooler Notes", + es: "algunas notas", + }); + + // Does not set a language if only other + setLanguagePreferences("@other").using(observation, patient); + observation.langNotes = "Some Notes that will never be written"; + expect(languagesOf(observation, "langNotes")).toEqual({ + fr: "quelques notes", + "@none": "Cool Notes", + en: "Cooler Notes", + es: "algunas notas", + }); + + // Does not set a language if empty + setLanguagePreferences().using(observation, patient); + observation.langNotes = "Some Notes that will never be written"; + expect(languagesOf(observation, "langNotes")).toEqual({ + fr: "quelques notes", + "@none": "Cool Notes", + en: "Cooler Notes", + es: "algunas notas", + }); + + // Sets @none + setLanguagePreferences("@none").using(observation, patient); + observation.langNotes = "Other notes"; + expect(languagesOf(observation, "langNotes")).toEqual({ + fr: "quelques notes", + "@none": "Other notes", + en: "Cooler Notes", + es: "algunas notas", + }); + }); + + it("uses languageOf to make a languageMap", async () => { + const [, observation] = await getTinyLoadedDatasetWithLanguageTags(); + const languageMap = languagesOf(observation, "langNotes"); + expect(languageMap).toEqual({ + "@none": "Cool Notes", + en: "Cooler Notes", + es: "Notas Geniales", + fr: "Notes Sympas", + }); + }); + + it("uses languageOf to set values on a languageMap", async () => { + const [dataset, observation] = + await getTinyLoadedDatasetWithLanguageTags(); + const languageMap = languagesOf(observation, "langNotes"); + languageMap.zh = "很酷的笔记"; + languageMap.fr = "notes plus fraîches"; + expect(languageMap).toEqual({ + "@none": "Cool Notes", + en: "Cooler Notes", + es: "Notas Geniales", + fr: "notes plus fraîches", + zh: "很酷的笔记", + }); + const langNoteQuads = dataset.match( + namedNode("http://example.com/Observation1"), + namedNode("http://hl7.org/fhir/langNotes"), + ); + expect(langNoteQuads.size).toBe(5); + expect( + langNoteQuads.some( + (quad) => + quad.object.termType === "Literal" && + quad.object.language === "fr" && + quad.object.value === "notes plus fraîches", + ), + ).toBe(true); + expect( + langNoteQuads.some( + (quad) => + quad.object.termType === "Literal" && + quad.object.language === "zh" && + quad.object.value === "很酷的笔记", + ), + ).toBe(true); + }); + + it("uses languageOf to delete values on a languageMap", async () => { + const [dataset, observation] = + await getTinyLoadedDatasetWithLanguageTags(); + const languageMap = languagesOf(observation, "langNotes"); + delete languageMap.fr; + expect(languageMap).toEqual({ + "@none": "Cool Notes", + en: "Cooler Notes", + es: "Notas Geniales", + }); + const langNoteQuads = dataset.match( + namedNode("http://example.com/Observation1"), + namedNode("http://hl7.org/fhir/langNotes"), + ); + expect(langNoteQuads.size).toBe(3); + expect( + langNoteQuads.every( + (quad) => + !( + quad.object.termType === "Literal" && + quad.object.language === "fr" + ), + ), + ).toBe(true); + }); + + it("executes the methods of the LanguageSet", async () => { + const [dataset, observation] = + await getTinyLoadedDatasetWithLanguageTags(); + + const subject = namedNode("http://example.com/Patient1"); + const predicate = namedNode("http://hl7.org/fhir/langName"); + + const patient = observation.subject as PatientShape; + + const enSet = languagesOf(patient, "langName").en as LanguageSet; + + expect(enSet.size).toBe(1); + + enSet.add("Doe"); + expect(enSet.size).toBe(2); + expect(enSet.has("Doe")).toBe(true); + expect(dataset.has(quad(subject, predicate, literal("Doe", "en")))).toBe( + true, + ); + + const callbackMock = jest.fn(); + enSet.forEach(callbackMock); + expect(callbackMock).toHaveBeenCalledTimes(2); + expect(callbackMock).toHaveBeenCalledWith("John", "John", enSet); + + const entries = enSet.entries(); + const entriesVal1 = entries.next(); + const entriesVal2 = entries.next(); + const entriesVal3 = entries.next(); + expect(entriesVal1.value).toEqual(["John", "John"]); + expect(entriesVal2.value).toEqual(["Doe", "Doe"]); + expect(entriesVal3.done).toBe(true); + + const keys = enSet.keys(); + const keysVal1 = keys.next(); + const keysVal2 = keys.next(); + const keysVal3 = keys.next(); + expect(keysVal1.value).toBe("John"); + expect(keysVal2.value).toBe("Doe"); + expect(keysVal3.done).toBe(true); + + const values = enSet.values(); + const valuesVal1 = values.next(); + const valuesVal2 = values.next(); + const valuesVal3 = values.next(); + expect(valuesVal1.value).toBe("John"); + expect(valuesVal2.value).toBe("Doe"); + expect(valuesVal3.done).toBe(true); + + enSet.delete("John"); + expect(enSet.size).toBe(1); + expect(enSet.has("John")).toBe(false); + expect(dataset.has(quad(subject, predicate, literal("John", "en")))).toBe( + false, + ); + + enSet.clear(); + expect(enSet.size).toBe(0); + }); + }); +}; + +describe( + "jsonldDatasetProxy - unnested context", + testJsonldDatasetProxy(patientUnnestedContext), +); + +describe( + "jsonldDatasetProxy - nested context", + testJsonldDatasetProxy(patientNestedContext), +); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/nodeToJsonRepresentation.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/nodeToJsonRepresentation.test.ts new file mode 100644 index 0000000..7706a7b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/nodeToJsonRepresentation.test.ts @@ -0,0 +1,63 @@ +import { createDataset } from "@ldo/dataset"; +import { ContextUtil } from "../src/ContextUtil.js"; +import { nodeToJsonldRepresentation } from "../src/util/nodeToJsonldRepresentation.js"; +import { defaultGraph, literal } from "@ldo/rdf-utils"; +import { ProxyContext } from "../src/index.js"; + +describe("objectToJsonRepresentation", () => { + const extraParams: ProxyContext = new ProxyContext({ + dataset: createDataset(), + contextUtil: new ContextUtil({}), + writeGraphs: [defaultGraph()], + languageOrdering: ["@none", "@other"], + }); + + it("returns a string for hexBinary", () => { + expect( + nodeToJsonldRepresentation( + literal("F03493", "http://www.w3.org/2001/XMLSchema#hexBinary"), + extraParams, + ), + ).toBe("F03493"); + }); + + it("returns a string for HTML", () => { + expect( + nodeToJsonldRepresentation( + literal( + "", + "http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML", + ), + extraParams, + ), + ).toBe(""); + }); + + it("returns a string for anyUri", () => { + expect( + nodeToJsonldRepresentation( + literal( + "http://example.com", + "http://www.w3.org/2001/XMLSchema#anyURI", + ), + extraParams, + ), + ).toBe("http://example.com"); + }); + + it("returns a string for an unrecognized datatype", () => { + expect( + nodeToJsonldRepresentation( + literal("meh", "http://weirddatatype.com"), + extraParams, + ), + ).toBe("meh"); + }); + + it("throws an error when it encoutners a quad that is not a Liter, NamedNode, or BlankNode", () => { + expect(() => + // @ts-expect-error defaultGraph is not allowed + nodeToJsonldRepresentation(defaultGraph(), extraParams), + ).toThrow("Can only convert NamedNodes or Literals or BlankNodes"); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/nodeToString.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/nodeToString.test.ts new file mode 100644 index 0000000..ad1942e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/nodeToString.test.ts @@ -0,0 +1,15 @@ +import { namedNode, blankNode, literal, defaultGraph } from "@ldo/rdf-utils"; +import { nodeToString } from "../src/index.js"; + +describe("nodeToString", () => { + it("returns all the correct values for nodeToString", () => { + expect(nodeToString(namedNode("http://example.com"))).toBe( + "namedNode(http://example.com)", + ); + expect(nodeToString(blankNode("_b1"))).toBe("blankNode(_b1)"); + expect(nodeToString(literal("Hello"))).toBe( + "literal(Hello,http://www.w3.org/2001/XMLSchema#string)", + ); + expect(nodeToString(defaultGraph())).toBe("defaultGraph()"); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/patientExampleData.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/patientExampleData.ts new file mode 100644 index 0000000..b48caf1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/patientExampleData.ts @@ -0,0 +1,252 @@ +import type { ContextDefinition } from "jsonld"; +import type { Schema } from "shexj"; +import type { LdoJsonldContext } from "../src/LdoJsonldContext.js"; +import type { LdSet } from "../src/index.js"; + +export interface ObservationShape { + "@id"?: string; + "@context"?: ContextDefinition; + type: { "@id": "Observation" }; + subject?: PatientShape; + notes?: string; + langNotes?: string; +} + +export type PatientShape = { + "@id"?: string; + "@context"?: ContextDefinition; + type: { "@id": "Patient" }; + name?: LdSet; + langName?: LdSet; + birthdate?: string; + age?: number; + isHappy?: boolean; + roommate?: LdSet; +}; + +// No need to fully define the schema because this library doesn't use it +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +export const patientSchema: Schema = {}; + +export const patientUnnestedContext: ContextDefinition = { + type: { + "@id": "@type", + }, + Patient: "http://hl7.org/fhir/Patient", + Observation: "http://hl7.org/fhir/Observation", + subject: { "@id": "http://hl7.org/fhir/subject", "@type": "@id" }, + name: { + "@id": "http://hl7.org/fhir/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@container": "@set", + }, + langName: { + "@id": "http://hl7.org/fhir/langName", + "@type": "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + "@container": "@set", + }, + birthdate: { + "@id": "http://hl7.org/fhir/birthdate", + "@type": "http://www.w3.org/2001/XMLSchema#date", + }, + age: { + "@id": "http://hl7.org/fhir/age", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + isHappy: { + "@id": "http://hl7.org/fhir/isHappy", + "@type": "http://www.w3.org/2001/XMLSchema#boolean", + }, + roommate: { + "@id": "http://hl7.org/fhir/roommate", + "@type": "@id", + "@container": "@set", + }, + notes: { + "@id": "http://hl7.org/fhir/notes", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + langNotes: { + "@id": "http://hl7.org/fhir/langNotes", + "@type": "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + }, +}; + +export const patientNestedContext: LdoJsonldContext = { + type: { + "@id": "@type", + }, + Observation: { + "@id": "http://hl7.org/fhir/Observation", + "@context": { + notes: { + "@id": "http://hl7.org/fhir/notes", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + langNotes: { + "@id": "http://hl7.org/fhir/langNotes", + "@type": "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + }, + subject: { "@id": "http://hl7.org/fhir/subject", "@type": "@id" }, + }, + }, + Patient: { + "@id": "http://hl7.org/fhir/Patient", + "@context": { + name: { + "@id": "http://hl7.org/fhir/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + langName: { + "@id": "http://hl7.org/fhir/langName", + "@type": "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString", + "@isCollection": true, + }, + birthdate: { + "@id": "http://hl7.org/fhir/birthdate", + "@type": "http://www.w3.org/2001/XMLSchema#date", + }, + age: { + "@id": "http://hl7.org/fhir/age", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + isHappy: { + "@id": "http://hl7.org/fhir/isHappy", + "@type": "http://www.w3.org/2001/XMLSchema#boolean", + }, + roommate: { + "@id": "http://hl7.org/fhir/roommate", + "@type": "@id", + "@isCollection": true, + }, + }, + }, +}; + +export const patientData = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . +@prefix rdf: . + +example:Observation1 a fhir:Observation ; + fhir:notes "Cool Notes"^^xsd:string ; + fhir:subject example:Patient1 . + +example:Patient1 a fhir:Patient ; + rdf:type fhir:Patient ; + fhir:name "Garrett"^^xsd:string, "Bobby"^^xsd:string, "Ferguson"^^xsd:string ; + fhir:birthdate "1986-01-01"^^xsd:date ; + fhir:age "35"^^xsd:integer ; + fhir:isHappy "true"^^xsd:boolean ; + fhir:roommate example:Patient2, example:Patient3 . + +example:Patient2 a fhir:Patient ; + rdf:type fhir:Patient ; + fhir:name "Rob"^^xsd:string ; + fhir:birthdate "1987-01-01"^^xsd:date ; + fhir:age "34"^^xsd:integer ; + fhir:isHappy "false"^^xsd:boolean ; + fhir:roommate example:Patient1, example:Patient3 . + +example:Patient3 a fhir:Patient ; + rdf:type fhir:Patient ; + fhir:name "Amy"^^xsd:string ; + fhir:birthdate "1988-01-01"^^xsd:date ; + fhir:age "33"^^xsd:integer ; + fhir:isHappy "true"^^xsd:boolean . +`; + +export const patientDataWithBlankNodes = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . + +example:Observation1 a fhir:Observation ; + fhir:notes "Cool Notes"^^xsd:string ; + fhir:subject _:Patient1 . + +_:Patient1 a fhir:Patient ; + fhir:name "Garrett"^^xsd:string, "Bobby"^^xsd:string, "Ferguson"^^xsd:string ; + fhir:birthdate "1986-01-01"^^xsd:date ; + fhir:age "35"^^xsd:integer ; + fhir:isHappy "true"^^xsd:boolean ; + fhir:roommate _:Patient2, _:Patient3 . + +_:Patient2 a fhir:Patient ; + fhir:name "Rob"^^xsd:string ; + fhir:birthdate "1987-01-01"^^xsd:date ; + fhir:age "34"^^xsd:integer ; + fhir:isHappy "false"^^xsd:boolean ; + fhir:roommate _:Patient1, _:Patient3 . + +_:Patient3 a fhir:Patient ; + fhir:name "Amy"^^xsd:string ; + fhir:birthdate "1988-01-01"^^xsd:date ; + fhir:age "33"^^xsd:integer ; + fhir:isHappy "true"^^xsd:boolean . +`; + +export const tinyPatientData = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . + +example:Observation1 a fhir:Observation ; + fhir:subject example:Patient1 . + +example:Patient1 a fhir:Patient ; + fhir:name "Garrett"^^xsd:string ; + fhir:roommate example:Patient2 . + +example:Patient2 a fhir:Patient ; + fhir:name "Rob"^^xsd:string ; + fhir:roommate example:Patient1 . +`; + +export const tinyArrayPatientData = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . + +example:Patient1 a fhir:Patient ; + fhir:name "Garrett"^^xsd:string, "Bobby"^^xsd:string, "Ferguson"^^xsd:string . +`; + +export const tinyPatientDataWithBlankNodes = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . + +example:Observation1 a fhir:Observation ; + fhir:subject _:Patient1 . + +_:Patient1 a fhir:Patient ; + fhir:name "Garrett"^^xsd:string ; + fhir:roommate _:Patient2 . + +_:Patient2 a fhir:Patient ; + fhir:name "Rob"^^xsd:string ; + fhir:roommate _:Patient1 . +`; + +export const tinyPatientDataWithLanguageTags = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . + +example:Observation1 a fhir:Observation ; + fhir:subject example:Patient1 ; + fhir:langNotes "Cool Notes" ; + fhir:langNotes "Cooler Notes"@en ; + fhir:langNotes "Notas Geniales"@es ; + fhir:langNotes "Notes Sympas"@fr . + +example:Patient1 a fhir:Patient ; + fhir:langName "Jon" ; + fhir:langName "John"@en ; + fhir:langName "Juan"@es ; + fhir:langName "Jean"@fr . +`; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/scopedExampleData.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/scopedExampleData.ts new file mode 100644 index 0000000..21b5cd2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/test/scopedExampleData.ts @@ -0,0 +1,119 @@ +import type { ContextDefinition } from "jsonld"; +import type { LdoJsonldContext } from "../src/LdoJsonldContext.js"; + +export interface Bender { + "@id"?: string; + "@context"?: ContextDefinition; + type: "Bender"; + name: string; + element: Element; + friend: (Bender | NonBender | Avatar)[]; +} + +export interface Avatar { + "@id"?: string; + "@context"?: ContextDefinition; + type: "Avatar"; + name: string; + element: Element[]; + friend: (Bender | NonBender | Avatar)[]; +} + +export interface NonBender { + "@id"?: string; + "@context"?: ContextDefinition; + type: "Avatar"; + name: string; + friend: (Bender | NonBender | Avatar)[]; +} + +export type Element = + | { + "@id": "VideoObject"; + } + | { + "@id": "ImageObject"; + } + | { + "@id": "MediaObject"; + } + | { + "@id": "CreativeWork"; + }; + +export const scopedContext: LdoJsonldContext = { + Bender: { + "@id": "http://example.com/Bender", + "@context": { + type: { + "@id": "@type", + }, + name: { + "@id": "http://example.com/name", + }, + element: { + "@id": "http://example.com/element", + }, + friend: { + "@id": "http://example.com/friend", + "@isCollection": true, + }, + }, + }, + Avatar: { + "@id": "http://example.com/Avatar", + "@context": { + type: { + "@id": "@type", + }, + name: { + "@id": "http://example.com/name", + }, + element: { + "@id": "http://example.com/element", + "@isCollection": true, + }, + friend: { + "@id": "http://example.com/friend", + "@isCollection": true, + }, + }, + }, + NonBender: { + "@id": "http://example.com/NonBender", + "@context": { + type: { + "@id": "@type", + }, + name: { + "@id": "http://example.com/name", + }, + friend: { + "@id": "http://example.com/friend", + "@isCollection": true, + }, + }, + }, +}; + +export const scopedData = ` +@prefix example: . +@prefix fhir: . +@prefix xsd: . +@prefix rdf: . + +example:Aang a example:Avatar ; + example:name "Aang" ; + example:element example:Air, example:Water ; + example:friend example:Sokka, example:Katara . + +example:Katara a example:Bender ; + example:name "Katara" ; + example:element example:Water ; + example:friend example:Sokka, example:Aang . + +example:Sokka a example:NonBender ; + example:name "Sokka" ; + example:element example:Water ; + example:friend example:Sokka, example:Aang . +`; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/tsconfig.cjs.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/tsconfig.cjs.json new file mode 100644 index 0000000..affce40 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.cjs.json", + "compilerOptions": { + "outDir": "./dist/cjs", + "rootDir": "./src" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/tsconfig.esm.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/tsconfig.esm.json new file mode 100644 index 0000000..09f99c2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/jsonld-dataset-proxy/tsconfig.esm.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "outDir": "./dist/esm", + "rootDir": "./src", + "declarationDir": "./dist/types" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/README.md b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/README.md new file mode 100644 index 0000000..553454e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/README.md @@ -0,0 +1,172 @@ +# @ldo/ldo + +`@ldo/ldo` is the primary interface for accessing Linked Data Objects given raw RDF. + +## Guide + +A full walkthrough for using the `@ldo/ldo` library can be found in the [For RDF Usage Guide](https://ldo.js.org/latest/raw_rdf/). + +## Installation + +### Automatic Installation + +Navigate into your project's root folder and run the following command: +``` +cd my_project/ +npx run @ldo/cli init +``` + +
+ +Manual Installation + + +If you already have generated ShapeTypes, you may install the `@ldo/ldo` library independently. + +``` +npm i @ldo/ldo +``` +
+ +## Simple Example + +Below is a simple example of LDO in a real use-case (changing the name on a Solid Pod). Assume that a ShapeType was previously generated and placed at `./.ldo/foafProfile.shapeTypes`. + +```typescript +import { + parseRdf, + startTransaction, + toSparqlUpdate, + toTurtle, + set, +} from "@ldo/ldo"; +import { FoafProfileShapeType } from "./.ldo/foafProfile.shapeTypes.js"; + +async function run() { + const rawTurtle = ` + <#me> a ; + "Jane Doe". + `; + + /** + * Step 1: Convert Raw RDF into a Linked Data Object + */ + const ldoDataset = await parseRdf(rawTurtle, { + baseIRI: "https://solidweb.me/jane_doe/profile/card", + }); + // Create a linked data object by telling the dataset the type and subject of + // the object + const janeProfile = ldoDataset + // Tells the LDO dataset that we're looking for a FoafProfile + .usingType(FoafProfileShapeType) + // Says the subject of the FoafProfile + .fromSubject("https://solidweb.me/jane_doe/profile/card#me"); + + /** + * Step 2: Manipulate the Linked Data Object + */ + // Logs "Jane Doe" + console.log(janeProfile.name); + // Logs "Person" + console.log(janeProfile.type); + // Logs 0 + console.log(janeProfile.knows?.size); + + // Begins a transaction that tracks your changes + startTransaction(janeProfile); + janeProfile.name = "Jane Smith"; + janeProfile.knows?.add({ + "@id": "https://solidweb.me/john_smith/profile/card#me", + type: { + "@id": "Person", + }, + name: "John Smith", + knows: set(janeProfile), + }); + + // Logs "Jane Smith" + console.log(janeProfile.name); + // Logs "John Smith" + console.log(janeProfile.knows?.toArray()[0].name); + // Logs "Jane Smith" + console.log(janeProfile.knows?.toArray()[0].knows?.toArray()[0].name); + + /** + * Step 3: Convert it back to RDF + */ + // Logs: + // a ; + // "Jane Smith"; + // . + // a ; + // "John Smith"; + // . + console.log(await toTurtle(janeProfile)); + // Logs: + // DELETE DATA { + // "Jane Doe" . + // }; + // INSERT DATA { + // "Jane Smith" . + // . + // "John Smith" . + // . + // . + // } + console.log(await toSparqlUpdate(janeProfile)); +} +run(); +``` + +## API Details + +Types + + - [`LdoBase`](https://ldo.js.org/latest/api/ldo/LdoBase/) + - [`ShapeType`](https://ldo.js.org/latest/api/ldo/ShapeType/) + +Getting an LdoDataset + + - [`parseRdf`](https://ldo.js.org/latest/api/ldo/parseRdf/) + - [`createLdoDatasetFactory`](https://ldo.js.org/latest/api/ldo/createLdoDatasetFactory/) + - [`LdoDatasetFactory`](https://ldo.js.org/latest/api/ldo/LdoDatasetFactory/) + - [`createLdoDataset`](https://ldo.js.org/latest/api/ldo/createLdoDataset/) + - [`LdoDataset`](https://ldo.js.org/latest/api/ldo/LdoDataset/) + +Getting a Linked Data Object + + - [`LdoBuilder`](https://ldo.js.org/latest/api/ldo/LdoBuilder/) + +Converting a Linked Data Object to Raw RDF + + - [`toTurtle`](https://ldo.js.org/latest/api/ldo/toTurtle/) + - [`toNTriples`](https://ldo.js.org/latest/api/ldo/toNTriples/) + - [`serialize`](https://ldo.js.org/latest/api/ldo/serialize/) + +Transactions + + - [transactions](https://ldo.js.org/latest/api/ldo/transactions/) + - [`toSparqlUpdate`](https://ldo.js.org/latest/api/ldo/toSparqlUpdate/) + +Language Tag Support + + - [`languageOf`](https://ldo.js.org/latest/api/ldo/languageOf/) + - [`setLanguagePreferences`](https://ldo.js.org/latest/api/ldo/setLanguagePreferences/) + +Graph Support + + - [`graphOf`](https://ldo.js.org/latest/api/ldo/graphOf/) + - [`write`](https://ldo.js.org/latest/api/ldo/write/) + +Other Helper Functions + + - [`getDataset`](https://ldo.js.org/latest/api/ldo/getDataset/) + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/jest.config.cjs b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/jest.config.cjs new file mode 100644 index 0000000..3ad2cee --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/jest.config.cjs @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +// packages/dataset/jest.config.cjs +const sharedConfig = require("../../jest.config.js"); + +module.exports = { + ...sharedConfig, + rootDir: "./", // Sets context for this package + collectCoverageFrom: [ + "src/**/*.ts", + "!src/**/*.d.ts", + // "!src/index.ts", // Optional, if index.ts only re-exports + ], + modulePathIgnorePatterns: ["/dist/"], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/package.json new file mode 100644 index 0000000..8f8bc8a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/package.json @@ -0,0 +1,67 @@ +{ + "name": "@ldo/ldo", + "version": "1.0.0-alpha.32", + "description": "", + "type": "module", + "main": "./dist/cjs/index.cjs", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.cjs" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "rimraf dist && npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --project tsconfig.cjs.json && node ../../scripts/rename-to-cjs.js", + "build:esm": "tsc --project tsconfig.esm.json", + "test": "jest --coverage", + "example": "ts-node ./example/example.ts", + "prepublishOnly": " npm run build", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "docs": "typedoc --plugin typedoc-plugin-markdown", + "remove-dist": "rimraf dist/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/ldo#readme", + "devDependencies": { + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.6", + "@types/n3": "^1.10.4", + "@types/readable-stream": "^2.3.13", + "@types/shexj": "2.1.4", + "cross-fetch": "^3.1.5", + "typedoc": "^0.25.4", + "typedoc-plugin-markdown": "^3.17.1" + }, + "dependencies": { + "@ldo/dataset": "^1.0.0-alpha.30", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.32", + "@ldo/subscribable-dataset": "^1.0.0-alpha.32", + "buffer": "^6.0.3", + "readable-stream": "^4.3.0" + }, + "overrides": { + "readable-stream": "^4.3.0" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "gitHead": "840910c56ec3f61416f031cc76771a5673af6757" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoBuilder.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoBuilder.ts new file mode 100644 index 0000000..785a955 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoBuilder.ts @@ -0,0 +1,210 @@ +import type { GraphNode, QuadMatch, SubjectNode } from "@ldo/rdf-utils"; +import type { + LanguageOrdering, + JsonldDatasetProxyBuilder, + LdSet, +} from "@ldo/jsonld-dataset-proxy"; +import type { ShapeType, CompactShapeType, AnyShapeType } from "./ShapeType.js"; +import type { LdoBase } from "./util.js"; +import { normalizeNodeName, normalizeNodeNames } from "./util.js"; + +/** + * An LdoBuilder contains utility methods for building a Linked Data Object for a certain type. + * + * It is not recommended to instantiate an LdoDataset. Instead use the {@link createLdoDataset} function. + * + * @typeParam Type - The TypeScript type of the eventual Linked Data Object. + * + * @example + * ```typescript + * import { LdoDataset, createLdoDatasetFactory } from "@ldo/ldo"; + * import { FoafProfileShapeType } from "./.ldo/foafProfile.shapeTypes.js"; + * + * const ldoDataset = createLdoDataset(); + * const ldoBuilder = ldoDataset.usingType(FoafProfileShapeType); + * const profile = ldoBuilder + * .write("https://example.com/someGraph") + * .fromSubject("https://example.com/profile#me"); + * ``` + */ +export class LdoBuilder { + /** + * @internal + */ + protected jsonldDatasetProxyBuilder: JsonldDatasetProxyBuilder; + protected shapeType: ShapeType | CompactShapeType; + + /** + * Initializes the LdoBuilder + * + * @param jsonldDatasetProxyBuilder - A base JsonldDatasetProxyBuilder that thios LdoBuilder wraps + * @param shapeType - The ShapeType for this builder + */ + constructor( + jsonldDatasetProxyBuilder: JsonldDatasetProxyBuilder, + shapeType: AnyShapeType, + ) { + this.jsonldDatasetProxyBuilder = jsonldDatasetProxyBuilder; + this.shapeType = shapeType; + } + + /** + * `fromSubject` lets you define a an `entryNode`, the place of entry for the graph. The object returned by `jsonldDatasetProxy` will represent the given node. This parameter accepts both `namedNode`s and `blankNode`s. `fromSubject` takes a generic type representing the typescript type of the given subject. + * + * @param subject - The node to match + * + * @returns A Linked Data Object for the provided subject. + * + * @example + * ```typescript + * const profile = ldoDataset + * .usingType(FoafProfileShapeType) + * .fromSubject("http://example.com/Person1"); + * ``` + */ + fromSubject(subject: SubjectNode | string): Type { + return this.jsonldDatasetProxyBuilder.fromSubject( + normalizeNodeName(subject), + ); + } + + /** + * `matchSubject` returns a Jsonld Dataset Proxy representing all subjects in the dataset matching the given predicate, object, and graph. + * + * @param predicate - A valid Predicate Node (NamedNode) or a string URI. + * @param object - A valid object node (NamedNode, Blank Node, or Literal) or a string URI. + * @param graph - A valid graph node (NamedNode or DefaultGraph) or a string URI. + * + * @returns A Linked Data Object Array with all subjects the match the provided nodes. + * + * @example + * ```typescript + * const profiles = ldoDataset + * .usingType(FoafProfileShapeType) + * .matchSubject( + * namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), + * namedNode("http://xmlns.com/foaf/0.1/Person") + * ); + * profiles.forEach((person) => { + * console.log(person.fn); + * }); + * ``` + */ + matchSubject( + predicate: QuadMatch[1] | string, + object?: QuadMatch[2] | string, + graph?: QuadMatch[3] | string, + ): LdSet { + return this.jsonldDatasetProxyBuilder.matchSubject( + predicate != undefined ? normalizeNodeName(predicate) : undefined, + object != undefined ? normalizeNodeName(object) : undefined, + graph != undefined ? normalizeNodeName(graph) : undefined, + ); + } + + /** + * `matchObject` returns a Jsonld Dataset Proxy representing all objects in the dataset matching the given subject, predicate, and graph. + * + * @param subject - A valid object node (NamedNode or Blank Node) or a string URI. + * @param predicate - A valid Predicate Node (NamedNode) or a string URI. + * @param graph - A valid graph node (NamedNode or DefaultGraph) or a string URI. + * + * @returns A Linked Data Object Array with all objects the match the provided nodes. + * + * @example + * ```typescript + * matchObject( + * subject?: SubjectNode | string, + * predicate?: PredicateNode | string, + * graph?: GraphNode | string, + * ): Type[] + * ``` + */ + matchObject( + subject?: QuadMatch[0] | string, + predicate?: QuadMatch[1] | string, + graph?: QuadMatch[3] | string, + ): LdSet { + return this.jsonldDatasetProxyBuilder.matchObject( + subject != undefined ? normalizeNodeName(subject) : undefined, + predicate != undefined ? normalizeNodeName(predicate) : undefined, + graph != undefined ? normalizeNodeName(graph) : undefined, + ); + } + + /** + * `fromJson` will take any regular Json, add the information to the dataset, and return a Jsonld Dataset Proxy representing the given data. + * + * @param inputData - Initial data matching the type + * @returns A linked data object or linked data object array depending on the input + * + * @example + * ```typescript + * const person2 = ldoDataset + * .usingType(FoafProfileShapeType) + * .fromJson({ + * "@id": "http://example.com/Person2", + * fn: ["Jane Doe"], + * }); + * ``` + */ + fromJson(inputData: Type): Type { + return this.jsonldDatasetProxyBuilder.fromJson(inputData); + } + + /** + * Designates that all Linked Data Objects created should write to the specified graphs. By default, all new quads are added to the default graph, but you can change the graph to which new quads are added. + * + * NOTE: These operations only dictate the graph for new triples. Any operations that delete triples will delete triples regardless of their graph. + * + * @param graphs - any number of Graph Nodes or string URIs that all add operations will be put in. + * + * @returns An LdoBuilder for constructor chaining + * + * @example + * ```typescript + * const person1 = ldoDataset.usingType(FoafShapeType) + * .write(namedNode("http://example.com/ExampleGraph")) + * .fromSubject(namedNode("http://example.com/Person1")); + * person1.name.push("Jack"); + * console.log(dataset.toString()); + * // Logs: + * // "Jack" . + * ``` + */ + write(...graphs: (GraphNode | string)[]): LdoBuilder { + return new LdoBuilder( + this.jsonldDatasetProxyBuilder.write(...normalizeNodeNames(graphs)), + this.shapeType, + ); + } + + /** + * Sets the order of language preferences for Language Strings. Acceptable values are EITF language tags, "@none" and "@other" + * + * @param languageOrdering - The order languages will be selected. Acceptable values are EITF language tags, "@none" and "@other". + * + * @returns An LdoBuilder for constructor chaining + * + * @example + * ```typescript + * // Read Spansih first, then Korean, then language strings with no language + * // New writes are in Spanish + * ["es", "ko", "@none"] + * + * // Read any language other than french, then french + * // New writes are in French + * ["@other", "fr"] + * ``` + */ + setLanguagePreferences( + ...languageOrdering: LanguageOrdering + ): LdoBuilder { + return new LdoBuilder( + this.jsonldDatasetProxyBuilder.setLanguagePreferences( + ...languageOrdering, + ), + this.shapeType, + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoDataset.ts new file mode 100644 index 0000000..8764b19 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoDataset.ts @@ -0,0 +1,55 @@ +import type { Quad } from "@rdfjs/types"; +import jsonldDatasetProxy from "@ldo/jsonld-dataset-proxy"; +import { SubscribableDataset } from "@ldo/subscribable-dataset"; +import { LdoBuilder } from "./LdoBuilder.js"; +import type { AnyShapeType, ShapeType, CompactShapeType } from "./ShapeType.js"; +import type { LdoBase } from "./index.js"; +import { LdoTransactionDataset } from "./LdoTransactionDataset.js"; +import type { ILdoDataset } from "./types.js"; + +/** + * @category Getting an LdoDataset + * + * An LdoDataset is a utility for building a linked data object. + * + * It is not recommended to instantiate an LdoDataset. Instead use the {@link createLdoDataset} function. + * + * @example + * ```typescript + * import { LdoDataset, createLdoDatasetFactory } from "@ldo/ldo"; + * import { FoafProfileShapeType } from "./.ldo/foafProfile.shapeTypes.js"; + * + * const ldoDatasetFactory = createLdoDatasetFactory(); + * const ldoDataset = new LdoDataset(); + * const ldoBuilder = ldoDataset.usingType(FoafProfileShapeType); + * ``` + */ +export class LdoDataset + extends SubscribableDataset + implements ILdoDataset +{ + /** + * Creates an LdoBuilder for a given shapeType + * + * @param shapeType - A ShapeType + * @returns A builder for the given type + */ + public usingType( + shapeType: AnyShapeType, + ): LdoBuilder { + const context = (shapeType as ShapeType).context || {}; + const proxyBuilder = jsonldDatasetProxy(this, context); + return new LdoBuilder( + proxyBuilder, + shapeType as ShapeType | CompactShapeType, + ); + } + + public startTransaction(): LdoTransactionDataset { + return new LdoTransactionDataset( + this, + this.datasetFactory, + this.transactionDatasetFactory, + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoDatasetFactory.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoDatasetFactory.ts new file mode 100644 index 0000000..59fc18f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoDatasetFactory.ts @@ -0,0 +1,38 @@ +import type { Dataset, Quad } from "@rdfjs/types"; +import type { ISubscribableDatasetFactory } from "@ldo/subscribable-dataset"; +import { SubscribableDatasetFactory } from "@ldo/subscribable-dataset"; +import { LdoDataset } from "./LdoDataset.js"; + +/** + * @category Getting an LdoDataset + * `LdoDatasetFactory` is a helper class that includes methods for creating LdoDatasets. + * + * This class exists for parity with RDF/JS. Most developers will not use it. Instead, it's better to use {@link createLdoDataset}. + * + * @example + * ```typescript + * import { createLdoDatasetFactory } from "@ldo/ldo"; + * import { createExtendedDatasetFactory } from "@ldo/dataset"; + * import { createTransactionDatasetFactory } from "@ldo/subscribable-dataset"; + * + * const datasetFactory = createExtendedDatasetFactory(); + * const transactionDatasetFactory = createTransactionDatasetFactroy(); + * const ldoDatasetFactory = new LdoDatasetFactory( + * datasetFactory, + * transactionDatasetFactory + * ); + * const ldoDataset = ldoDatasetFactory.dataset(initialDataset); + * ``` + */ +export class LdoDatasetFactory + extends SubscribableDatasetFactory + implements ISubscribableDatasetFactory +{ + dataset(quads?: Dataset | Quad[] | undefined): LdoDataset { + return new LdoDataset( + this.datasetFactory, + this.transactionDatasetFactory, + this.datasetFactory.dataset(quads), + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoTransactionDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoTransactionDataset.ts new file mode 100644 index 0000000..dbd21ac --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/LdoTransactionDataset.ts @@ -0,0 +1,20 @@ +import { TransactionDataset } from "@ldo/subscribable-dataset"; +import type { Quad } from "@rdfjs/types"; +import type { ILdoDataset } from "./types.js"; +import { LdoBuilder } from "./LdoBuilder.js"; +import type { ShapeType, AnyShapeType } from "./ShapeType.js"; +import type { LdoBase } from "./util.js"; +import jsonldDatasetProxy from "@ldo/jsonld-dataset-proxy"; + +export class LdoTransactionDataset + extends TransactionDataset + implements ILdoDataset +{ + usingType( + shapeType: AnyShapeType, + ): LdoBuilder { + const context = (shapeType as ShapeType).context || {}; + const proxyBuilder = jsonldDatasetProxy(this, context); + return new LdoBuilder(proxyBuilder, shapeType); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/ShapeType.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/ShapeType.ts new file mode 100644 index 0000000..9c455fa --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/ShapeType.ts @@ -0,0 +1,70 @@ +import type { ContextDefinition } from "jsonld"; +import type { Schema } from "shexj"; +import type { LdoBase } from "./util.js"; + +/** + * @category Types + * + * A `ShapeType` is an interface that contains information required by LDO to create a Linked Data Object. ShapeTypes are generated by the `@ldo/cli` `build` command, and it contains the following data: + * + * - ShEx Schema + * - Generated Typescript Typings + * - Generated Context + * + * @example + * The following is the ShapeType generated for the example `FoafProfile.shex` file. + * ```typescript + * import { ShapeType } from "ldo"; + * import { foafProfileSchema } from "./foafProfile.schema.js"; + * import { foafProfileContext } from "./foafProfile.context.js"; + * import { FoafProfile } from "./foafProfile.typings.js"; + * + * export const FoafProfileShapeType: ShapeType = { + * schema: foafProfileSchema, + * shape: "https://example.com/FoafProfile", + * context: foafProfileContext, + * }; + * ``` + * + * This can be imported and used to create a Linked Data Object. + * ```typescript + * import { FoafProfileShapeType } from "./.ldo/foafProfile.shapeTypes.js"; + * import { FoafProfile } from "./.ldo/foafProfile.typings.js"; + * + * const profile: FoafProfile = ldoDataset + * .usingType(FoafProfileShapeType) + * .fromSubject("https://example.com/profile.ttl#me"); + * ``` + */ +export type ShapeType = { + /** + * The ShEx Schema + */ + schema: Schema; + /** + * The key of the shape within the schema to which this ShapeType refers + */ + shape: string; + /** + * A JSON-LD context generated for this Schema + */ + context: ContextDefinition; + /** + * This field is optional and the `@ldo/cli` `build` command will not provide this field. The `exampleData` field's primary purpose is to force the TypeScript parser to recognize the provided `Type` so it can be auto-inferenced in the `LdoDataset.usingType` method. + */ + exampleData?: Type; +}; + +/** + * CompactShapeType is a reduced variant without a JSON-LD context, used for the + * compact typings format. + */ +export type CompactShapeType = { + schema: Schema; + shape: string; + exampleData?: Type; +}; + +export type AnyShapeType = + | ShapeType + | CompactShapeType; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/createLdoDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/createLdoDataset.ts new file mode 100644 index 0000000..b1bc9f2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/createLdoDataset.ts @@ -0,0 +1,53 @@ +import type { Dataset, DatasetFactory, Quad } from "@rdfjs/types"; +import { createDataset } from "@ldo/dataset"; +import { LdoDatasetFactory } from "./LdoDatasetFactory.js"; +import { createTransactionDatasetFactory } from "@ldo/subscribable-dataset"; +import type { LdoDataset } from "./LdoDataset.js"; + +/** + * @category Getting an LdoDataset + * + * A helper function that creates an LdoDatasetFactory. + * This function exists for parity with RDF/JS. Most developers will not use it. Instead, it's better to use {@link createLdoDataset}. + * + * @returns An LDO Dataset Factory + * + * @example + * ```typescript + * createLdoDatasetFactory(): Promise + * ``` + */ +export function createLdoDatasetFactory() { + const datasetFactory: DatasetFactory = { + dataset: (quads?: Dataset | Quad[]): Dataset => { + return createDataset(quads); + }, + }; + return new LdoDatasetFactory( + datasetFactory, + createTransactionDatasetFactory(), + ); +} + +/** + * @category Getting an LdoDataset + * + * A function that initializes an LdoDataset. + * + * @param initialDataset - An optional dataset or array of quads for the new dataset + * + * @returns An LDO Dataset initialized with the intitial dataset if any + * + * @example + * ```typescript + * import { createLdoDataset } from "@ldo/ldo"; + * + * const ldoDataset = createLdoDataset(); + * ``` + */ +export function createLdoDataset( + initialDataset?: Dataset | Quad[], +): LdoDataset { + const ldoDatasetFactory = createLdoDatasetFactory(); + return ldoDatasetFactory.dataset(initialDataset); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/index.ts new file mode 100644 index 0000000..657c238 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/index.ts @@ -0,0 +1,13 @@ +export * from "./parseRdf.js"; +export * from "./ShapeType.js"; +export * from "./methods.js"; +export * from "./LdoDataset.js"; +export * from "./LdoTransactionDataset.js"; +export * from "./LdoBuilder.js"; +export * from "./createLdoDataset.js"; +export type { LdoBase, LdoCompactBase } from "./util.js"; +export * from "./types.js"; +export type { LdSet, LdoJsonldContext } from "@ldo/jsonld-dataset-proxy"; +export { set } from "@ldo/jsonld-dataset-proxy"; +export type { Schema } from "@ldo/traverser-shexj"; +export type { CompactShape, CompactSchema } from "@ldo/schema-converter-shex"; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/methods.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/methods.ts new file mode 100644 index 0000000..74fc550 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/methods.ts @@ -0,0 +1,412 @@ +import type { JsonLdDocument } from "jsonld"; +import type { GraphNode, DatasetChanges } from "@ldo/rdf-utils"; +import type { InteractOptions } from "@ldo/jsonld-dataset-proxy"; +import { + getProxyFromObject, + _getUnderlyingDataset, + _proxyContext, + write as writeDependency, +} from "@ldo/jsonld-dataset-proxy"; +import type { SubscribableDataset } from "@ldo/subscribable-dataset"; +import type { WriterOptions } from "@ldo/rdf-utils"; +import type { Dataset, Quad } from "@rdfjs/types"; +import { changesToSparqlUpdate, datasetToString } from "@ldo/rdf-utils"; +import type { LdoBase } from "./util.js"; +import { + canDatasetStartTransaction, + getTransactionalDatasetFromLdo, + normalizeNodeNames, +} from "./util.js"; + +import { + graphOf as graphOfImport, + languagesOf as languagesOfImport, + setLanguagePreferences as setLanguagePreferencesImport, +} from "@ldo/jsonld-dataset-proxy"; + +/** + * The graph of specific information can be detected using the `graphOf(subject, predicate, object)` function. + * + * @param subject - A Linked Data Object that represents the subject of a quad. + * @param predicate - A field on the given Linked Data Object + * @param object - An optional parameter that represents the direct object of a statement. This could be a Linked Data Object or a number to indicate the location in an array. This argument can be left blank if the given field is not an array. + * + * @returns A GraphNode (defaultGraph or namedNode). + * + * @example + * ```typescript + * import { graphOf } from "@ldo/ldo"; + * graphOf(person, "name", 0); // returns defaultGraph() + * graphOf(person, "age"); // returns defaultGraph() + * ``` + */ +export const graphOf = graphOfImport; + +/** + * The `languageOf` function lets you view and modify the language strings directly. `languageOf` takes two properties: + * + * It returns a mapping of languages to strings or sets of strings depending on the cardinality of the JSON-LD context. + * + * @param ldo - Any Linked Data Object + * @param field - Any field on the provided Linked Data Object + * + * @returns `languageOf` returns either a `LanguageSetMap` if the given field is an array, or a `LanguageMap` if the given field is a singular value. For example, `languageOf(profile, "friends")` would return a `LanguageSetMap` because there the `listOfFriendNames` field has a cardinality over 1, but `languageOf(profile, "familyName")` would return a `LanguageMap` because it has a cardinality of 1. + * + * @example + * This example uses a `LanguageMap`. The `LanguageMap` is a mapping between various language tags (including the `@none` tag) and the singular language value for that tag. Modifying the `LanguageMap` will automatically update the underlying dataset. + * ```typescript + * const labelLanguages = languagesOf(hospitalInfo, "label"); + * // labelLanguages: { '@none': 'Hospital', fr: 'Hôpital', ko: '병원' } + * // logs "병원" + * console.log(labelLanguages.ko); + * // Adds a Chinese label + * labelLanguages.zh = "医院"; + * // Changes the no-language label from to "Super Hospital" + * labelLanguages["@none"] = "Super Hospital"; + * // Removes the French label + * delete labelLanguages.fr; + * ``` + * @example + * This example uses a `LanguageSetMap` The `LanguageSetMap` is a mapping between various language tags (including the `@none` tag) and a JavaScript Set of all values for that tag. Modifying the `LanguageSetMap` will automatically update the underlying dataset. + * ```typescript + * const descriptionLanguages = languagesOf(hospitalInfo, "description"); + * // descriptionLanguages: + * // { + * // '@none': Set(2) { 'Heals patients', 'Has doctors' }, + * // fr: Set(2) { 'Guérit les malades', 'A des médecins' }, + * // ko: Set(2) { '환자를 치료하다', '의사 있음' } + * // } + * // Logs: 환자를 치료하다\n의사 있음 + * Array.from(descriptionLanguages.ko).forEach((str) => console.log(str)); + * // Adds a Hindi description + * descriptionLanguages.hi?.add("रोगियों को ठीक करता है"); + * // Checks to see if the korean label contains "의사 있음" + * descriptionLanguages.ko?.has("의사 있음"); // returns true + * // Removes "Has Doctors" from the no-language description + * descriptionLanguages["@none"]?.delete("Has Doctors"); + * ``` + */ +export const languagesOf = languagesOfImport; + +/** + * A language preference is an ordered list telling the Linked Data Object the language you prefer as well as callbacks. + * + * For read operations, the Linked Data Object will search for values in order of the preference. Write operations will choose the first language in the language preference, unless that language is `@other`, in which case it will choose the next language. + * + * @example + * A language ordering is an ordering of preferred languages. Valid values for the language preferences includes any [IETF Language Tag](https://en.wikipedia.org/wiki/IETF_language_tag) as well as the special tags `@none` and `@other`. `@none` represents any language literal that doesn't have a language tag. `@other` represents any language literal that isn't listed among the language preferences. + * + * ```typescript + * // Read Spansih first, then Korean, then language strings with no language + * // New writes are in Spanish + * ["es", "ko", "@none"] + * + * // Read any language other than french, then french + * // New writes are in French + * ["@other", "fr"] + * ``` + * + * @example + * The `setLanguagePreferences(...).using(...)` function sets the language preferences for a set of Linked Data Objects. + * + * ```typescript + * import { setLanguagePreferences } from "@ldo/ldo"; + * + * setLanguagePreferences("fr", "ko").using(hospitalInfo); + * console.log(hospitalInfo.label); // Logs "Hôpital" + * setLanguagePreferences("@none").using(hospitalInfo); + * console.log(hospitalInfo.label); // Logs "Hospital" + * ``` + * + * @example + * The `setLanguagePreferences(...).usingCopy(...)` function returns a copy of the provided Linked Data Objects with the given language preferences. + * + * ```typescript + * import { setLanguagePreferences } from "@ldo/ldo"; + * + * // ... + * + * const [frenchPreference] = setLanguagePreferences("fr").usingCopy(hospitalInfo); + * const [koreanPreference] = setLanguagePreferences("ko").usingCopy(hospitalInfo); + * console.log(frenchPreference.label); // Logs "Hôpital" + * console.log(koreanPreference.label); // Logs "병원" + * ``` + */ +export const setLanguagePreferences = setLanguagePreferencesImport; + +/** + * By default, all new quads are added to the default graph, but you can change the graph to which new quads are added using the `write` function. + * + * @example + * The `write(...).using(...)` function lets you define the graphs you wish to write to using specific jsonldDatasetProxies. + * + * ```typescript + * import { write } from "@ldo/ldo"; + * + * // Now all additions with person1 will be on ExampleGraph1 + * write(namedNode("http://example.com/ExampleGraph1")).using(person1); + * person1.name.push("Jack"); + * // Now all additions with person1 will be on ExampleGraph2 + * write(namedNode("http://example.com/ExampleGraph2")).using(person1); + * person1.name.push("Spicer"); + * + * console.log(dataset.toString()); + * // Logs: + * // "Jack" . + * // "Spicer" . + * ``` + * + * The function also returns an `end` function that will reset the graph to what it was before. This is useful for nesting graph modifications. + * + * ```typescript + * person1.name.push("default"); + * const end1 = write(namedNode("http://example.com/Graph1")).using(person1); + * person1.name.push("1"); + * const end2 = write(namedNode("http://example.com/Graph2")).using(person1); + * person1.name.push("2"); + * const end3 = write(namedNode("http://example.com/Graph3")).using(person1); + * person1.name.push("3"); + * end3(); + * person1.name.push("2 again"); + * end2(); + * person1.name.push("1 again"); + * end1(); + * person1.name.push("default again"); + * console.log(dataset.toString()); + * // Logs: + * // "default" . + * // "default again" . + * // "1" . + * // "1 again" . + * // "2" . + * // "2 again" . + * // "3" . + * ``` + * @example + * If you would like a new variable to write to without modifying the original Jsonld Dataset Proxy, you can use `write(...).usingCopy(...)`. + * + * ```typescript + * const [person1WritingToNewGraph] = write( + * namedNode("http://example.com/NewGraph") + * ).usingCopy(person1); + * person1WritingToNewGraph.name.push("Brandon"); + * person1.name.push("Sanderson"); + * console.log(dataset.toString()); + * // Logs: + * // "Brandon" . + * // "Sanderson" . + * ``` + */ +export function write(...graphs: (GraphNode | string)[]): InteractOptions { + return writeDependency(...normalizeNodeNames(graphs)); +} + +/** + * Begins a transaction for a Linked Data Object. After this function is run, the Linked Data Object is considered to be "transactable" where all modifications are not written to the underlying dataset are stored separately as a delta. + * + * Note: If a Linked Data Object is "transactable", it cannot be passed into `startTransaction` a second time. + * + * @param ldo - Any linked data object that is not currently "transactable" + * + * @example + * ```typescript + * import { + * startTransaction, + * transactionChanges, + * toSparqlUpdate, + * commitTransaction, + * } from "@ldo/ldo"; + * + * // ... Get the profile linked data object + * + * startTransaction(profile); + * profile.name = "Kuzon" + * const changes = transactionChanges(profile)); + * // Logs: "Kuzon" + * console.log(changes.added?.toString()) + * // Logs: "Aang" + * console.log(changes.removed?.toString()) + * commitTransaction(profile); + * ``` + */ +export function startTransaction(ldo: LdoBase): void { + const proxy = getProxyFromObject(ldo); + const dataset = proxy[_getUnderlyingDataset]; + if (!canDatasetStartTransaction(dataset)) { + throw new Error("Object is not transactable."); + } + proxy[_proxyContext] = proxy[_proxyContext].duplicate({ + dataset: (dataset as SubscribableDataset).startTransaction(), + state: { parentDataset: dataset }, + }); +} + +/** + * Commits a transaction, writing all the stored changes to the underlying dataset. After this function is run, the Linked Data Object is considered to be NOT "transactable" all further modifications will be written directly to the underlying dataset. + * + * @param ldo - Any linked data object that is currently "transactable" + * + * @example + * ```typescript + * import { + * startTransaction, + * transactionChanges, + * toSparqlUpdate, + * commitTransaction, + * } from "@ldo/ldo"; + * + * // ... Get the profile linked data object + * + * startTransaction(profile); + * profile.name = "Kuzon" + * const changes = transactionChanges(profile)); + * // Logs: "Kuzon" + * console.log(changes.added?.toString()) + * // Logs: "Aang" + * console.log(changes.removed?.toString()) + * commitTransaction(profile); + * ``` + */ +export function commitTransaction(ldo: LdoBase): void { + const [dataset, proxy] = getTransactionalDatasetFromLdo(ldo); + dataset.commit(); + proxy[_proxyContext] = proxy[_proxyContext].duplicate({ + dataset: proxy[_proxyContext].state + .parentDataset as SubscribableDataset, + }); +} + +/** + * Returns the changes that are made on a "transactable" Linked Data Object. + * + * @param ldo - Any linked data object that is currently "transactable" + * + * @returns Dataset changes with all quads added during this transaction and all quads removed during this transaction + * + * @example + * ```typescript + * import { + * startTransaction, + * transactionChanges, + * toSparqlUpdate, + * commitTransaction, + * } from "@ldo/ldo"; + * + * // ... Get the profile linked data object + * + * startTransaction(profile); + * profile.name = "Kuzon" + * const changes = transactionChanges(profile)); + * // Logs: "Kuzon" + * console.log(changes.added?.toString()) + * // Logs: "Aang" + * console.log(changes.removed?.toString()) + * commitTransaction(profile); + * ``` + */ +export function transactionChanges(ldo: LdoBase): DatasetChanges { + const [dataset] = getTransactionalDatasetFromLdo(ldo); + return dataset.getChanges(); +} + +/** + * Returns the Linked Data Object's underlying RDFJS dataset. Modifying this dataset will change the Linked Data Object as well. + * + * @param ldo - The Linked Data Object from which the RDFJS dataset should be extracted. + * + * @returns An RDFJS dataset + * + * @example + * ```typescript + * import { getDataset } from "@ldo/ldo" + * const dataset = getDataset(profile); + * ``` + */ +export function getDataset(ldo: LdoBase): Dataset { + const proxy = getProxyFromObject(ldo); + return proxy[_getUnderlyingDataset]; +} + +/** + * Converts a "transactable" Linked Data Object (A Linked Data Object that has been passed as a parameter to the `startTransaction` function) to a SPARQL/Update string. + * + * @param ldo - Any linked data object that is currently "transactable" + * + * @returns A SPARQL Update string + */ +export async function toSparqlUpdate(ldo: LdoBase): Promise { + const [dataset] = getTransactionalDatasetFromLdo(ldo); + const changes = dataset.getChanges(); + return changesToSparqlUpdate(changes); +} + +/** + * Converts a Linked Data Object to a string representation based on a provided configuration. + * + * @param ldo - Any linked data object + * @param options - WriterOptions from N3 + * @param options.format - `string | MimeFormat | undefined` The name of the format to serialize. + * @param options.prefixes - `Prefixes | - undefined` A list of prefixes that should be in the document. + * + * @returns Serialized N3 RDF + * + * @example + * ```typescript + * import { serialize } from "@ldo/ldo" + * // ... + * const rawTurtle: string = await serialize(profile, { + * format: "Turtle", + * prefixes: { + * ex: "https://example.com/", + * foaf: "http://xmlns.com/foaf/0.1/", + * } + * }); + * ``` + */ +export async function serialize( + ldo: LdoBase, + options: WriterOptions, +): Promise { + const dataset = getProxyFromObject(ldo)[_getUnderlyingDataset]; + return datasetToString(dataset, options); +} + +/** + * Converts a Linked Data Object to a Turtle string + * + * @param ldo - Any linked data object + * @returns Serialized Turtle + * + * @example + * ```typescript + * import { toTurtle } from "@ldo/ldo" + * // ... + * const rawTurtle: string = await toTurtle(profile); + * ``` + */ +export async function toTurtle(ldo: LdoBase): Promise { + const dataset = getProxyFromObject(ldo)[_getUnderlyingDataset]; + return datasetToString(dataset, {}); +} + +export async function toJsonLd(_ldo: LdoBase): Promise { + throw new Error("Not Implemented"); +} + +/** + * Converts a Linked Data Object to a NTriples string + * + * @param ldo - Any linked data object + * @returns An N-Triple string + * + * @example + * ```typescript + * import { toNTriples } from "@ldo/ldo" + * // ... + * const rawNTriples: string = await toNTriples(profile); + * ``` + */ +export async function toNTriples(ldo: LdoBase): Promise { + const dataset = getProxyFromObject(ldo)[_getUnderlyingDataset]; + return datasetToString(dataset, { format: "N-Triples" }); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/parseRdf.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/parseRdf.ts new file mode 100644 index 0000000..891a5b1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/parseRdf.ts @@ -0,0 +1,57 @@ +import type { Dataset } from "@rdfjs/types"; +import type { JsonLdDocument } from "jsonld"; +import type { ParserOptions } from "n3"; +import { createDatasetFromSerializedInput } from "@ldo/dataset"; +import { + createLdoDataset, + createLdoDatasetFactory, +} from "./createLdoDataset.js"; +import type { LdoDataset } from "./LdoDataset.js"; + +/** + * @category Getting an LdoDataset + * + * Parses raw RDF and puts its results into an LdoDataset. + * + * @param data - The raw data to parse as a `string`. + * @param parserOptions - Parser options from n3 + * @param parserOptions.format - The format the data is in. The following are acceptable formats: `Turtle`, `TriG`, `N-Triples`, `N-Quads`, `N3`, `Notation3`. + * @param parserOptions.baseIRI - If this data is hosted at a specific location, you can provide the baseIRI of that location. + * @param parserOptions.blankNodePrefix - If blank nodes should have a prefix, that should be provided here. + * @param parserOptions.factory - a RDF Data Factory from [`@rdfjs/data-model`](https://www.npmjs.com/package/@rdfjs/data-model). + * + * @returns An LdoDataset containing the parsed triples + * + * @example + * ```typescript + * import { parseRdf } from "ldo"; + * + * const rawTurtle = "..."; + * const ldoDataset = await parseRdf(rawTurtle, { baseIRI: "https://example.com/" }); + * ``` + */ +export async function parseRdf( + data: string | JsonLdDocument | Dataset, + parserOptions?: ParserOptions, +): Promise { + const ldoDatasetFactory = createLdoDatasetFactory(); + if (typeof data === "string") { + // Input data is serialized + return await createDatasetFromSerializedInput( + ldoDatasetFactory, + data, + parserOptions, + ); + } else if (typeof (data as Dataset).add === "function") { + // Input data is a dataset + return createLdoDataset(data as Dataset); + } else { + return await createDatasetFromSerializedInput( + ldoDatasetFactory, + JSON.stringify(data), + { + format: "application/ld+json", + }, + ); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/types.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/types.ts new file mode 100644 index 0000000..d83a55d --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/types.ts @@ -0,0 +1,9 @@ +import type { ISubscribableDataset } from "@ldo/subscribable-dataset"; +import type { LdoBuilder } from "./LdoBuilder.js"; +import type { ShapeType } from "./ShapeType.js"; +import type { LdoBase } from "./util.js"; +import type { Quad } from "@rdfjs/types"; + +export interface ILdoDataset extends ISubscribableDataset { + usingType(shapeType: ShapeType): LdoBuilder; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/util.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/util.ts new file mode 100644 index 0000000..4c0c0d2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/src/util.ts @@ -0,0 +1,77 @@ +import { namedNode } from "@ldo/rdf-utils"; +import type { Dataset, Quad } from "@rdfjs/types"; +import type { SetProxy, SubjectProxy } from "@ldo/jsonld-dataset-proxy"; +import { + getProxyFromObject, + _getUnderlyingDataset, + _proxyContext, +} from "@ldo/jsonld-dataset-proxy"; +import type { AnyNode } from "@ldo/rdf-utils"; +import type { + ISubscribableDataset, + ITransactionDataset, +} from "@ldo/subscribable-dataset"; + +/** + * @category Types + * `LdoBase` is an interface defining that a Linked Data Object is a JavaScript Object Literal. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type LdoBase = Record; + +/** + * @category Types + * `LdoCompactBase` is an interface defining that a Linked Data Object + * in compact format is a JavaScript Object Literal and has an id. + */ +export type LdoCompactBase = LdoBase & { id: string }; + +/** + * Converts a node/string into just a node + * @param input A Node or string + * @returns A node + */ +export function normalizeNodeName( + input: NodeType | string, +): NodeType { + return (typeof input === "string" ? namedNode(input) : input) as NodeType; +} + +/** + * Converts an array of nodes/strings into an array of nodes + * @param inputs An array of nodes/strings + * @returns An array of nodes + */ +export function normalizeNodeNames( + inputs: (NodeType | string)[], +): NodeType[] { + return inputs.map((input) => normalizeNodeName(input)); +} + +export function canDatasetStartTransaction( + dataset: Dataset, +): dataset is ISubscribableDataset { + return ( + typeof (dataset as ISubscribableDataset).startTransaction === "function" + ); +} + +export function isTransactionalDataset( + dataset: Dataset, +): dataset is ITransactionDataset { + return typeof (dataset as ITransactionDataset).commit === "function"; +} + +export function getTransactionalDatasetFromLdo( + ldo: LdoBase, +): [ITransactionDataset, SubjectProxy | SetProxy] { + const proxy = getProxyFromObject(ldo); + const dataset = proxy[_getUnderlyingDataset]; + if ( + !isTransactionalDataset(dataset) || + !proxy[_proxyContext].state.parentDataset + ) { + throw new Error("Object is not currently in a transaction"); + } + return [dataset, proxy]; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/LdoDataset.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/LdoDataset.test.ts new file mode 100644 index 0000000..d38eff4 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/LdoDataset.test.ts @@ -0,0 +1,174 @@ +import { namedNode, quad, literal } from "@ldo/rdf-utils"; +import { createDataset } from "@ldo/dataset"; +import type { SolidProfileShape } from "./profileData.js"; +import { ProfileShapeType } from "./profileData.js"; +import type { LdoBuilder, LdoDataset } from "../src/index.js"; +import { + createLdoDataset, + graphOf, + parseRdf, + toTurtle, + set, +} from "../src/index.js"; +import { sampleJsonld, sampleTurtle } from "./sampleData.js"; +import type { SubjectProxy } from "@ldo/jsonld-dataset-proxy"; +import { _proxyContext } from "@ldo/jsonld-dataset-proxy"; + +describe("LdoDataset", () => { + let ldoDataset: LdoDataset; + let profileBuilder: LdoBuilder; + + beforeEach(async () => { + ldoDataset = await parseRdf(sampleTurtle, { + baseIRI: "https://solidweb.org/jackson/profile/card", + }); + profileBuilder = ldoDataset.usingType(ProfileShapeType); + }); + + it("Creates a blank profile", async () => { + ldoDataset = createLdoDataset(); + profileBuilder = ldoDataset.usingType(ProfileShapeType); + const profile = profileBuilder.fromSubject( + "https://example.com/person1#me", + ); + profile.fn = "Diplo"; + expect(await toTurtle(profile)).toBe( + ' "Diplo" .\n', + ); + }); + + it("initializes a profile using the fromJson method", () => { + const profile = profileBuilder.fromJson({ + type: set({ "@id": "Person" }, { "@id": "Person2" }), + inbox: { "@id": "https://inbox.com" }, + fn: "Diplo", + }); + expect(profile.inbox).toEqual({ "@id": "https://inbox.com" }); + expect(profile.fn).toBe("Diplo"); + expect(profile["@id"]).toBe(undefined); + }); + + it("initializes a profile with an id using the fromJson method", () => { + const profile = profileBuilder.fromJson({ + "@id": "https://example.com/person1", + type: set({ "@id": "Person" }, { "@id": "Person2" }), + inbox: { "@id": "https://inbox.com" }, + fn: "Diplo", + }); + expect(profile.inbox).toEqual({ "@id": "https://inbox.com" }); + expect(profile.fn).toBe("Diplo"); + expect(profile["@id"]).toBe("https://example.com/person1"); + }); + + it("retrieves a subject with a named node", async () => { + const profile = await profileBuilder.fromSubject( + namedNode("https://solidweb.org/jackson/profile/card#me"), + ); + expect(profile.fn).toBe("Jackson Morgan"); + }); + + it("retrieves a subject with a string id", async () => { + const profile = profileBuilder.fromSubject( + "https://solidweb.org/jackson/profile/card#me", + ); + expect(profile.fn).toBe("Jackson Morgan"); + }); + + it("uses an existing dataset as the basis for the ldo", async () => { + const dataset = createDataset(); + dataset.add( + quad( + namedNode("https://example.com/person1"), + namedNode("http://xmlns.com/foaf/0.1/name"), + literal("Captain cool"), + ), + ); + const profile = createLdoDataset(dataset) + .usingType(ProfileShapeType) + .fromSubject("https://example.com/person1"); + expect(profile.name).toBe("Captain cool"); + }); + + it("uses an existing array of quads as the basis for the ldo", async () => { + const quads = [ + quad( + namedNode("https://example.com/person1"), + namedNode("http://xmlns.com/foaf/0.1/name"), + literal("Captain cool"), + ), + ]; + const profile = createLdoDataset(quads) + .usingType(ProfileShapeType) + .fromSubject("https://example.com/person1"); + expect(profile.name).toBe("Captain cool"); + }); + + it("parses JsonLD", async () => { + await expect(async () => parseRdf(sampleJsonld)).rejects.toThrow( + "Not Implemented", + ); + // ldoDataset = await parseRdf(sampleJsonld); + // const profile = ldoDataset + // .usingType(ProfileShapeType) + // .fromSubject("https://example.com/item"); + // expect(profile.name).toBe("Captain of Coolness"); + }); + + it("parses an existing dataset", async () => { + const ldoDataset = await parseRdf(createDataset()); + expect(typeof ldoDataset.usingType).toBe("function"); + }); + + it("Sets the proper write graphs", () => { + const profile = profileBuilder + .write("https://example.com/exampleGraph") + .fromSubject("https://example.com/person1"); + profile.name = "Jackson"; + expect(graphOf(profile, "name")[0].value).toBe( + "https://example.com/exampleGraph", + ); + }); + + it("Lets a match query retrieve subjects", () => { + const profiles = profileBuilder.matchSubject( + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + "http://xmlns.com/foaf/0.1/Person", + ); + expect(profiles.toArray()[0].fn).toBe("Jackson Morgan"); + }); + + it("Handles alternate optionality for subject match", () => { + const profiles = profileBuilder.matchSubject( + undefined, + undefined, + "https://someGraph.com", + ); + expect(profiles.size).toBe(0); + }); + + it("Lets a match query retrieve objects", () => { + const profiles = profileBuilder.matchObject( + null, + "http://xmlns.com/foaf/0.1/primaryTopic", + ); + expect(profiles.toArray()[0].fn).toBe("Jackson Morgan"); + }); + + it("Handles alternate optionality for object match", () => { + const profiles = profileBuilder.matchObject( + "https://someSubject", + undefined, + "https://someGraph.com", + ); + expect(profiles.size).toBe(0); + }); + + it("Sets language preferences", () => { + const profile = profileBuilder + .setLanguagePreferences("@none", "en") + .fromSubject("https://solidweb.org/jackson/profile/card#me"); + expect( + (profile as unknown as SubjectProxy)[_proxyContext].languageOrdering, + ).toEqual(["@none", "en"]); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/TransactionLdoDataset.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/TransactionLdoDataset.test.ts new file mode 100644 index 0000000..cf110be --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/TransactionLdoDataset.test.ts @@ -0,0 +1,21 @@ +import { createLdoDataset } from "../src/createLdoDataset.js"; +import { ProfileShapeType } from "./profileData.js"; + +describe("TransactionLdoDataset", () => { + it("Uses transactions with an LdoBuilder", () => { + const ldoDataset = createLdoDataset(); + const transaction = ldoDataset.startTransaction(); + const profile = transaction + .usingType(ProfileShapeType) + .fromSubject("https://example.com/Person1"); + profile.fn = "John Doe"; + expect(transaction.getChanges().added?.toString()).toBe( + ' "John Doe" .\n', + ); + expect(ldoDataset.toString()).toBe(""); + transaction.commit(); + expect(ldoDataset.toString()).toBe( + ' "John Doe" .\n', + ); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/methods.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/methods.test.ts new file mode 100644 index 0000000..e4bfe66 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/methods.test.ts @@ -0,0 +1,151 @@ +import { namedNode } from "@ldo/rdf-utils"; +import type { SubjectProxy } from "@ldo/jsonld-dataset-proxy"; +import { + getProxyFromObject, + graphOf, + _getUnderlyingDataset, + _proxyContext, +} from "@ldo/jsonld-dataset-proxy"; +import { createDataset } from "@ldo/dataset"; +import type { SolidProfileShape } from "./profileData.js"; +import { ProfileShapeType } from "./profileData.js"; +import { + commitTransaction, + createLdoDataset, + getDataset, + serialize, + startTransaction, + toJsonLd, + toNTriples, + toSparqlUpdate, + toTurtle, + transactionChanges, + write, + setLanguagePreferences, + languagesOf, +} from "../src/index.js"; +import type { ILdoDataset } from "../src/types.js"; + +describe("methods", () => { + let dataset: ILdoDataset; + let profile: SolidProfileShape; + beforeEach(() => { + dataset = createLdoDataset(); + profile = dataset + .usingType(ProfileShapeType) + .fromSubject(namedNode("https://example.com/item")); + }); + + it("Records changes in a transaction", () => { + startTransaction(profile); + profile.name = "Beeboo"; + const changes = transactionChanges(profile); + expect(changes.added?.size).toBe(1); + expect(changes.removed).toBe(undefined); + }); + + it("throws when called with startTransaction if an underlying dataset is not a subscribable dataset", () => { + const proxy = getProxyFromObject(profile); + proxy[_proxyContext] = proxy[_proxyContext].duplicate({ + dataset: createDataset(), + }); + expect(() => startTransaction(profile)).toThrow( + "Object is not transactable.", + ); + }); + + it("Commits changes", () => { + startTransaction(profile); + profile.name = "Joey"; + expect(dataset.size).toBe(0); + commitTransaction(profile); + expect(dataset.size).toBe(1); + expect(profile.name).toBe("Joey"); + }); + + it("throws an error if transaction dependent functions are called without a transaction", async () => { + expect(() => transactionChanges(profile)).toThrow( + "Object is not currently in a transaction", + ); + expect(() => commitTransaction(profile)).toThrow( + "Object is not currently in a transaction", + ); + await expect(async () => toSparqlUpdate(profile)).rejects.toThrow( + "Object is not currently in a transaction", + ); + }); + + it("provides the correct sparql update", async () => { + profile.name = "Mr. Cool Dude"; + startTransaction(profile); + profile.name = "Captain of Coolness"; + expect(await toSparqlUpdate(profile)).toBe( + `DELETE DATA { "Mr. Cool Dude" . }; INSERT DATA { "Captain of Coolness" . }`, + ); + }); + + it("provides a sparql update when nothing has been changed", async () => { + startTransaction(profile); + expect(await toSparqlUpdate(profile)).toBe(""); + }); + + it("translates into turtle", async () => { + profile.name = "Captain of Coolness"; + expect(await toTurtle(profile)).toBe( + ' "Captain of Coolness" .\n', + ); + }); + + it("translates into n-triples", async () => { + profile.name = "Captain of Coolness"; + expect(await toNTriples(profile)).toBe( + ' "Captain of Coolness" .\n', + ); + }); + + it("uses the serialize method", async () => { + profile.name = "Captain of Coolness"; + expect(await serialize(profile, { format: "Turtle" })).toBe( + ' "Captain of Coolness" .\n', + ); + }); + + it.skip("translates into jsonld", async () => { + profile.name = "Captain of Coolness"; + expect(await toJsonLd(profile)).toEqual([ + { + "@id": "https://example.com/item", + "http://xmlns.com/foaf/0.1/name": "Captain of Coolness", + }, + ]); + }); + + it("errors when asked to convert to JsonLd", async () => { + await expect(async () => toJsonLd(profile)).rejects.toThrow( + "Not Implemented", + ); + }); + + it("returns the underlying dataset", () => { + const underlyingDataset = getDataset(profile); + expect(typeof underlyingDataset.add).toBe("function"); + }); + + it("sets a write graph", () => { + write("https://graphname.com").using(profile); + profile.name = "Jackson"; + expect(graphOf(profile, "name")[0].value).toBe("https://graphname.com"); + }); + + it("sets the language preferences", () => { + setLanguagePreferences("@none", "en").using(profile); + expect( + (profile as unknown as SubjectProxy)[_proxyContext].languageOrdering, + ).toEqual(["@none", "en"]); + }); + + it("uses languagesOf", () => { + const result = languagesOf(profile, "name"); + expect(result).toEqual({}); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/profileData.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/profileData.ts new file mode 100644 index 0000000..743143b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/profileData.ts @@ -0,0 +1,1111 @@ +import type { Schema } from "shexj"; +import type { ContextDefinition } from "jsonld"; +import type { LdSet, ShapeType } from "../src/index.js"; + +export const profileShex: Schema = { + type: "Schema", + shapes: [ + { + id: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://schema.org/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from Schema.org)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://xmlns.com/foaf/0.1/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from foaf)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#fn", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The formatted name of a person. Example: John Smith", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "An alternate way to define a person's name.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasAddress", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#AddressShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's street address.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasEmail", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#EmailShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasPhoto", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "A link to the person's photo", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/img", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Photo link but in string form", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasTelephone", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Person's telephone number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#phone", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "An alternative way to define a person's telephone number using a string", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#organization-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the organization with which the person is affiliated", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#role", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the person's role in their organization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#trustedApp", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of app origins that are trusted by this user", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#key", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of RSA public keys that are associated with private keys the user holds.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/ldp#inbox", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The user's LDP inbox to which apps can post notifications", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#preferencesFile", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's preferences", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#storage", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The location of a Solid storage server related to this WebId", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#account", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's account", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#privateTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for private access only)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#publicTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for public access)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/knows", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of WebIds for all the people this user knows.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#AddressShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#country-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The name of the user's country of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#locality", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's locality (City, Town etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#postal-code", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's postal code", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#region", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's region (State, Province etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#street-address", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's street address", + }, + }, + ], + }, + ], + }, + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#EmailShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The type of email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of an email as a mailto link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "They type of Phone Number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of a phone number as a tel link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#mode", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/ns/auth/acl#Append", + "http://www.w3.org/ns/auth/acl#Control", + "http://www.w3.org/ns/auth/acl#Read", + "http://www.w3.org/ns/auth/acl#Write", + ], + }, + min: 1, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The level of access provided to this origin", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#origin", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The app origin the user trusts", + }, + }, + ], + }, + ], + }, + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#modulus", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Modulus", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#exponent", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#integer", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Exponent", + }, + }, + ], + }, + ], + }, + }, + }, + ], +}; + +export const profileContext: ContextDefinition = { + countryName: { + "@id": "http://www.w3.org/2006/vcard/ns#country-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + locality: { + "@id": "http://www.w3.org/2006/vcard/ns#locality", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + postalCode: { + "@id": "http://www.w3.org/2006/vcard/ns#postal-code", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + region: { + "@id": "http://www.w3.org/2006/vcard/ns#region", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + streetAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#street-address", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + type: { + "@id": "@type", + "@container": "@set", + }, + Dom: "http://www.w3.org/2006/vcard/ns#Dom", + Home: "http://www.w3.org/2006/vcard/ns#Home", + ISDN: "http://www.w3.org/2006/vcard/ns#ISDN", + Internet: "http://www.w3.org/2006/vcard/ns#Internet", + Intl: "http://www.w3.org/2006/vcard/ns#Intl", + Label: "http://www.w3.org/2006/vcard/ns#Label", + Parcel: "http://www.w3.org/2006/vcard/ns#Parcel", + Postal: "http://www.w3.org/2006/vcard/ns#Postal", + Pref: "http://www.w3.org/2006/vcard/ns#Pref", + Work: "http://www.w3.org/2006/vcard/ns#Work", + X400: "http://www.w3.org/2006/vcard/ns#X400", + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@container": "@set", + }, + modulus: { + "@id": "http://www.w3.org/ns/auth/cert#modulus", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + exponent: { + "@id": "http://www.w3.org/ns/auth/cert#exponent", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + Person: "http://schema.org/Person", + Person2: "http://xmlns.com/foaf/0.1/Person", + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@container": "@set", + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@container": "@set", + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@container": "@set", + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@container": "@set", + }, + mode: { + "@id": "http://www.w3.org/ns/auth/acl#mode", + "@container": "@set", + }, + Append: "http://www.w3.org/ns/auth/acl#Append", + Control: "http://www.w3.org/ns/auth/acl#Control", + Read: "http://www.w3.org/ns/auth/acl#Read", + Write: "http://www.w3.org/ns/auth/acl#Write", + origin: { + "@id": "http://www.w3.org/ns/auth/acl#origin", + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@container": "@set", + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@container": "@set", + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@container": "@set", + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@container": "@set", + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@container": "@set", + }, +}; + +export interface AddressShape { + "@id"?: string; + "@context"?: ContextDefinition; + /** + * The name of the user's country of residence + */ + countryName?: string; + /**r + * The name of the user's locality (City, Town etc.) of residencer + */ + locality?: string; + /** + * The user's postal code + */ + postalCode?: string; + /** + * The name of the user's region (State, Province etc.) of residence + */ + region?: string; + /** + * The user's street address + */ + streetAddress?: string; +} + +export interface EmailShape { + "@id"?: string; + "@context"?: ContextDefinition; + /** + * The type of email. + */ + type?: + | { "@id": "Dom" } + | { "@id": "Home" } + | { "@id": "ISDN" } + | { "@id": "Internet" } + | { "@id": "Intl" } + | { "@id": "Label" } + | { "@id": "Parcel" } + | { "@id": "Postal" } + | { "@id": "Pref" } + | { "@id": "Work" } + | { "@id": "X400" }; + /** + * The value of an email as a mailto link (Example ) + */ + value: string; +} + +export interface PhoneNumberShape { + "@id"?: string; + "@context"?: ContextDefinition; + /** + * They type of Phone Number + */ + type?: + | { "@id": "Dom" } + | { "@id": "Home" } + | { "@id": "ISDN" } + | { "@id": "Internet" } + | { "@id": "Intl" } + | { "@id": "Label" } + | { "@id": "Parcel" } + | { "@id": "Postal" } + | { "@id": "Pref" } + | { "@id": "Work" } + | { "@id": "X400" }; + /** + * The value of a phone number as a tel link (Example ) + */ + value: string; +} + +export interface RSAPublicKeyShape { + "@id"?: string; + "@context"?: ContextDefinition; + /** + * RSA Modulus + */ + modulus: string; + /** + * RSA Exponent + */ + exponent: number; +} + +export interface SolidProfileShape { + "@id"?: string; + /** + * Defines the node as a Person (from Schema.org) | Defines the node as a Person (from foaf) + */ + type: LdSet<{ "@id": "Person" } | { "@id": "Person2" }>; + /** + * The formatted name of a person. Example: John Smith + */ + fn?: string; + /** + * An alternate way to define a person's name. + */ + name?: string; + /** + * The person's street address. + */ + hasAddress?: LdSet; + /** + * The person's email. + */ + hasEmail?: LdSet; + /** + * A link to the person's photo + */ + hasPhoto?: string; + /** + * Photo link but in string form + * + img?: string; + /** + * Person's telephone number + */ + hasTelephone?: LdSet; + /** + * An alternative way to define a person's telephone number using a string + */ + phone?: string; + /** + * The name of the organization with which the person is affiliated + */ + organizationName?: string; + /** + * The name of the person's role in their organization + */ + role?: string; + /** + * A list of app origins that are trusted by this user + */ + trustedApp?: LdSet; + /** + * A list of RSA public keys that are associated with private keys the user holds. + */ + key?: LdSet; + /** + * The user's LDP inbox to which apps can post notifications + */ + inbox: { "@id": string }; + /** + * The user's preferences + */ + preferencesFile?: string; + /** + * The location of a Solid storage server related to this WebId + */ + storage?: LdSet; + /** + * The user's account + */ + account?: string; + /** + * A registry of all types used on the user's Pod (for private access only) + */ + privateTypeIndex?: LdSet; + /** + * A registry of all types used on the user's Pod (for public access) + */ + publicTypeIndex?: LdSet; + /** + * A list of WebIds for all the people this user knows. + */ + knows?: LdSet; +} + +export interface TrustedAppShape { + "@id"?: string; + "@context"?: ContextDefinition; + /** + * The level of access provided to this origin + */ + mode: LdSet< + | { "@id": "Append" } + | { "@id": "Control" } + | { "@id": "Read" } + | { "@id": "Write" } + >; + /** + * The app origin the user trusts + */ + origin: string; +} + +export const ProfileShapeType: ShapeType = { + schema: profileShex, + shape: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + context: profileContext, +}; + +export const TrustedAppShapeType: ShapeType = { + schema: profileShex, + shape: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + context: profileContext, +}; + +export const AddressShapeType: ShapeType = { + schema: profileShex, + shape: "https://shaperepo.com/schemas/solidProfile#AddressShape", + context: profileContext, +}; + +export const EmailShapeType: ShapeType = { + schema: profileShex, + shape: "https://shaperepo.com/schemas/solidProfile#EmailShape", + context: profileContext, +}; + +export const PhoneNumberShapeType: ShapeType = { + schema: profileShex, + shape: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + context: profileContext, +}; + +export const RSAPublicKeyShapeType: ShapeType = { + schema: profileShex, + shape: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + context: profileContext, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/sampleData.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/sampleData.ts new file mode 100644 index 0000000..f457b07 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/test/sampleData.ts @@ -0,0 +1,16 @@ +export const sampleTurtle = ` + a ; + <#me>; + <#me>. + <#me> a ; + ; + "Jackson Morgan"; + <#id1651115504716>. + `; + +export const sampleJsonld = [ + { + "@id": "https://example.com/item", + "http://xmlns.com/foaf/0.1/name": [{ "@value": "Captain of Coolness" }], + }, +]; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/tsconfig.cjs.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/tsconfig.cjs.json new file mode 100644 index 0000000..affce40 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.cjs.json", + "compilerOptions": { + "outDir": "./dist/cjs", + "rootDir": "./src" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/tsconfig.esm.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/tsconfig.esm.json new file mode 100644 index 0000000..09f99c2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/tsconfig.esm.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "outDir": "./dist/esm", + "rootDir": "./src", + "declarationDir": "./dist/types" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/typedoc.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/typedoc.json new file mode 100644 index 0000000..57a416c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/ldo/typedoc.json @@ -0,0 +1,6 @@ +{ + "entryPoints": ["src/index.ts"], + "out": "docs", + "allReflectionsHaveOwnDocument": true, + "hideInPageTOC": true +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/Readme.md b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/Readme.md new file mode 100644 index 0000000..5bc9f96 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/Readme.md @@ -0,0 +1,12 @@ +# @ldo/rdf-utils + +Utilities for common use in LDO libraries. + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/jest.config.cjs b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/jest.config.cjs new file mode 100644 index 0000000..3ad2cee --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/jest.config.cjs @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +// packages/dataset/jest.config.cjs +const sharedConfig = require("../../jest.config.js"); + +module.exports = { + ...sharedConfig, + rootDir: "./", // Sets context for this package + collectCoverageFrom: [ + "src/**/*.ts", + "!src/**/*.d.ts", + // "!src/index.ts", // Optional, if index.ts only re-exports + ], + modulePathIgnorePatterns: ["/dist/"], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/package.json new file mode 100644 index 0000000..839226c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/package.json @@ -0,0 +1,55 @@ +{ + "name": "@ldo/rdf-utils", + "version": "1.0.0-alpha.30", + "description": "Some RDF Utilities to support LDO librariers", + "type": "module", + "main": "./dist/cjs/index.cjs", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.cjs" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "rimraf dist && npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --project tsconfig.cjs.json && node ../../scripts/rename-to-cjs.js", + "build:esm": "tsc --project tsconfig.esm.json", + "watch": "tsc --watch", + "test": "jest --coverage", + "test:watch": "jest --watch", + "prepublishOnly": " npm run build", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "remove-dist": "rimraf dist/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/rdf-utils#readme", + "devDependencies": { + "@rdfjs/types": "^1.0.1", + "@types/jsonld": "^1.5.9" + }, + "dependencies": { + "@rdfjs/data-model": "^1.2.0", + "n3": "^1.17.1", + "rdf-string": "^1.6.3" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "gitHead": "840910c56ec3f61416f031cc76771a5673af6757" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/datasetChanges.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/datasetChanges.ts new file mode 100644 index 0000000..6d60532 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/datasetChanges.ts @@ -0,0 +1,40 @@ +import type { BaseQuad, Dataset, Quad } from "@rdfjs/types"; +import { quad as createQuad } from "./rdfjsDataModel.js"; +import { datasetToString } from "./datasetConverters.js"; + +/** + * An interface representing the changes made + */ +export interface DatasetChanges { + added?: Dataset; + removed?: Dataset; +} + +/** + * Takes Dataset Changes and converts them to SPARQL UPDATE + * @param changes: Dataset Changes + * @returns String SPARQL Update + */ +export async function changesToSparqlUpdate(changes: DatasetChanges) { + let output = ""; + if (changes.removed) { + const removedTriples = changes.removed.map((quad) => + createQuad(quad.subject, quad.predicate, quad.object), + ); + output += `DELETE DATA { ${await datasetToString(removedTriples, { + format: "N-Triples", + })} }`; + } + if (changes.added && changes.removed) { + output += "; "; + } + if (changes.added) { + const addedTriples = changes.added.map((quad) => + createQuad(quad.subject, quad.predicate, quad.object), + ); + output += `INSERT DATA { ${await datasetToString(addedTriples, { + format: "N-Triples", + })} }`; + } + return output.replaceAll("\n", " "); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/datasetConverters.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/datasetConverters.ts new file mode 100644 index 0000000..54ebbee --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/datasetConverters.ts @@ -0,0 +1,55 @@ +import type { DatasetCore, Quad } from "@rdfjs/types"; +import type { ContextDefinition, JsonLdDocument } from "jsonld"; +import type { WriterOptions as WriterOptionsImport } from "n3"; +import { Writer } from "n3"; +// import SerializerJsonld from "@rdfjs/serializer-jsonld"; +// import { Readable } from "readable-stream"; + +export type WriterOptions = WriterOptionsImport; + +export function datasetToString( + dataset: DatasetCore, + options: WriterOptions, +): string { + const writer = new Writer(options); + const quadArr: Quad[] = []; + for (const quad of dataset) { + quadArr.push(quad); + } + return writer.quadsToString(quadArr); +} + +export async function datasetToJsonLd( + _dataset: DatasetCore, + _context: ContextDefinition, +): Promise { + throw new Error("JSONLD serialization is not omplemented"); +} + +// export async function datasetToJsonLd( +// dataset: Dataset, +// context: ContextDefinition +// ): Promise { +// return new Promise((resolve, reject) => { +// const serializerJsonld = new SerializerJsonld(); +// const input = new Readable({ +// objectMode: true, +// read: () => { +// dataset.forEach((quad) => { +// input.push(quad); +// }); +// input.push(null); +// }, +// }); +// const output = serializerJsonld.import(input); + +// output.on("data", (jsonld) => { +// resolve(jsonld); +// }); +// /* istanbul ignore next */ +// output.on("error", (err) => { +// /* istanbul ignore next */ +// reject(err); +// }); +// }); +// } diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/index.ts new file mode 100644 index 0000000..1841b12 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/index.ts @@ -0,0 +1,5 @@ +export * from "./nodeSerialization.js"; +export * from "./datasetChanges.js"; +export * from "./datasetConverters.js"; +export * from "./serializedToQuads.js"; +export * from "./rdfjsDataModel.js"; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/nodeSerialization.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/nodeSerialization.ts new file mode 100644 index 0000000..2d7140c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/nodeSerialization.ts @@ -0,0 +1,260 @@ +import type { + Quad, + Term, + BlankNode, + DefaultGraph, + Literal, + NamedNode, +} from "@rdfjs/types"; +import { + termToString, + quadToStringQuad, + stringToTerm, + stringQuadToQuad, +} from "rdf-string"; + +/** + * ============================================================================= + * Types + * ============================================================================= + */ + +/** + * Generic type to extract a set of termsTypes for a Term + */ +export type NodeTermTypes = Set; + +export type SubjectNode = NamedNode | BlankNode; +export const SubjectTermTypes: NodeTermTypes = new Set([ + "NamedNode", + "BlankNode", +]); +export type PredicateNode = NamedNode; +export const PredicateTermTypes: NodeTermTypes = new Set([ + "NamedNode", +]); +export type ObjectNode = NamedNode | BlankNode | Literal; +export const ObjectTermTypes: NodeTermTypes = new Set([ + "NamedNode", + "BlankNode", + "Literal", +]); +export type GraphNode = NamedNode | BlankNode | DefaultGraph; +export const GraphTermTypes: NodeTermTypes = new Set([ + "NamedNode", + "BlankNode", + "DefaultGraph", +]); +export type AnyNode = SubjectNode | PredicateNode | ObjectNode | GraphNode; +export const AnyTermTypes: NodeTermTypes = new Set([ + "NamedNode", + "BlankNode", + "DefaultGraph", + "Literal", +]); + +export interface SimpleQuad extends Quad { + /** + * The subject. + * @see GraphNode + */ + subject: SubjectNode; + /** + * The predicate. + * @see GraphNode + */ + predicate: PredicateNode; + /** + * The object. + * @see GraphNode + */ + object: ObjectNode; + /** + * The named graph. + * @see GraphNode + */ + graph: GraphNode; +} + +export type QuadMatch = [ + SubjectNode | undefined | null, + PredicateNode | undefined | null, + ObjectNode | undefined | null, + GraphNode | undefined | null, +]; + +/** + * ============================================================================= + * To String + * ============================================================================= + */ + +/** + * Converts a Subject Node to a String + * @param node Input Node + * @returns String Representation + */ +export function subjectNodeToString(node: SubjectNode) { + return nodeToString(node); +} + +/** + * Converts a Predicate Node to a String + * @param node Input Node + * @returns String Representation + */ +export function predicateNodeToString(node: PredicateNode) { + return nodeToString(node); +} + +/** + * Converts a Object Node to a String + * @param node Input Node + * @returns String Representation + */ +export function objectNodeToString(node: ObjectNode) { + return nodeToString(node); +} + +/** + * Converts a Graph Node to a String + * @param node Input Node + * @returns String Representation + */ +export function grpahNodeToString(node: GraphNode) { + return nodeToString(node); +} + +/** + * Converts a Any Node to a String + * @param node Input Node + * @returns String Representation + */ +export function nodeToString(node: AnyNode): string { + return termToString(node); +} + +/** + * Converts a Quad to a String + * @param node Input Quad + * @returns String Representation + */ +export function quadToString(quad: Quad): string { + return JSON.stringify(quadToStringQuad(quad)); +} + +/** + * Converts a Quad Match to a String + * @param node Input Quad + * @returns String Representation + */ +export function quadMatchToString(quadMatch: QuadMatch): string { + return JSON.stringify({ + subject: quadMatch[0] ? subjectNodeToString(quadMatch[0]) : undefined, + predicate: quadMatch[1] ? predicateNodeToString(quadMatch[1]) : undefined, + object: quadMatch[2] ? objectNodeToString(quadMatch[2]) : undefined, + graph: quadMatch[3] ? grpahNodeToString(quadMatch[3]) : undefined, + }); +} + +/** + * ============================================================================= + * From String + * ============================================================================= + */ + +/** + * Converts a String to a Subject Node + * @param input String Inupt + * @returns Node + */ +export function stringToSubjectNode(input: string): SubjectNode { + return stringToNode(input, SubjectTermTypes) as SubjectNode; +} + +/** + * Converts a String to a Predicate Node + * @param input String Inupt + * @returns Node + */ +export function stringToPredicateNode(input: string): PredicateNode { + return stringToNode(input, PredicateTermTypes) as PredicateNode; +} + +/** + * Converts a String to an Object Node + * @param input String Inupt + * @returns Node + */ +export function stringToObjectNode(input: string): ObjectNode { + return stringToNode(input, ObjectTermTypes) as ObjectNode; +} + +/** + * Converts a String to a Graph Node + * @param input String Inupt + * @returns Node + */ +export function stringToGraphNode(input: string): GraphNode { + return stringToNode(input, GraphTermTypes) as GraphNode; +} + +/** + * Converts a String to a Node + * @param input String Inupt + * @returns Node + */ +export function stringToNode( + input: string, + expectTermType?: NodeTermTypes, +): AnyNode { + const node = stringToTerm(input); + if (expectTermType && !expectTermType.has(node.termType)) { + throw new Error( + `Expected term to be one of term type: [${Array.from( + expectTermType, + ).reduce((agg, termType) => `${agg}${termType}, `, "")}], but got ${ + node.termType + }.`, + ); + } + return node as AnyNode; +} + +/** + * Converts a String to a Quad + * @param input String Inupt + * @returns Quad + */ +export function stringToQuad(input: string) { + try { + return stringQuadToQuad(JSON.parse(input)); + } catch (err) { + throw new Error("Invalid Quad String"); + } +} + +/** + * Converts a String to a Quad Match + * @param input String Inupt + * @returns QuadMatch + */ +export function stringToQuadMatch(input: string): QuadMatch { + try { + const jsonRep = JSON.parse(input); + return [ + jsonRep.subject != undefined + ? stringToSubjectNode(jsonRep.subject) + : undefined, + jsonRep.predicate != undefined + ? stringToPredicateNode(jsonRep.predicate) + : undefined, + jsonRep.object != undefined + ? stringToObjectNode(jsonRep.object) + : undefined, + jsonRep.graph != undefined ? stringToGraphNode(jsonRep.graph) : undefined, + ]; + } catch (err) { + throw new Error("Invalid Quad Match String"); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/rdfjsDataModel.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/rdfjsDataModel.ts new file mode 100644 index 0000000..3945aa1 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/rdfjsDataModel.ts @@ -0,0 +1,27 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +// src/utils/rdfjs-data-model-interop.ts +import * as rdfdmNamespace from "@rdfjs/data-model"; + +// The interop shim +let RdfDataModelResolved; +if ( + // @ts-ignore + rdfdmNamespace.default && + // @ts-ignore + typeof rdfdmNamespace.default.namedNode === "function" +) { + // @ts-ignore + RdfDataModelResolved = rdfdmNamespace.default; +} else { + RdfDataModelResolved = rdfdmNamespace; +} + +export const quad: (typeof rdfdmNamespace)["quad"] = RdfDataModelResolved.quad; +export const namedNode: (typeof rdfdmNamespace)["namedNode"] = + RdfDataModelResolved.namedNode; +export const blankNode: (typeof rdfdmNamespace)["blankNode"] = + RdfDataModelResolved.blankNode; +export const literal: (typeof rdfdmNamespace)["literal"] = + RdfDataModelResolved.literal; +export const defaultGraph: (typeof rdfdmNamespace)["defaultGraph"] = + RdfDataModelResolved.defaultGraph; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/serializedToQuads.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/serializedToQuads.ts new file mode 100644 index 0000000..8230967 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/src/serializedToQuads.ts @@ -0,0 +1,43 @@ +import type { Quad } from "@rdfjs/types"; +import type { ParserOptions as ParserOptionsImport } from "n3"; +import { Parser } from "n3"; + +export type ParserOptions = ParserOptionsImport; + +export async function serializedToQuads( + data: string, + options?: ParserOptions, +): Promise { + // JSON-LD Parsing + if (options && options.format === "application/ld+json") { + throw new Error("Not Implemented"); + // return new Promise((resolve, reject) => { + // JSON.parse(data); + // const parserJsonld = new ParserJsonld(); + + // const input = new Readable({ + // read: () => { + // input.push(data); + // input.push(null); + // }, + // }); + + // const output = parserJsonld.import(input); + // const quads: Quad[] = []; + // output.on("data", (quad) => { + // quads.push(quad); + // }); + // output.on("end", () => { + // resolve((datasetFactory.dataset(quads) as unknown) as ReturnDataset); + // }); + // /* istanbul ignore next */ + // output.on("error", (err) => { + // /* istanbul ignore next */ + // reject(err); + // }); + // }); + } + // N3 Parsing + const parser = new Parser(options as ParserOptions); + return parser.parse(data); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/test/trivial.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/test/trivial.test.ts new file mode 100644 index 0000000..ea2c1cd --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/test/trivial.test.ts @@ -0,0 +1,5 @@ +describe("trivial", () => { + it("trivial", () => { + expect(true).toBe(true); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/tsconfig.cjs.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/tsconfig.cjs.json new file mode 100644 index 0000000..affce40 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.cjs.json", + "compilerOptions": { + "outDir": "./dist/cjs", + "rootDir": "./src" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/tsconfig.esm.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/tsconfig.esm.json new file mode 100644 index 0000000..09f99c2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/rdf-utils/tsconfig.esm.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "outDir": "./dist/esm", + "rootDir": "./src", + "declarationDir": "./dist/types" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/.gitignore b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/.gitignore new file mode 100644 index 0000000..0c32b1f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/.gitignore @@ -0,0 +1 @@ +test/test-server/data \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/README.md b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/README.md new file mode 100644 index 0000000..36c6c65 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/README.md @@ -0,0 +1,139 @@ +# @ldo/react + +`@ldo/react` provides tool and hooks for easily building Solid applications using react. + +## Guide + +A full walkthrough for using the `@ldo/solid` library can be found in the [For Solid + React Guide](https://ldo.js.org/latest/guides/solid_react/) + +## Installation + +Navigate into your project's root folder and run the following command: +``` +cd my_project/ +npx run @ldo/cli init +``` + +Now install the @ldo/solid library + +``` +npm i @ldo/solid @ldo/react +``` + +
+ +Manual Installation + + +If you already have generated ShapeTypes, you may install the `@ldo/ldo` and `@ldo/solid` libraries independently. + +``` +npm i @ldo/ldo @ldo/solid @ldo/react +``` +
+ +## Simple Example + +Below is a simple example of @ldo/react in a real use-case. Assume that a ShapeType was previously generated and placed at `./.ldo/solidProfile.shapeTypess`. + + +```typescript +import type { FunctionComponent } from "react"; +import React, { useCallback } from "react"; +import { + BrowserSolidLdoProvider, + useResource, + useSolidAuth, + useSubject, +} from "@ldo/react"; +import { SolidProfileShapeShapeType } from "./.ldo/solidProfile.shapeTypes.js"; +import { changeData, commitData } from "@ldo/solid"; + +// The base component for the app +const App: FunctionComponent = () => { + return ( + /* The application should be surrounded with the BrowserSolidLdoProvider + this will set up all the underlying infrastructure for the application */ + + + + ); +}; + +// A component that handles login +const Login: FunctionComponent = () => { + // Get login information using the "useSolidAuth" hook + const { login, logout, session } = useSolidAuth(); + + const onLogin = useCallback(() => { + const issuer = prompt("What is your Solid IDP?"); + // Call the "login" function to initiate login + if (issuer) login(issuer); + }, []); + + // You can use session.isLoggedIn to check if the user is logged in + if (session.isLoggedIn) { + return ( +
+ {/* Get the user's webId from session.webId */} +

Logged in as {session.webId}

+ {/* Use the logout function to log out */} + + +
+ ); + } + return ; +}; + +// Renders the name on the profile +const Profile: FunctionComponent = () => { + const { session } = useSolidAuth(); + // With useResource, you can automatically fetch a resource + const resource = useResource(session.webId); + // With useSubject, you can extract data from that resource + const profile = useSubject(SolidProfileShapeShapeType, session.webId); + + const onNameChange = useCallback(async (e) => { + // Ensure that the + if (!profile || !resource) return; + // Change data lets you create a new object to make changes to + const cProfile = changeData(profile, resource); + // Change the name + cProfile.name = e.target.value; + // Commit the data back to the Pod + await commitData(cProfile); + }, []); + + return ; +}; + +export default App; +``` + +## API Details + +Providers + + - [BrowserSolidLdoProvider](https://ldo.js.org/latest/api/react/BrowserSolidLdoProvider/) + - [SolidLdoProvider](https://ldo.js.org/latest/api/react/SolidLdoProvider/) + +Hooks + - [useLdo](https://ldo.js.org/latest/api/react/useLdo/) + - [useResource](https://ldo.js.org/latest/api/react/useResource/) + - [useRootContainer](https://ldo.js.org/latest/api/react/useRootContainer/) + - [useSolidAuth](https://ldo.js.org/latest/api/react/useSolidAuth/) + - [useSubject](https://ldo.js.org/latest/api/react/useSubject/) + - [useMatchSubject](https://ldo.js.org/latest/api/react/useMatchSubject/) + - [useMatchObject](https://ldo.js.org/latest/api/react/useMatchSubject/) + - [useSubscribeToResource](https://ldo.js.org/latest/api/react/useMatchSubject/) + - [useLinkQuery](https://ldo.js.org/latest/api/react/useLinkQuery/) + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/package.json new file mode 100644 index 0000000..50a6a9c --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/package.json @@ -0,0 +1,61 @@ +{ + "name": "@ldo/react", + "version": "1.0.0-alpha.33", + "description": "A React library for LDO.", + "type": "module", + "main": "./dist/cjs/index.cjs", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.cjs" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "rimraf dist && npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --project tsconfig.cjs.json && node ../../scripts/rename-to-cjs.js", + "build:esm": "tsc --project tsconfig.esm.json", + "test": "vitest run --coverage", + "prepublishOnly": " npm run build", + "build:ldo": "ldo build --input src/shapes --output src/ldo", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "remove-dist": "rimraf dist/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "Jackson Morgan", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/solid-react#readme", + "devDependencies": { + "@rdfjs/types": "^1.0.1", + "@testing-library/jest-dom": "^6.7.0", + "@testing-library/react": "^14.3.1", + "@testing-library/user-event": "^14.6.1", + "jsdom": "^26.1.0", + "vitest": "^3.2.4" + }, + "dependencies": { + "@ldo/connected": "^1.0.0-alpha.32", + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.32", + "@ldo/ldo": "^1.0.0-alpha.32", + "@ldo/rdf-utils": "^1.0.0-alpha.30", + "@ldo/subscribable-dataset": "^1.0.0-alpha.32", + "cross-fetch": "^3.1.6" + }, + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "gitHead": "840910c56ec3f61416f031cc76771a5673af6757" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/createLdoReactMethods.tsx b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/createLdoReactMethods.tsx new file mode 100644 index 0000000..689ba33 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/createLdoReactMethods.tsx @@ -0,0 +1,91 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { createUseLdo } from "./methods/useLdo.js"; +import { + createConnectedLdoDataset, + type ConnectedPlugin, +} from "@ldo/connected"; +import { createUseMatchObject } from "./methods/useMatchObject.js"; +import { createUseMatchSubject } from "./methods/useMatchSubject.js"; +import { createUseResource } from "./methods/useResource.js"; +import { createUseSubject } from "./methods/useSubject.js"; +import { createUseSubscribeToResource } from "./methods/useSubscribeToResource.js"; +import { createUseLinkQuery } from "./methods/useLinkQuery.js"; +import { createUseDataset } from "./methods/useDataset.js"; +import { createUseChangeDataset } from "./methods/change/useChangeDataset.js"; +import { createUseChangeSubject } from "./methods/change/useChangeSubject.js"; +import { createUseChangeMatchObject } from "./methods/change/useChangeMatchObject.js"; +import { createUseChangeMatchSubject } from "./methods/change/useChangeMatchSubject.js"; + +/** + * A function that creates all common react functions given specific plugin. + * + * @example + * `methods.ts` + * ```tyepscript + * import { solidConnectedPlugin } from "@ldo/connected-solid"; + * import { nextGraphConnectedPlugin } from "@ldo/connected-nextgraph"; + * import { createLdoReactMethods } from "@ldo/react"; + * + * // Export the results to be used in the reset of the application + * export const { + * dataset, + * useLdo, + * useMatchObject, + * useMatchSubject, + * useResource, + * useSubject, + * useSubscribeToResource, + * useLinkQuery, + * useChangeDataset, + * useChangeSubject, + * useChangeMatchObject, + * useChangeMatchSubject, + * } = createLdoReactMethods([ + * solidConnectedPlugin, + * nextGraphConnectedPlugin + * ]); + * ``` + * + * `App.tsx` + * ```typescript + * import react, { FunctionComponent } from "react"; + * import { PostShShapeType } from "./.ldo/posts.shapeType.ts"; + * import { useResource, useSubject } from "./methods.ts"; + * + * const UseSubjectTest: FunctionComponent = () => { + * const resource = useResource(SAMPLE_DATA_URI); + * const post = useSubject(PostShShapeType, `${SAMPLE_DATA_URI}#Post1`); + * if (resource.isLoading() || !post) return

loading

; + * + * return ( + *
    + * {post.publisher.map((publisher) => { + * return
  • {publisher["@id"]}
  • ; + * })} + *
+ * ); + * }; + * ``` + */ +export function createLdoReactMethods< + Plugins extends ConnectedPlugin[], +>(plugins: Plugins) { + const dataset = createConnectedLdoDataset(plugins); + dataset.setMaxListeners(1000); + + return { + dataset, + useDataset: createUseDataset(dataset), + useLdo: createUseLdo(dataset), + useMatchObject: createUseMatchObject(dataset), + useMatchSubject: createUseMatchSubject(dataset), + useResource: createUseResource(dataset), + useSubject: createUseSubject(dataset), + useSubscribeToResource: createUseSubscribeToResource(dataset), + useLinkQuery: createUseLinkQuery(dataset), + useChangeDataset: createUseChangeDataset(dataset), + useChangeSubject: createUseChangeSubject(dataset), + useChangeMatchObject: createUseChangeMatchObject(dataset), + useChangeMatchSubject: createUseChangeMatchSubject(dataset), + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/index.ts new file mode 100644 index 0000000..34544e4 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/index.ts @@ -0,0 +1,16 @@ +export * from "./createLdoReactMethods.js"; + +export * from "./methods/useLdo.js"; +export * from "./methods/useMatchObject.js"; +export * from "./methods/useMatchSubject.js"; +export * from "./methods/useResource.js"; +export * from "./methods/useSubject.js"; +export * from "./methods/useSubscribeToResource.js"; +export * from "./methods/useLinkQuery.js"; +export * from "./methods/change/types.js"; +export * from "./methods/change/useChangeDataset.js"; +export * from "./methods/change/useChangeMatchObject.js"; +export * from "./methods/change/useChangeMatchSubject.js"; +export * from "./methods/change/useChangeSubject.js"; + +export * from "./util/useTrackingProxy.js"; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/types.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/types.ts new file mode 100644 index 0000000..5719939 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/types.ts @@ -0,0 +1,25 @@ +import type { + ConnectedLdoTransactionDataset, + ConnectedPlugin, +} from "@ldo/connected"; +import type { LdoBase, LdSet } from "@ldo/ldo"; + +export type useChangeReturn = [ + Type, + useChangeSetData, + useChangeCommitData, + transactionDataset: ConnectedLdoTransactionDataset, +]; + +type BaseOtherType = LdoBase | LdSet; + +export type useChangeSetData = < + OtherType extends BaseOtherType | undefined = undefined, +>( + resource: Plugins[number]["types"]["resource"], + changer: (toChange: OtherType extends undefined ? Type : OtherType) => void, + input?: OtherType, +) => void; + +export type useChangeCommitData = + () => ReturnType["commitToRemote"]>; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeDataset.ts new file mode 100644 index 0000000..e0c806b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeDataset.ts @@ -0,0 +1,78 @@ +import { useCallback, useMemo, useState, useEffect } from "react"; +import type { + ConnectedLdoDataset, + ConnectedLdoTransactionDataset, + ConnectedPlugin, + IConnectedLdoDataset, +} from "@ldo/connected"; +import type { useChangeCommitData } from "./types.js"; + +export type useChangeDatasetReturn = [ + ConnectedLdoTransactionDataset, + useChangeSetDataset, + useChangeCommitData, +]; + +export type useChangeSetDataset = ( + changer: (toChange: ConnectedLdoTransactionDataset) => void, +) => void; + +/** + * @internal + * + * Creates a useChangeDataset function + */ +export function createUseChangeDataset( + dataset: ConnectedLdoDataset, +) { + /** + * Returns a transaction on the dataset that can be modified and committed + */ + return function useChangeDataset( + specificDataset?: IConnectedLdoDataset, + ): useChangeDatasetReturn { + const [transactionDataset, setTransactionDataset] = useState< + ConnectedLdoTransactionDataset + >(() => { + return ( + specificDataset ?? dataset + ).startTransaction() as ConnectedLdoTransactionDataset; + }); + + // Update transaction dataset when specificDataset changes + useEffect(() => { + setTransactionDataset( + ( + specificDataset ?? dataset + ).startTransaction() as ConnectedLdoTransactionDataset, + ); + }, [specificDataset]); + + const setData = useCallback>( + (changer) => { + const subTransaction = transactionDataset.startTransaction(); + changer(subTransaction); + subTransaction.commit(); + }, + [transactionDataset], + ); + + const commitData = useCallback>(async () => { + const result = await transactionDataset.commitToRemote(); + if (!result.isError) { + // Replace with a new transaction from the dataset or specificDataset + setTransactionDataset( + ( + specificDataset ?? dataset + ).startTransaction() as ConnectedLdoTransactionDataset, + ); + } + return result; + }, [transactionDataset, specificDataset]); + + return useMemo( + () => [transactionDataset, setData, commitData], + [transactionDataset, setData, commitData], + ); + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeMatchObject.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeMatchObject.ts new file mode 100644 index 0000000..79381d8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeMatchObject.ts @@ -0,0 +1,66 @@ +import { useCallback, useMemo } from "react"; +import type { ConnectedLdoDataset, ConnectedPlugin } from "@ldo/connected"; +import { createUseChangeDataset } from "./useChangeDataset.js"; +import { write, type LdoBase, type LdSet, type ShapeType } from "@ldo/ldo"; +import type { QuadMatch } from "@ldo/rdf-utils"; +import type { UseMatchObjectOptions } from "../useMatchObject.js"; +import { createUseMatchObject } from "../useMatchObject.js"; +import type { useChangeReturn, useChangeSetData } from "./types.js"; +import { createProxyInteractOptions } from "@ldo/jsonld-dataset-proxy"; + +/** + * @internal + * + * Creates a useChangeMatchObject function + */ +export function createUseChangeMatchObject( + dataset: ConnectedLdoDataset, +) { + const useChangeDataset = createUseChangeDataset(dataset); + const useMatchObject = createUseMatchObject(dataset); + + /** + * Returns a list of matched objects that can be modified and committed + */ + return function useChangeMatchObject( + shapeType: ShapeType, + subject?: QuadMatch[0] | string, + predicate?: QuadMatch[1] | string, + graph?: QuadMatch[3] | string, + options?: UseMatchObjectOptions, + ): useChangeReturn, Plugins> { + const [transactionDataset, setDataset, commitData] = useChangeDataset( + options?.dataset, + ); + + const ldObject = useMatchObject(shapeType, subject, predicate, graph, { + dataset: transactionDataset, + }); + + const setData = useCallback>( + (writeResource, changer, otherType?) => { + setDataset((dataset) => { + const ldObject = otherType + ? write(writeResource.uri).usingCopy( + createProxyInteractOptions("dataset", dataset).usingCopy( + otherType, + )[0], + )[0] + : dataset + .usingType(shapeType) + .write(writeResource.uri) + .matchObject(subject, predicate, graph); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + changer(ldObject); + }); + }, + [setDataset, subject, predicate, graph, shapeType], + ); + + return useMemo( + () => [ldObject, setData, commitData, transactionDataset], + [ldObject, setData, commitData, transactionDataset], + ); + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeMatchSubject.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeMatchSubject.ts new file mode 100644 index 0000000..0addb67 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeMatchSubject.ts @@ -0,0 +1,68 @@ +import { useCallback, useMemo } from "react"; +import type { ConnectedLdoDataset, ConnectedPlugin } from "@ldo/connected"; +import { createUseChangeDataset } from "./useChangeDataset.js"; +import { write, type LdoBase, type LdSet, type ShapeType } from "@ldo/ldo"; +import type { QuadMatch } from "@ldo/rdf-utils"; +import type { useChangeReturn, useChangeSetData } from "./types.js"; +import { + createUseMatchSubject, + type UseMatchSubjectOptions, +} from "../useMatchSubject.js"; +import { createProxyInteractOptions } from "@ldo/jsonld-dataset-proxy"; + +/** + * @internal + * + * Creates a useChangeMatchSubject function + */ +export function createUseChangeMatchSubject( + dataset: ConnectedLdoDataset, +) { + const useChangeDataset = createUseChangeDataset(dataset); + const useMatchSubject = createUseMatchSubject(dataset); + + /** + * Returns a list of matched subjects that can be modified and committed + */ + return function useChangeMatchSubject( + shapeType: ShapeType, + predicate?: QuadMatch[1] | string, + object?: QuadMatch[2] | string, + graph?: QuadMatch[3] | string, + options?: UseMatchSubjectOptions, + ): useChangeReturn, Plugins> { + const [transactionDataset, setDataset, commitData] = useChangeDataset( + options?.dataset, + ); + + const ldObject = useMatchSubject(shapeType, predicate, object, graph, { + dataset: transactionDataset, + }); + + const setData = useCallback>( + (writeResource, changer, otherType?) => { + setDataset((dataset) => { + const ldObject = otherType + ? write(writeResource.uri).usingCopy( + createProxyInteractOptions("dataset", dataset).usingCopy( + otherType, + )[0], + )[0] + : dataset + .usingType(shapeType) + .write(writeResource.uri) + .matchSubject(predicate, object, graph); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + changer(ldObject); + }); + }, + [setDataset, predicate, object, graph, shapeType], + ); + + return useMemo( + () => [ldObject, setData, commitData, transactionDataset], + [ldObject, setData, commitData, transactionDataset], + ); + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeSubject.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeSubject.ts new file mode 100644 index 0000000..8c8f40b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/change/useChangeSubject.ts @@ -0,0 +1,83 @@ +import { useCallback, useMemo } from "react"; +import type { ConnectedLdoDataset, ConnectedPlugin } from "@ldo/connected"; +import { createUseChangeDataset } from "./useChangeDataset.js"; +import type { UseSubjectOptions } from "../useSubject.js"; +import { createUseSubject } from "../useSubject.js"; +import { write, type LdoBase, type ShapeType } from "@ldo/ldo"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import type { useChangeReturn, useChangeSetData } from "./types.js"; +import { createProxyInteractOptions } from "@ldo/jsonld-dataset-proxy"; + +export type useChangeSubjectType = { + ( + shapeType: ShapeType, + subject: string | SubjectNode, + options?: UseSubjectOptions, + ): useChangeReturn; + ( + shapeType: ShapeType, + subject?: string | SubjectNode, + options?: UseSubjectOptions, + ): useChangeReturn; + ( + shapeType: ShapeType, + subject?: string | SubjectNode, + options?: UseSubjectOptions, + ): useChangeReturn; +}; + +/** + * @internal + * + * Creates a useChangeSubject function + */ +export function createUseChangeSubject( + dataset: ConnectedLdoDataset, +): useChangeSubjectType { + const useChangeDataset = createUseChangeDataset(dataset); + const useSubject = createUseSubject(dataset); + + /** + * Returns a subject that can be modified and committed + */ + return function useChangeSubject( + shapeType: ShapeType, + subject?: string | SubjectNode, + options?: UseSubjectOptions, + ): useChangeReturn { + const [transactionDataset, setDataset, commitData] = useChangeDataset( + options?.dataset, + ); + + const ldObject = useSubject(shapeType, subject, { + dataset: transactionDataset, + }); + + const setData = useCallback>( + (writeResource, changer, otherType?) => { + if (!subject) return; + setDataset((dataset) => { + const ldObject = otherType + ? write(writeResource.uri).usingCopy( + createProxyInteractOptions("dataset", dataset).usingCopy( + otherType, + )[0], + )[0] + : dataset + .usingType(shapeType) + .write(writeResource.uri) + .fromSubject(subject); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + changer(ldObject); + }); + }, + [setDataset, subject, shapeType], + ); + + return useMemo( + () => [ldObject, setData, commitData, transactionDataset], + [ldObject, setData, commitData, transactionDataset], + ); + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useDataset.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useDataset.ts new file mode 100644 index 0000000..70207bf --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useDataset.ts @@ -0,0 +1,17 @@ +import { ConnectedLdoDataset, ConnectedPlugin } from "@ldo/connected"; + +/** + * @internal + * + * Creates a useDataset function + */ +export function createUseDataset( + dataset: ConnectedLdoDataset, +) { + /** + * Returns the global dataset for the application + */ + return function useDataset() { + return dataset; + } +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useLdo.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useLdo.ts new file mode 100644 index 0000000..de31a3f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useLdo.ts @@ -0,0 +1,146 @@ +import { + changeData, + type ConnectedLdoDataset, + type ConnectedLdoTransactionDataset, + type ConnectedPlugin, +} from "@ldo/connected"; +import { getDataset, type LdoBase, type ShapeType } from "@ldo/ldo"; +import type { SubjectNode } from "@ldo/rdf-utils"; + +/** + * The methods returned by useLdo + */ +export interface UseLdoMethods { + /** + * A ConnectedLdoDataset + */ + dataset: ConnectedLdoDataset; + /** + * Retireves a representation of a Resource at the given URI. This resource + * represents the current state of the resource: whether it is currently + * fetched or in the process of fetching as well as some information about it. + * + * @param uri - the URI of the resource + * @param pluginName - optionally, force this function to choose a specific + * plugin to use rather than perform content negotiation. + * + * @returns a Resource + */ + getResource: ConnectedLdoDataset["getResource"]; + /** + * Sets conetext for a specific plugin + * + * @param pluginName - the name of the plugin + * @param context - the context for this specific plugin + */ + setContext: ConnectedLdoDataset["setContext"]; + /** + * Gets a linked data object based on the subject + */ + getSubject( + shapeType: ShapeType, + subject: string | SubjectNode, + ): Type; + /** + * Shorthand for connectedLdoDataset + * .usingType(shapeType) + * .write(...resources.map((r) => r.uri)) + * .fromSubject(subject); + * @param shapeType - The shapetype to represent the data + * @param subject - A subject URI + * @param resources - The resources changes to should written to + */ + createData( + shapeType: ShapeType, + subject: string | SubjectNode, + resource: Plugins[number]["types"]["resource"], + ...additionalResources: Plugins[number]["types"]["resource"][] + ): Type; + /** + * Returns a writable LinkedDataObject given a linked data object + */ + changeData( + input: Type, + resource: Plugins[number]["types"]["resource"], + ...additionalResources: Plugins[number]["types"]["resource"][] + ): Type; + /** + * Commits the data of a writable Linke Data Object back to the remote. + */ + commitData( + input: LdoBase, + ): ReturnType["commitToRemote"]>; +} + +/** + * @internal + * Creates the useLdoHook + */ +export function createUseLdo( + dataset: ConnectedLdoDataset, +) { + const toReturn = { + dataset, + /** + * Gets a resource + */ + getResource: dataset.getResource.bind(dataset), + /** + * Set the context + */ + setContext: dataset.setContext.bind(dataset), + /** + * Returns a Linked Data Object for a subject + * @param shapeType The shape type for the data + * @param subject Subject Node + * @returns A Linked Data Object + */ + getSubject( + shapeType: ShapeType, + subject: string | SubjectNode, + ): Type { + return dataset.usingType(shapeType).fromSubject(subject); + }, + /** + * Begins tracking changes to eventually commit for a new subject + * @param shapeType The shape type that defines the created data + * @param subject The RDF subject for a Linked Data Object + * @param resources Any number of resources to which this data should be written + * @returns A Linked Data Object to modify and commit + */ + createData( + shapeType: ShapeType, + subject: string | SubjectNode, + resource: Plugins[number]["types"]["resource"], + ...additionalResources: Plugins[number]["types"]["resource"][] + ): Type { + return dataset.createData( + shapeType, + subject, + resource, + ...additionalResources, + ); + }, + /** + * Begins tracking changes to eventually commit + * @param input A linked data object to track changes on + * @param resources + */ + changeData: changeData, + /** + * Commits the transaction to the global dataset, syncing all subscribing + * components and Solid Pods + */ + commitData( + input: LdoBase, + ): ReturnType["commitToRemote"]> { + const inputDataset = getDataset( + input, + ) as ConnectedLdoTransactionDataset; + return inputDataset.commitToRemote(); + }, + }; + return function useLdo(): UseLdoMethods { + return toReturn; + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useLinkQuery.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useLinkQuery.ts new file mode 100644 index 0000000..c98e464 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useLinkQuery.ts @@ -0,0 +1,72 @@ +import type { + ConnectedLdoDataset, + ConnectedPlugin, + ExpandDeep, + LQInput, + LQReturn, + ResourceLinkQuery, +} from "@ldo/connected"; +import type { LdoBase, LdoBuilder, ShapeType } from "@ldo/ldo"; +import type { SubjectNode } from "@ldo/rdf-utils"; +import { useCallback, useEffect, useRef, useState } from "react"; +import { useTrackingProxy } from "../util/useTrackingProxy.js"; + +/** + * @internal + * + * Creates a useMatchSubject function. + */ +export function createUseLinkQuery( + dataset: ConnectedLdoDataset, +) { + /** + * Returns an array of matching linked data objects. Triggers a rerender if + * the data is updated. + */ + return function useQueryLink< + Type extends LdoBase, + QueryInput extends LQInput, + >( + shapeType: ShapeType, + startingResource: string, + startingSubject: SubjectNode | string, + linkQuery: QueryInput, + ): ExpandDeep> | undefined { + const linkQueryRef = useRef< + ResourceLinkQuery | undefined + >(); + + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + if (linkQueryRef.current) { + linkQueryRef.current.unsubscribeAll(); + } + const resource = dataset.getResource(startingResource); + setIsLoading(true); + linkQueryRef.current = dataset + .usingType(shapeType) + .startLinkQuery(resource, startingSubject, linkQuery); + + linkQueryRef.current.subscribe().then(() => setIsLoading(false)); + + return () => { + linkQueryRef.current?.unsubscribeAll(); + }; + }, [shapeType, startingResource, startingSubject, linkQuery]); + + const fromSubject = useCallback( + (builder: LdoBuilder) => { + if (!startingSubject) return; + return builder.fromSubject(startingSubject); + }, + [startingSubject], + ); + + const linkedDataObject = useTrackingProxy(shapeType, fromSubject, dataset); + + return isLoading + ? undefined + : (linkedDataObject as unknown as ExpandDeep>); + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useMatchObject.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useMatchObject.ts new file mode 100644 index 0000000..abc00e5 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useMatchObject.ts @@ -0,0 +1,48 @@ +import type { LdoBase, LdSet, ShapeType } from "@ldo/ldo"; +import type { QuadMatch } from "@ldo/rdf-utils"; +import type { LdoBuilder } from "@ldo/ldo"; +import { useCallback } from "react"; +import { useTrackingProxy } from "../util/useTrackingProxy.js"; +import type { + ConnectedLdoDataset, + ConnectedPlugin, + IConnectedLdoDataset, +} from "@ldo/connected"; + +export interface UseMatchObjectOptions { + dataset?: IConnectedLdoDataset; +} + +/** + * @internal + * + * Creates a useMatchObject function + */ +export function createUseMatchObject( + dataset: ConnectedLdoDataset, +) { + /** + * Returns an array of matching items and triggers a rerender when that data + * is updated. + */ + return function useMatchObject( + shapeType: ShapeType, + subject?: QuadMatch[0] | string, + predicate?: QuadMatch[1] | string, + graph?: QuadMatch[3] | string, + options?: UseMatchObjectOptions, + ): LdSet { + const matchObject = useCallback( + (builder: LdoBuilder) => { + return builder.matchObject(subject, predicate, graph); + }, + [subject, predicate, graph], + ); + + return useTrackingProxy( + shapeType, + matchObject, + options?.dataset ?? dataset, + ); + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useMatchSubject.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useMatchSubject.ts new file mode 100644 index 0000000..127012d --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useMatchSubject.ts @@ -0,0 +1,48 @@ +import type { LdoBase, LdSet, ShapeType } from "@ldo/ldo"; +import type { QuadMatch } from "@ldo/rdf-utils"; +import type { LdoBuilder } from "@ldo/ldo"; +import { useCallback } from "react"; +import { useTrackingProxy } from "../util/useTrackingProxy.js"; +import type { + ConnectedLdoDataset, + ConnectedPlugin, + IConnectedLdoDataset, +} from "@ldo/connected"; + +export interface UseMatchSubjectOptions { + dataset?: IConnectedLdoDataset; +} + +/** + * @internal + * + * Creates a useMatchSubject function. + */ +export function createUseMatchSubject( + dataset: ConnectedLdoDataset, +) { + /** + * Returns an array of matching linked data objects. Triggers a rerender if + * the data is updated. + */ + return function useMatchSubject( + shapeType: ShapeType, + predicate?: QuadMatch[1] | string, + object?: QuadMatch[2] | string, + graph?: QuadMatch[3] | string, + options?: UseMatchSubjectOptions, + ): LdSet { + const matchSubject = useCallback( + (builder: LdoBuilder) => { + return builder.matchSubject(predicate, object, graph); + }, + [predicate, object, graph], + ); + + return useTrackingProxy( + shapeType, + matchSubject, + options?.dataset ?? dataset, + ); + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useResource.ts new file mode 100644 index 0000000..d17420d --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useResource.ts @@ -0,0 +1,130 @@ +import { useMemo, useEffect, useRef, useState, useCallback } from "react"; +import type { + ConnectedLdoDataset, + ConnectedPlugin, + GetResourceReturnType, + Resource, +} from "@ldo/connected"; + +export interface UseResourceOptions { + pluginName?: Name; + suppressInitialRead?: boolean; + reloadOnMount?: boolean; + subscribe?: boolean; +} + +export type useResourceType = { + < + Name extends Plugins[number]["name"], + Plugin extends Extract, + UriType extends string, + >( + uri: UriType, + options?: UseResourceOptions, + ): GetResourceReturnType; + < + Name extends Plugins[number]["name"], + Plugin extends Extract, + UriType extends string, + >( + uri?: UriType, + options?: UseResourceOptions, + ): GetResourceReturnType | undefined; +}; + +/** + * @internal + * + * Creates a useResource function. + */ +export function createUseResource( + dataset: ConnectedLdoDataset, +): useResourceType { + /** + * Returns a resource and triggers a rerender if that resource is updated. + */ + return function useResource< + Name extends Plugins[number]["name"], + Plugin extends Extract, + UriType extends string, + >( + uri?: UriType, + options?: UseResourceOptions, + ): GetResourceReturnType | undefined { + const subscriptionIdRef = useRef(); + + // Get the resource + const resource = useMemo(() => { + if (uri) { + const resource = dataset.getResource(uri); + // Run read operations if necissary + if (!options?.suppressInitialRead) { + if (options?.reloadOnMount) { + resource.read(); + } else { + resource.readIfUnfetched(); + } + } + return resource; + } + return undefined; + }, [uri]); + const [resourceRepresentation, setResourceRepresentation] = + useState(resource); + const pastResource = useRef< + { resource?: Resource; callback: () => void } | undefined + >(); + + useEffect(() => { + if (options?.subscribe) { + resource + ?.subscribeToNotifications() + .then( + (subscriptionId) => (subscriptionIdRef.current = subscriptionId), + ); + } else if (subscriptionIdRef.current) { + resource?.unsubscribeFromNotifications(subscriptionIdRef.current); + } + return () => { + if (subscriptionIdRef.current) + resource?.unsubscribeFromNotifications(subscriptionIdRef.current); + }; + }, [resource, options?.subscribe]); + + // Callback function to force the react dom to reload. + const forceReload = useCallback( + // Wrap the resource in a proxy so it's techically a different object + () => { + if (resource) setResourceRepresentation(new Proxy(resource, {})); + }, + [resource], + ); + + useEffect(() => { + // Remove listeners for the previous resource + if (pastResource.current?.resource) { + pastResource.current.resource.off( + "update", + pastResource.current.callback, + ); + } + // Set a new past resource to the current resource + pastResource.current = { resource, callback: forceReload }; + if (resource) { + // Add listener + resource.on("update", forceReload); + setResourceRepresentation(new Proxy(resource, {})); + + // Unsubscribe on unmount + return () => { + resource.off("update", forceReload); + }; + } else { + setResourceRepresentation(undefined); + } + }, [resource]); + return resourceRepresentation as + | GetResourceReturnType + | undefined; + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useSubject.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useSubject.ts new file mode 100644 index 0000000..e198b03 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useSubject.ts @@ -0,0 +1,67 @@ +import type { SubjectNode } from "@ldo/rdf-utils"; +import type { ShapeType } from "@ldo/ldo"; +import type { LdoBuilder } from "@ldo/ldo"; +import type { LdoBase } from "@ldo/ldo"; +import { useCallback } from "react"; + +import { useTrackingProxy } from "../util/useTrackingProxy.js"; +import type { + ConnectedLdoDataset, + ConnectedPlugin, + IConnectedLdoDataset, +} from "@ldo/connected"; + +export interface UseSubjectOptions { + dataset?: IConnectedLdoDataset; +} + +export type useSubjectType = { + ( + shapeType: ShapeType, + subject: string | SubjectNode, + options?: UseSubjectOptions, + ): Type; + ( + shapeType: ShapeType, + subject?: string | SubjectNode, + options?: UseSubjectOptions, + ): Type | undefined; + ( + shapeType: ShapeType, + subject?: string | SubjectNode, + options?: UseSubjectOptions, + ): Type | undefined; +}; + +/** + * @internal + * + * Creates a useSubject function. + */ +export function createUseSubject( + dataset: ConnectedLdoDataset, +): useSubjectType { + /** + * Returns a Linked Data Object based on the provided subject. Triggers a + * rerender if the data is udpated. + */ + return function useSubject( + shapeType: ShapeType, + subject?: string | SubjectNode, + options?: UseSubjectOptions, + ): Type | undefined { + const fromSubject = useCallback( + (builder: LdoBuilder) => { + if (!subject) return; + return builder.fromSubject(subject); + }, + [subject], + ); + + return useTrackingProxy( + shapeType, + fromSubject, + options?.dataset ?? dataset, + ); + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useSubscribeToResource.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useSubscribeToResource.ts new file mode 100644 index 0000000..f2af1ca --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/methods/useSubscribeToResource.ts @@ -0,0 +1,63 @@ +import { useEffect, useRef } from "react"; +import type { ConnectedLdoDataset, ConnectedPlugin } from "@ldo/connected"; + +/** + * @internal + * + * Creates a useSubscribeToResource function. + */ +export function createUseSubscribeToResource( + dataset: ConnectedLdoDataset, +) { + /** + * Starts a subscription to a resource. + */ + return function useSubscribeToResource(...uris: string[]): void { + const currentlySubscribed = useRef>({}); + useEffect(() => { + const resources = uris.map((uri) => dataset.getResource(uri)); + const previousSubscriptions = { ...currentlySubscribed.current }; + Promise.all( + resources.map(async (resource) => { + if (!previousSubscriptions[resource.uri]) { + // Prevent multiple triggers from created subscriptions while waiting + // for connection + currentlySubscribed.current[resource.uri] = "AWAITING"; + // Read and subscribe + await resource.readIfUnfetched(); + currentlySubscribed.current[resource.uri] = + await resource.subscribeToNotifications(); + } else { + delete previousSubscriptions[resource.uri]; + } + }), + ).then(async () => { + // Unsubscribe from all remaining previous subscriptions + await Promise.all( + Object.entries(previousSubscriptions).map( + async ([resourceUri, subscriptionId]) => { + // Unsubscribe + delete currentlySubscribed.current[resourceUri]; + const resource = dataset.getResource(resourceUri); + await resource.unsubscribeFromNotifications(subscriptionId); + }, + ), + ); + }); + }, [uris]); + + // Cleanup Subscriptions + useEffect(() => { + return () => { + Promise.all( + Object.entries(currentlySubscribed.current).map( + async ([resourceUri, subscriptionId]) => { + const resource = dataset.getResource(resourceUri); + await resource.unsubscribeFromNotifications(subscriptionId); + }, + ), + ); + }; + }, []); + }; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/util/useTrackingProxy.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/util/useTrackingProxy.ts new file mode 100644 index 0000000..d0c993a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/src/util/useTrackingProxy.ts @@ -0,0 +1,38 @@ +import type { LdoBuilder } from "@ldo/ldo"; +import type { LdoBase, LdoDataset, ShapeType } from "@ldo/ldo"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { createTrackingProxyBuilder } from "@ldo/connected"; + +/** + * @internal + * + * A hook for tracking proxies + */ +export function useTrackingProxy( + shapeType: ShapeType, + createLdo: (builder: LdoBuilder) => ReturnType, + dataset: LdoDataset, +): ReturnType { + const [forceUpdateCounter, setForceUpdateCounter] = useState(0); + const forceUpdate = useCallback( + () => setForceUpdateCounter((val) => val + 1), + [], + ); + + // The main linked data object + const linkedDataObject = useMemo(() => { + // Remove all current subscriptions + dataset.removeListenerFromAllEvents(forceUpdate); + const builder = createTrackingProxyBuilder(dataset, shapeType, forceUpdate); + return createLdo(builder); + }, [shapeType, dataset, forceUpdateCounter, forceUpdate, createLdo]); + + useEffect(() => { + // Unregister force update listener upon unmount + return () => { + dataset.removeListenerFromAllEvents(forceUpdate); + }; + }, [shapeType]); + + return linkedDataObject; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.context.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.context.ts new file mode 100644 index 0000000..5cb3a91 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.context.ts @@ -0,0 +1,32 @@ +import { ContextDefinition } from "jsonld"; + +/** + * ============================================================================= + * postContext: JSONLD Context for post + * ============================================================================= + */ +export const postContext: ContextDefinition = { + type: { + "@id": "@type", + }, + SocialMediaPosting: "http://schema.org/SocialMediaPosting", + CreativeWork: "http://schema.org/CreativeWork", + Thing: "http://schema.org/Thing", + articleBody: { + "@id": "http://schema.org/articleBody", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + uploadDate: { + "@id": "http://schema.org/uploadDate", + "@type": "http://www.w3.org/2001/XMLSchema#date", + }, + image: { + "@id": "http://schema.org/image", + "@type": "@id", + }, + publisher: { + "@id": "http://schema.org/publisher", + "@type": "@id", + "@container": "@set", + }, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.schema.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.schema.ts new file mode 100644 index 0000000..39e8b63 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.schema.ts @@ -0,0 +1,155 @@ +import { Schema } from "shexj"; + +/** + * ============================================================================= + * postSchema: ShexJ Schema for post + * ============================================================================= + */ +export const postSchema: Schema = { + type: "Schema", + shapes: [ + { + id: "https://example.com/PostSh", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://schema.org/SocialMediaPosting", + "http://schema.org/CreativeWork", + "http://schema.org/Thing", + ], + }, + }, + { + type: "TripleConstraint", + predicate: "http://schema.org/articleBody", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + object: { + value: "articleBody", + }, + }, + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The actual body of the article. ", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://schema.org/uploadDate", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#date", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + object: { + value: "uploadDate", + }, + }, + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "Date when this media object was uploaded to this site.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://schema.org/image", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + object: { + value: "image", + }, + }, + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A media object that encodes this CreativeWork. This property is a synonym for encoding.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://schema.org/publisher", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + object: { + value: "publisher", + }, + }, + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The publisher of the creative work.", + }, + }, + ], + }, + ], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#label", + object: { + value: "SocialMediaPost", + }, + }, + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A post to a social media platform, including blog posts, tweets, Facebook posts, etc.", + }, + }, + ], + }, + }, + ], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.shapeTypes.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.shapeTypes.ts new file mode 100644 index 0000000..aa112e7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.shapeTypes.ts @@ -0,0 +1,19 @@ +import { ShapeType } from "@ldo/ldo"; +import { postSchema } from "./post.schema.js"; +import { postContext } from "./post.context.js"; +import { PostSh } from "./post.typings.js"; + +/** + * ============================================================================= + * LDO ShapeTypes post + * ============================================================================= + */ + +/** + * PostSh ShapeType + */ +export const PostShShapeType: ShapeType = { + schema: postSchema, + shape: "https://example.com/PostSh", + context: postContext, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.typings.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.typings.ts new file mode 100644 index 0000000..bf9ac17 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/post.typings.ts @@ -0,0 +1,45 @@ +import { LdSet, LdoJsonldContext } from "@ldo/ldo"; + +/** + * ============================================================================= + * Typescript Typings for post + * ============================================================================= + */ + +/** + * PostSh Type + */ +export interface PostSh { + "@id"?: string; + "@context"?: LdoJsonldContext; + type: + | { + "@id": "SocialMediaPosting"; + } + | { + "@id": "CreativeWork"; + } + | { + "@id": "Thing"; + }; + /** + * The actual body of the article. + */ + articleBody?: string; + /** + * Date when this media object was uploaded to this site. + */ + uploadDate: string; + /** + * A media object that encodes this CreativeWork. This property is a synonym for encoding. + */ + image?: { + "@id": string; + }; + /** + * The publisher of the creative work. + */ + publisher: LdSet<{ + "@id": string; + }>; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.context.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.context.ts new file mode 100644 index 0000000..9fdffc3 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.context.ts @@ -0,0 +1,459 @@ +import { LdoJsonldContext } from "@ldo/ldo"; + +/** + * ============================================================================= + * solidProfileContext: JSONLD Context for solidProfile + * ============================================================================= + */ +export const solidProfileContext: LdoJsonldContext = { + type: { + "@id": "@type", + }, + Person: { + "@id": "http://schema.org/Person", + "@context": { + type: { + "@id": "@type", + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Person2: { + "@id": "http://xmlns.com/foaf/0.1/Person", + "@context": { + type: { + "@id": "@type", + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + fn: { + "@id": "http://www.w3.org/2006/vcard/ns#fn", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "http://xmlns.com/foaf/0.1/name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#hasAddress", + "@type": "@id", + "@isCollection": true, + }, + countryName: { + "@id": "http://www.w3.org/2006/vcard/ns#country-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + locality: { + "@id": "http://www.w3.org/2006/vcard/ns#locality", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + postalCode: { + "@id": "http://www.w3.org/2006/vcard/ns#postal-code", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + region: { + "@id": "http://www.w3.org/2006/vcard/ns#region", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + streetAddress: { + "@id": "http://www.w3.org/2006/vcard/ns#street-address", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasEmail: { + "@id": "http://www.w3.org/2006/vcard/ns#hasEmail", + "@type": "@id", + "@isCollection": true, + }, + Dom: { + "@id": "http://www.w3.org/2006/vcard/ns#Dom", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Home: { + "@id": "http://www.w3.org/2006/vcard/ns#Home", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + ISDN: { + "@id": "http://www.w3.org/2006/vcard/ns#ISDN", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Internet: { + "@id": "http://www.w3.org/2006/vcard/ns#Internet", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Intl: { + "@id": "http://www.w3.org/2006/vcard/ns#Intl", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Label: { + "@id": "http://www.w3.org/2006/vcard/ns#Label", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Parcel: { + "@id": "http://www.w3.org/2006/vcard/ns#Parcel", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Postal: { + "@id": "http://www.w3.org/2006/vcard/ns#Postal", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Pref: { + "@id": "http://www.w3.org/2006/vcard/ns#Pref", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + Work: { + "@id": "http://www.w3.org/2006/vcard/ns#Work", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + X400: { + "@id": "http://www.w3.org/2006/vcard/ns#X400", + "@context": { + type: { + "@id": "@type", + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + }, + }, + value: { + "@id": "http://www.w3.org/2006/vcard/ns#value", + "@type": "@id", + }, + hasPhoto: { + "@id": "http://www.w3.org/2006/vcard/ns#hasPhoto", + "@type": "@id", + }, + img: { + "@id": "http://xmlns.com/foaf/0.1/img", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + hasTelephone: { + "@id": "http://www.w3.org/2006/vcard/ns#hasTelephone", + "@type": "@id", + "@isCollection": true, + }, + phone: { + "@id": "http://www.w3.org/2006/vcard/ns#phone", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + organizationName: { + "@id": "http://www.w3.org/2006/vcard/ns#organization-name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + role: { + "@id": "http://www.w3.org/2006/vcard/ns#role", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + trustedApp: { + "@id": "http://www.w3.org/ns/auth/acl#trustedApp", + "@type": "@id", + "@isCollection": true, + }, + mode: { + "@id": "http://www.w3.org/ns/auth/acl#mode", + "@isCollection": true, + }, + Append: "http://www.w3.org/ns/auth/acl#Append", + Control: "http://www.w3.org/ns/auth/acl#Control", + Read: "http://www.w3.org/ns/auth/acl#Read", + Write: "http://www.w3.org/ns/auth/acl#Write", + origin: { + "@id": "http://www.w3.org/ns/auth/acl#origin", + "@type": "@id", + }, + key: { + "@id": "http://www.w3.org/ns/auth/cert#key", + "@type": "@id", + "@isCollection": true, + }, + modulus: { + "@id": "http://www.w3.org/ns/auth/cert#modulus", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + exponent: { + "@id": "http://www.w3.org/ns/auth/cert#exponent", + "@type": "http://www.w3.org/2001/XMLSchema#integer", + }, + inbox: { + "@id": "http://www.w3.org/ns/ldp#inbox", + "@type": "@id", + }, + preferencesFile: { + "@id": "http://www.w3.org/ns/pim/space#preferencesFile", + "@type": "@id", + }, + storage: { + "@id": "http://www.w3.org/ns/pim/space#storage", + "@type": "@id", + "@isCollection": true, + }, + account: { + "@id": "http://www.w3.org/ns/solid/terms#account", + "@type": "@id", + }, + privateTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#privateTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + publicTypeIndex: { + "@id": "http://www.w3.org/ns/solid/terms#publicTypeIndex", + "@type": "@id", + "@isCollection": true, + }, + knows: { + "@id": "http://xmlns.com/foaf/0.1/knows", + "@type": "@id", + "@isCollection": true, + }, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.schema.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.schema.ts new file mode 100644 index 0000000..69466fc --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.schema.ts @@ -0,0 +1,749 @@ +import { Schema } from "shexj"; + +/** + * ============================================================================= + * solidProfileSchema: ShexJ Schema for solidProfile + * ============================================================================= + */ +export const solidProfileSchema: Schema = { + type: "Schema", + shapes: [ + { + id: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://schema.org/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from Schema.org)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: ["http://xmlns.com/foaf/0.1/Person"], + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Defines the node as a Person (from foaf)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#fn", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The formatted name of a person. Example: John Smith", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "An alternate way to define a person's name.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasAddress", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#AddressShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's street address.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasEmail", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#EmailShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The person's email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasPhoto", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "A link to the person's photo", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/img", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Photo link but in string form", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#hasTelephone", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "Person's telephone number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#phone", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "An alternative way to define a person's telephone number using a string", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#organization-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the organization with which the person is affiliated", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#role", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the person's role in their organization", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#trustedApp", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of app origins that are trusted by this user", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#key", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of RSA public keys that are associated with private keys the user holds.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/ldp#inbox", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The user's LDP inbox to which apps can post notifications", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#preferencesFile", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's preferences", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/pim/space#storage", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The location of a Solid storage server related to this WebId", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#account", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's account", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#privateTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for private access only)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/solid/terms#publicTypeIndex", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A registry of all types used on the user's Pod (for public access)", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/knows", + valueExpr: + "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + min: 0, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "A list of WebIds for all the people this user knows.", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#AddressShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#country-name", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The name of the user's country of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#locality", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's locality (City, Town etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#postal-code", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's postal code", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#region", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The name of the user's region (State, Province etc.) of residence", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#street-address", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The user's street address", + }, + }, + ], + }, + ], + }, + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#EmailShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The type of email.", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of an email as a mailto link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/2006/vcard/ns#Dom", + "http://www.w3.org/2006/vcard/ns#Home", + "http://www.w3.org/2006/vcard/ns#ISDN", + "http://www.w3.org/2006/vcard/ns#Internet", + "http://www.w3.org/2006/vcard/ns#Intl", + "http://www.w3.org/2006/vcard/ns#Label", + "http://www.w3.org/2006/vcard/ns#Parcel", + "http://www.w3.org/2006/vcard/ns#Postal", + "http://www.w3.org/2006/vcard/ns#Pref", + "http://www.w3.org/2006/vcard/ns#Work", + "http://www.w3.org/2006/vcard/ns#X400", + ], + }, + min: 0, + max: 1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "They type of Phone Number", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/2006/vcard/ns#value", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: + "The value of a phone number as a tel link (Example )", + }, + }, + ], + }, + ], + }, + extra: ["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"], + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#mode", + valueExpr: { + type: "NodeConstraint", + values: [ + "http://www.w3.org/ns/auth/acl#Append", + "http://www.w3.org/ns/auth/acl#Control", + "http://www.w3.org/ns/auth/acl#Read", + "http://www.w3.org/ns/auth/acl#Write", + ], + }, + min: 1, + max: -1, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The level of access provided to this origin", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/acl#origin", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "The app origin the user trusts", + }, + }, + ], + }, + ], + }, + }, + }, + { + id: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + type: "ShapeDecl", + shapeExpr: { + type: "Shape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#modulus", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Modulus", + }, + }, + ], + }, + { + type: "TripleConstraint", + predicate: "http://www.w3.org/ns/auth/cert#exponent", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#integer", + }, + annotations: [ + { + type: "Annotation", + predicate: "http://www.w3.org/2000/01/rdf-schema#comment", + object: { + value: "RSA Exponent", + }, + }, + ], + }, + ], + }, + }, + }, + ], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.shapeTypes.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.shapeTypes.ts new file mode 100644 index 0000000..2265cce --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.shapeTypes.ts @@ -0,0 +1,64 @@ +import { ShapeType } from "@ldo/ldo"; +import { solidProfileSchema } from "./solidProfile.schema.js"; +import { solidProfileContext } from "./solidProfile.context.js"; +import { AddressShape, EmailShape, PhoneNumberShape, RSAPublicKeyShape, SolidProfileShape, TrustedAppShape } from "./solidProfile.typings.js"; + +/** + * ============================================================================= + * LDO ShapeTypes solidProfile + * ============================================================================= + */ + +/** + * SolidProfileShape ShapeType + */ +export const SolidProfileShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#SolidProfileShape", + context: solidProfileContext, +}; + +/** + * AddressShape ShapeType + */ +export const AddressShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#AddressShape", + context: solidProfileContext, +}; + +/** + * EmailShape ShapeType + */ +export const EmailShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#EmailShape", + context: solidProfileContext, +}; + +/** + * PhoneNumberShape ShapeType + */ +export const PhoneNumberShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#PhoneNumberShape", + context: solidProfileContext, +}; + +/** + * TrustedAppShape ShapeType + */ +export const TrustedAppShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#TrustedAppShape", + context: solidProfileContext, +}; + +/** + * RSAPublicKeyShape ShapeType + */ +export const RSAPublicKeyShapeShapeType: ShapeType = { + schema: solidProfileSchema, + shape: "https://shaperepo.com/schemas/solidProfile#RSAPublicKeyShape", + context: solidProfileContext, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.typings.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.typings.ts new file mode 100644 index 0000000..95dbaef --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/.ldo/solidProfile.typings.ts @@ -0,0 +1,293 @@ +import { LdoJsonldContext, LdSet } from "@ldo/ldo"; + +/** + * ============================================================================= + * Typescript Typings for solidProfile + * ============================================================================= + */ + +/** + * SolidProfileShape Type + */ +export interface SolidProfileShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * Defines the node as a Person (from Schema.org) | Defines the node as a Person (from foaf) + */ + type: LdSet< + | { + "@id": "Person"; + } + | { + "@id": "Person2"; + } + >; + /** + * The formatted name of a person. Example: John Smith + */ + fn?: string; + /** + * An alternate way to define a person's name. + */ + name?: string; + /** + * The person's street address. + */ + hasAddress?: LdSet; + /** + * The person's email. + */ + hasEmail?: LdSet; + /** + * A link to the person's photo + */ + hasPhoto?: { + "@id": string; + }; + /** + * Photo link but in string form + */ + img?: string; + /** + * Person's telephone number + */ + hasTelephone?: LdSet; + /** + * An alternative way to define a person's telephone number using a string + */ + phone?: string; + /** + * The name of the organization with which the person is affiliated + */ + organizationName?: string; + /** + * The name of the person's role in their organization + */ + role?: string; + /** + * A list of app origins that are trusted by this user + */ + trustedApp?: LdSet; + /** + * A list of RSA public keys that are associated with private keys the user holds. + */ + key?: LdSet; + /** + * The user's LDP inbox to which apps can post notifications + */ + inbox: { + "@id": string; + }; + /** + * The user's preferences + */ + preferencesFile?: { + "@id": string; + }; + /** + * The location of a Solid storage server related to this WebId + */ + storage?: LdSet<{ + "@id": string; + }>; + /** + * The user's account + */ + account?: { + "@id": string; + }; + /** + * A registry of all types used on the user's Pod (for private access only) + */ + privateTypeIndex?: LdSet<{ + "@id": string; + }>; + /** + * A registry of all types used on the user's Pod (for public access) + */ + publicTypeIndex?: LdSet<{ + "@id": string; + }>; + /** + * A list of WebIds for all the people this user knows. + */ + knows?: LdSet; +} + +/** + * AddressShape Type + */ +export interface AddressShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The name of the user's country of residence + */ + countryName?: string; + /** + * The name of the user's locality (City, Town etc.) of residence + */ + locality?: string; + /** + * The user's postal code + */ + postalCode?: string; + /** + * The name of the user's region (State, Province etc.) of residence + */ + region?: string; + /** + * The user's street address + */ + streetAddress?: string; +} + +/** + * EmailShape Type + */ +export interface EmailShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The type of email. + */ + type?: + | { + "@id": "Dom"; + } + | { + "@id": "Home"; + } + | { + "@id": "ISDN"; + } + | { + "@id": "Internet"; + } + | { + "@id": "Intl"; + } + | { + "@id": "Label"; + } + | { + "@id": "Parcel"; + } + | { + "@id": "Postal"; + } + | { + "@id": "Pref"; + } + | { + "@id": "Work"; + } + | { + "@id": "X400"; + }; + /** + * The value of an email as a mailto link (Example ) + */ + value: { + "@id": string; + }; +} + +/** + * PhoneNumberShape Type + */ +export interface PhoneNumberShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * They type of Phone Number + */ + type?: + | { + "@id": "Dom"; + } + | { + "@id": "Home"; + } + | { + "@id": "ISDN"; + } + | { + "@id": "Internet"; + } + | { + "@id": "Intl"; + } + | { + "@id": "Label"; + } + | { + "@id": "Parcel"; + } + | { + "@id": "Postal"; + } + | { + "@id": "Pref"; + } + | { + "@id": "Work"; + } + | { + "@id": "X400"; + }; + /** + * The value of a phone number as a tel link (Example ) + */ + value: { + "@id": string; + }; +} + +/** + * TrustedAppShape Type + */ +export interface TrustedAppShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * The level of access provided to this origin + */ + mode: LdSet< + | { + "@id": "Append"; + } + | { + "@id": "Control"; + } + | { + "@id": "Read"; + } + | { + "@id": "Write"; + } + >; + /** + * The app origin the user trusts + */ + origin: { + "@id": string; + }; +} + +/** + * RSAPublicKeyShape Type + */ +export interface RSAPublicKeyShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + /** + * RSA Modulus + */ + modulus: string; + /** + * RSA Exponent + */ + exponent: number; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/mockLdoMethods.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/mockLdoMethods.ts new file mode 100644 index 0000000..1677b96 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/mockLdoMethods.ts @@ -0,0 +1,17 @@ +import { createLdoReactMethods } from "../src/createLdoReactMethods.js"; +import { mockConnectedPlugin } from "../../connected/test/mocks/MockConnectedPlugin.js"; + +export const { + dataset, + useLdo, + useMatchObject, + useMatchSubject, + useResource, + useSubject, + useSubscribeToResource, + useLinkQuery, + useChangeDataset, + useChangeSubject, + useChangeMatchSubject, + useChangeMatchObject, +} = createLdoReactMethods([mockConnectedPlugin]); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/useLdoForm.test.tsx b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/useLdoForm.test.tsx new file mode 100644 index 0000000..87fbea7 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/test/useLdoForm.test.tsx @@ -0,0 +1,242 @@ +// useChangeSubject.spec.tsx +/// +import { useResource, useChangeSubject, useSubject } from "./mockLdoMethods.js"; +import type { FunctionComponent } from "react"; +import React, { useState } from "react"; +import { describe, it, expect, beforeEach } from "vitest"; +import { render, screen, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { SolidProfileShapeShapeType } from "./.ldo/solidProfile.shapeTypes.js"; +import { set } from "@ldo/jsonld-dataset-proxy"; +import "@testing-library/jest-dom/vitest"; + +/** + * Test component: deterministic friend IDs (Example1, Example2, ...), + * accessible labels, and committed data shown via useSubject. + */ +const FormTest: FunctionComponent = () => { + const randomResource = useResource("http://example.com/resource.ttl"); + const submittedData = useSubject(SolidProfileShapeShapeType, "Example0"); + + const [count, setCount] = useState(1); + + const [data, setData, commitData] = useChangeSubject( + SolidProfileShapeShapeType, + "Example0", + ); + + return ( +
+

Form

+ +
{ + e.preventDefault(); + await commitData(); + }} + > + {/* Primary name field */} + { + setData(randomResource, (profile) => { + profile.fn = e.target.value; + }); + }} + /> + + {/* Friends */} + {data?.knows?.map((person) => ( +
+

{person["@id"]}

+ + setData( + randomResource, + (p) => { + p.fn = e.target.value; + }, + person, + ) + } + /> + +
+ ))} + + + + +
+ +
+ + {/* Committed view */} +

Submitted Data

+
+

Name: {submittedData?.fn ?? ""}

+
    + {submittedData?.knows?.map((person) => ( +
  • + Id: {person["@id"]} Name: {person.fn} +
  • + ))} +
+
+
+ ); +}; + +/** + * Spec: drives the UI as requested. + */ +describe("useChangeSubject", () => { + let user: ReturnType; + + beforeEach(() => { + user = userEvent.setup(); + }); + + it("handles typing, list add/remove, and commit cycles", async () => { + render(); + + // 1) Type "Example0" into the Name field, assert after each keystroke + const nameInput = screen.getByRole("textbox", { name: "Name" }); + const targetName = "Example0"; + let progressive = ""; + for (const c of targetName) { + progressive += c; + await user.type(nameInput, c); + expect(nameInput).toHaveValue(progressive); + } + + // Submitted is blank so far + const submittedSection = screen.getByRole("region", { + name: /submitted data/i, + }); + const submittedName = + within(submittedSection).getByTestId("submitted-name"); + const submittedList = + within(submittedSection).getByTestId("submitted-list"); + expect(submittedName).toHaveTextContent("Name:"); + expect(within(submittedList).queryAllByRole("listitem")).toHaveLength(0); + + // 2) Add two friends -> Example1, Example2 + const addFriendBtn = screen.getByRole("button", { name: /add friend/i }); + await user.click(addFriendBtn); + await user.click(addFriendBtn); + + const friend1 = screen.getByTestId("friend-Example1"); + const friend2 = screen.getByTestId("friend-Example2"); + expect(within(friend1).getByText("Example1")).toBeInTheDocument(); + expect(within(friend2).getByText("Example2")).toBeInTheDocument(); + + // 3) Type friend names with per-keystroke assertions + const friend1Input = within(friend1).getByRole("textbox", { + name: "Friend name for Example1", + }); + const friend2Input = within(friend2).getByRole("textbox", { + name: "Friend name for Example2", + }); + + const friend1Name = "Example1"; + const friend2Name = "Example2"; + + let p = ""; + for (const c of friend1Name) { + p += c; + await user.type(friend1Input, c); + expect(friend1Input).toHaveValue(p); + } + + p = ""; + for (const c of friend2Name) { + p += c; + await user.type(friend2Input, c); + expect(friend2Input).toHaveValue(p); + } + + // Still nothing committed + expect(submittedName).toHaveTextContent("Name:"); + expect(within(submittedList).queryAllByRole("listitem")).toHaveLength(0); + + // 4) Remove Example2 + await user.click( + within(friend2).getByRole("button", { name: /remove friend/i }), + ); + expect(screen.queryByTestId("friend-Example2")).not.toBeInTheDocument(); + + // 5) Submit -> committed data reflects Example0 + Example1 only + await user.click(screen.getByRole("button", { name: /Submit/i })); + + // Form retained its values + expect(nameInput).toHaveValue("Example0"); + expect(friend1Input).toHaveValue("Example1"); + expect(screen.queryByTestId("friend-Example2")).not.toBeInTheDocument(); + + // Wait for the submitted data to appear in the document before asserting + const submittedSection2 = screen.getByRole("region", { + name: /submitted data/i, + }); + const submittedName2 = + within(submittedSection2).getByTestId("submitted-name"); + + // Use `findByText` from the `within` helper to wait for the change + await within(submittedSection2).findByText("Name: Example0"); + + // Now that we've successfully waited, we can safely make our assertions + expect(submittedName2).toHaveTextContent("Name: Example0"); + const itemsAfterSubmit = within(submittedList).getAllByRole("listitem"); + expect(itemsAfterSubmit).toHaveLength(1); + expect(itemsAfterSubmit[0]).toHaveTextContent( + "Id: Example1 Name: Example1", + ); + + // 6) Change name and resubmit + await user.clear(nameInput); + const newName = "anotherExample0"; + let q = ""; + for (const c of newName) { + q += c; + await user.type(nameInput, c); + expect(nameInput).toHaveValue(q); + } + await user.click(screen.getByRole("button", { name: /submit/i })); + + expect(submittedName).toHaveTextContent(`Name: ${newName}`); + const itemsAfterSecondSubmit = + within(submittedList).getAllByRole("listitem"); + expect(itemsAfterSecondSubmit).toHaveLength(1); + expect(itemsAfterSecondSubmit[0]).toHaveTextContent( + "Id: Example1 Name: Example1", + ); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/tsconfig.cjs.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/tsconfig.cjs.json new file mode 100644 index 0000000..affce40 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.cjs.json", + "compilerOptions": { + "outDir": "./dist/cjs", + "rootDir": "./src" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/tsconfig.esm.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/tsconfig.esm.json new file mode 100644 index 0000000..09f99c2 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/tsconfig.esm.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.esm.json", + "compilerOptions": { + "outDir": "./dist/esm", + "rootDir": "./src", + "declarationDir": "./dist/types" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/react/vitest.config.js b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/vitest.config.js new file mode 100644 index 0000000..5d263c8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/react/vitest.config.js @@ -0,0 +1,12 @@ +import { defineConfig } from "vitest/config"; +import react from "@vitejs/plugin-react"; + +export default defineConfig({ + plugins: [react()], + test: { + coverage: { + provider: "istanbul", + }, + environment: "jsdom", + }, +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/.eslintrc b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/.eslintrc new file mode 100644 index 0000000..83c51a9 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/LICENSE.txt b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/LICENSE.txt new file mode 100644 index 0000000..b87e67e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jackson Morgan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/README.md b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/README.md new file mode 100644 index 0000000..b4db894 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/README.md @@ -0,0 +1,123 @@ +# ShexJ 2 Type and Context + +Turn ShexJ into typescript typings and JSON-LD context. + +## Installation +```bash +npm i @ldo/schema-converter-shex +``` + +## Usage + +```typescript +import { Schema } from "shexj"; +import shexjToTypeAndContext from "@ldo/schema-converter-shex"; + +async function run() { + /** + * Sample ShexJ. Equivalent to: + * + * { # An has: + * foaf:givenName xsd:string+, # at least one givenName. + * foaf:familyName xsd:string, # one familyName. + * foaf:phone IRI*, # any number of phone numbers. + * foaf:mbox IRI # one FOAF mbox. + * } + */ + const sampleShexj: Schema = { + type: "Schema", + shapes: [ + { + type: "Shape", + id: "http://shex.io/webapps/shex.js/doc/EmployeeShape", + expression: { + type: "EachOf", + expressions: [ + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/givenName", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + min: 1, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/familyName", + valueExpr: { + type: "NodeConstraint", + datatype: "http://www.w3.org/2001/XMLSchema#string", + }, + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/phone", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + min: 0, + max: -1, + }, + { + type: "TripleConstraint", + predicate: "http://xmlns.com/foaf/0.1/mbox", + valueExpr: { + type: "NodeConstraint", + nodeKind: "iri", + }, + }, + ], + }, + }, + ], + "@context": "http://www.w3.org/ns/shex.jsonld", + }; + + const [typings, context] = await shexjToTypeAndContext(sampleShexj); + + /* + Logs: + import { LdoJsonldContext, LdSet } from "@ldo/ldo"; + + interface EmployeeShape { + "@id"?: string; + "@context"?: LdoJsonldContext; + givenName: LdSet; + familyName: string; + phone?: LdSet; + mbox: string; + } + */ + console.log(typings.typingsString); + /* + Logs: + { + givenName: { + '@id': 'http://xmlns.com/foaf/0.1/givenName', + '@type': 'http://www.w3.org/2001/XMLSchema#string', + '@container': '@set' + }, + familyName: { + '@id': 'http://xmlns.com/foaf/0.1/familyName', + '@type': 'http://www.w3.org/2001/XMLSchema#string' + }, + phone: { '@id': 'http://xmlns.com/foaf/0.1/phone', '@container': '@set' }, + mbox: { '@id': 'http://xmlns.com/foaf/0.1/mbox' } + } + */ + console.log(context); +} +run(); +``` + +## Sponsorship +This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/). + +[nlnet foundation logo](https://nlnet.nl/) +[NGI Zero Entrust Logo](https://nlnet.nl/) + +## Liscense +MIT \ No newline at end of file diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/jest.config.cjs b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/jest.config.cjs new file mode 100644 index 0000000..3ad2cee --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/jest.config.cjs @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +// packages/dataset/jest.config.cjs +const sharedConfig = require("../../jest.config.js"); + +module.exports = { + ...sharedConfig, + rootDir: "./", // Sets context for this package + collectCoverageFrom: [ + "src/**/*.ts", + "!src/**/*.d.ts", + // "!src/index.ts", // Optional, if index.ts only re-exports + ], + modulePathIgnorePatterns: ["/dist/"], +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/package.json b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/package.json new file mode 100644 index 0000000..126408e --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/package.json @@ -0,0 +1,56 @@ +{ + "name": "@ldo/schema-converter-shex", + "version": "1.0.0-alpha.32", + "description": "", + "type": "module", + "main": "./dist/cjs/index.cjs", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.cjs" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "rimraf dist && npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --project tsconfig.cjs.json && node ../../scripts/rename-to-cjs.js", + "build:esm": "tsc --project tsconfig.esm.json", + "test": "jest --coverage", + "prepublishOnly": " npm run build", + "lint": "eslint src/** --fix --no-error-on-unmatched-pattern", + "remove-dist": "rimraf dist/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/o-development/ldo.git" + }, + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/o-development/ldo/issues" + }, + "homepage": "https://github.com/o-development/ldo/tree/main/packages/schema-converter-shex#readme", + "devDependencies": { + "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.32", + "@shexjs/parser": "^1.0.0-alpha.24", + "@types/jsonld": "^1.5.6", + "@types/shexj": "^2.1.3", + "jsonld": "^5.2.0", + "shex-test": "^2.1.0" + }, + "files": [ + "dist" + ], + "dependencies": { + "@ldo/traverser-shexj": "^1.0.0-alpha.28", + "dts-dom": "~3.6.0", + "jsonld2graphobject": "^0.0.5" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "840910c56ec3f61416f031cc76771a5673af6757" +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/JsonLdContextBuilder.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/JsonLdContextBuilder.ts new file mode 100644 index 0000000..24785dd --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/JsonLdContextBuilder.ts @@ -0,0 +1,248 @@ +import type { Annotation, valueSetValue } from "shexj"; +import type { ExpandedTermDefinition } from "jsonld"; +import type { LdoJsonldContext } from "@ldo/jsonld-dataset-proxy"; +import { hashValueSetValue } from "./util/hashValueSetValue.js"; + +/** + * Name functions + */ +export function iriToName(iri: string): string { + try { + const url = new URL(iri); + let name: string; + if (url.hash) { + name = url.hash.slice(1); + } else { + const splitPathname = url.pathname.split("/"); + name = splitPathname[splitPathname.length - 1]; + } + return name.replace(/(? + annotation.predicate === "http://www.w3.org/2000/01/rdf-schema#label", + )?.object; + if (labelAnnotationObject && typeof labelAnnotationObject === "string") { + return toCamelCase(iriToName(labelAnnotationObject)); + } else if ( + labelAnnotationObject && + typeof labelAnnotationObject !== "string" + ) { + return toCamelCase(labelAnnotationObject.value); + } else if (obj.id) { + return toCamelCase(iriToName(obj.id)); + } +} + +export function toCamelCase(text: string) { + return text + .replace(/([-_ ]){1,}/g, " ") + .split(/[-_ ]/) + .reduce((cur, acc) => { + return cur + acc[0].toUpperCase() + acc.substring(1); + }); +} + +export function isJsonLdContextBuilder( + item: ExpandedTermDefinition | JsonLdContextBuilder, +): item is JsonLdContextBuilder { + return !!(typeof item === "object" && item instanceof JsonLdContextBuilder); +} + +/** + * JsonLd Context Builder + */ +export class JsonLdContextBuilder { + protected iriAnnotations: Record = {}; + public iriTypes: Record< + string, + ExpandedTermDefinition | JsonLdContextBuilder + > = {}; + protected generatedNames: Record | undefined; + + private getRelevantBuilder(rdfType?: string): JsonLdContextBuilder { + if (!rdfType) return this; + if ( + !this.iriTypes[rdfType] || + !isJsonLdContextBuilder(this.iriTypes[rdfType]) + ) { + this.iriTypes[rdfType] = new JsonLdContextBuilder(); + } + return this.iriTypes[rdfType] as JsonLdContextBuilder; + } + + private getRelevantBuilders(rdfType?: string): JsonLdContextBuilder[] { + const relevantBuilder = this.getRelevantBuilder(rdfType); + return relevantBuilder === this ? [this] : [this, relevantBuilder]; + } + + addSubject(iri: string, rdfType?: string, annotations?: Annotation[]) { + const relevantBuilders = this.getRelevantBuilders(rdfType); + relevantBuilders.forEach((relevantBuilder) => { + if (!relevantBuilder.iriAnnotations[iri]) { + relevantBuilder.iriAnnotations[iri] = []; + } + if (annotations && annotations.length > 0) { + relevantBuilder.iriAnnotations[iri].push(...annotations); + } + }); + } + + addPredicate( + iri: string, + expandedTermDefinition: ExpandedTermDefinition, + isContainer: boolean, + rdfType?: string, + annotations?: Annotation[], + associatedValues?: valueSetValue[], + ) { + const relevantBuilders = this.getRelevantBuilders(rdfType); + + relevantBuilders.forEach((relevantBuilder) => { + relevantBuilder.addSubject(iri, undefined, annotations); + + // If there are multiple associated + const associatedValuesSet = new Set( + associatedValues?.map((val) => hashValueSetValue(val)), + ); + + if (!relevantBuilder.iriTypes[iri]) { + relevantBuilder.iriTypes[iri] = { ...expandedTermDefinition }; + if ( + isContainer || + associatedValuesSet.size > 1 || + iri === "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" + ) { + relevantBuilder.iriTypes[iri]["@isCollection"] = true; + } + if (associatedValuesSet.size > 0) { + relevantBuilder.iriTypes[iri]["@associatedValues"] = + associatedValuesSet; + } + } else { + const curDef = relevantBuilder.iriTypes[iri]; + const newDef = expandedTermDefinition; + if (isContainer) { + curDef["@isCollection"] = true; + } + // If there's a different associated value, it must be a collection because you can have multiple types + if (associatedValuesSet.size > 0) { + if (associatedValuesSet.size > 1) { + relevantBuilder.iriTypes[iri]["@isCollection"] = true; + } + const oldAssociatedValueSetSize = curDef["@associatedValues"].size; + associatedValuesSet.forEach((val) => + curDef["@associatedValues"].add(val), + ); + if (curDef["@associatedValues"].size !== oldAssociatedValueSetSize) { + curDef["@isCollection"] = true; + } + } + // If the old and new versions both have types + if (curDef["@type"] && newDef["@type"]) { + if (curDef["@type"] !== newDef["@type"]) { + console.warn( + `You've specified that a specific field "${iri}" can have an object of multiple literal types (${curDef["@type"]} or ${newDef["@type"]}). This is not expressable in JSON-LD context, and we will randomly select one type to use.`, + ); + } + } + } + }); + } + + generateNames(): Record { + const generatedNames: Record = {}; + const claimedNames: Set = new Set(); + Object.entries(this.iriAnnotations).forEach(([iri, annotations]) => { + let potentialName: string | undefined; + if (annotations.length > 0) { + const labelAnnotationObject = annotations.find( + (annotation) => + annotation.predicate === + "http://www.w3.org/2000/01/rdf-schema#label", + )?.object; + if ( + labelAnnotationObject && + typeof labelAnnotationObject === "string" + ) { + potentialName = toCamelCase(iriToName(labelAnnotationObject)); + } else if ( + labelAnnotationObject && + typeof labelAnnotationObject !== "string" + ) { + potentialName = toCamelCase(labelAnnotationObject.value); + } + } + if (!potentialName) { + potentialName = toCamelCase(iriToName(iri)); + } + if (claimedNames.has(potentialName)) { + let i = 2; + let newName: string | undefined; + do { + if (!claimedNames.has(`${potentialName}${i}`)) { + newName = `${potentialName}${i}`; + } + i++; + } while (!newName); + potentialName = newName; + } + claimedNames.add(potentialName); + generatedNames[iri] = potentialName; + }); + return generatedNames; + } + + getNameFromIri(iri: string, rdfType?: string) { + const relevantBuilder = this.getRelevantBuilder(rdfType); + if (!relevantBuilder.generatedNames) { + relevantBuilder.generatedNames = relevantBuilder.generateNames(); + } + if (relevantBuilder.generatedNames[iri]) { + return relevantBuilder.generatedNames[iri]; + } else { + return iri; + } + } + + generateJsonldContext(): LdoJsonldContext { + const contextDefnition: LdoJsonldContext = {}; + const namesMap = this.generateNames(); + Object.entries(namesMap).forEach(([iri, name]) => { + if (this.iriTypes[iri]) { + let subContext: ExpandedTermDefinition = { + "@id": + iri === "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" + ? "@type" + : iri, + }; + + if (isJsonLdContextBuilder(this.iriTypes[iri])) { + subContext["@context"] = ( + this.iriTypes[iri] as JsonLdContextBuilder + ).generateJsonldContext(); + } else { + subContext = { + ...subContext, + ...this.iriTypes[iri], + }; + } + delete subContext["@associatedValues"]; + + contextDefnition[name] = subContext; + } else { + contextDefnition[name] = iri; + } + }); + + return contextDefnition; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/ShexJContextVisitor.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/ShexJContextVisitor.ts new file mode 100644 index 0000000..6fd135b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/ShexJContextVisitor.ts @@ -0,0 +1,103 @@ +import ShexJTraverser from "@ldo/traverser-shexj"; +import type { JsonLdContextBuilder } from "./JsonLdContextBuilder.js"; +import { getRdfTypesForTripleConstraint } from "../util/getRdfTypesForTripleConstraint.js"; + +/** + * Visitor + */ +export const ShexJNameVisitor = + ShexJTraverser.createVisitor({ + Shape: { + visitor: async (_shape, _context) => {}, + }, + TripleConstraint: { + visitor: async (tripleConstraint, node, context) => { + // Check that there's a triple constraint that is a type at the + // same level if there is, use that as an rdfType + const rdfTypes = getRdfTypesForTripleConstraint(node); + + // For Each RDF Type, add it + rdfTypes.forEach((rdfType) => { + if (tripleConstraint.valueExpr) { + const isContainer = + tripleConstraint.max !== undefined && tripleConstraint.max !== 1; + if (typeof tripleConstraint.valueExpr === "string") { + // TOOD handle string value expr + } else if (tripleConstraint.valueExpr.type === "NodeConstraint") { + if (tripleConstraint.valueExpr.datatype) { + context.addPredicate( + tripleConstraint.predicate, + { + "@type": tripleConstraint.valueExpr.datatype, + }, + isContainer, + rdfType, + tripleConstraint.annotations, + ); + } else if ( + tripleConstraint.valueExpr.nodeKind && + tripleConstraint.valueExpr.nodeKind !== "literal" + ) { + context.addPredicate( + tripleConstraint.predicate, + { "@type": "@id" }, + isContainer, + rdfType, + tripleConstraint.annotations, + ); + } else if (tripleConstraint.valueExpr.values) { + context.addPredicate( + tripleConstraint.predicate, + {}, + isContainer, + rdfType, + tripleConstraint.annotations, + tripleConstraint.valueExpr.values, + ); + } else { + context.addPredicate( + tripleConstraint.predicate, + {}, + isContainer, + rdfType, + tripleConstraint.annotations, + ); + } + } else { + context.addPredicate( + tripleConstraint.predicate, + { + "@type": "@id", + }, + isContainer, + rdfType, + tripleConstraint.annotations, + ); + } + } else { + context.addSubject( + tripleConstraint.predicate, + rdfType, + tripleConstraint.annotations, + ); + } + }); + }, + }, + NodeConstraint: { + visitor: async (nodeConstraint, node, context) => { + if (nodeConstraint.values) { + nodeConstraint.values.forEach((value) => { + if (typeof value === "string") { + context.addSubject(value); + } + }); + } + }, + }, + IriStem: { + visitor: async (iriStem, node, context) => { + context.addSubject(iriStem.stem); + }, + }, + }); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/shexjToContext.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/shexjToContext.ts new file mode 100644 index 0000000..d2ddae8 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/shexjToContext.ts @@ -0,0 +1,22 @@ +import type { ContextDefinition } from "jsonld"; +import type { Schema } from "@ldo/traverser-shexj"; +import { JsonLdContextBuilder } from "./JsonLdContextBuilder.js"; +import { ShexJNameVisitor } from "./ShexJContextVisitor.js"; +import { jsonld2graphobject } from "jsonld2graphobject"; + +export async function shexjToContext( + shexj: Schema, +): Promise { + const processedShexj: Schema = (await jsonld2graphobject( + { + ...shexj, + "@id": "SCHEMA", + "@context": "http://www.w3.org/ns/shex.jsonld", + }, + "SCHEMA", + { excludeContext: true }, + )) as unknown as Schema; + const jsonLdContextBuilder = new JsonLdContextBuilder(); + await ShexJNameVisitor.visit(processedShexj, "Schema", jsonLdContextBuilder); + return jsonLdContextBuilder.generateJsonldContext(); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/util/hashValueSetValue.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/util/hashValueSetValue.ts new file mode 100644 index 0000000..c50ad76 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/context/util/hashValueSetValue.ts @@ -0,0 +1,27 @@ +import type { ObjectLiteral, valueSetValue } from "shexj"; + +export function hashValueSetValue(vsv: valueSetValue) { + if (typeof vsv === "string") return `string|${vsv}`; + + const vsvol = vsv as ObjectLiteral; + if (vsvol.value) return `objectLiteral|${vsvol.value}|${vsvol.language}`; + + const vsvnol = vsv as Exclude; + + switch (vsvnol.type) { + case "IriStem": + return `IriStem|${vsvnol.stem}`; + case "IriStemRange": + return `IriStemRange|${vsvnol.stem}|${vsvnol.exclusions}`; + case "LiteralStem": + return `LiteralStem|${vsvnol.stem}`; + case "LiteralStemRange": + return `LiteralStemRange|${vsvnol.stem}|${vsvnol.exclusions}`; + case "Language": + return `Language|${vsvnol.languageTag}`; + case "LanguageStem": + return `LanguageStem|${vsvnol.stem}`; + case "LanguageStemRange": + return `LanguageStemRange|${vsvnol.stem}|${vsvnol.exclusions}`; + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/index.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/index.ts new file mode 100644 index 0000000..f0576b4 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/index.ts @@ -0,0 +1,6 @@ +import { shexjToTyping } from "./typing/shexjToTyping.js"; +export { annotateReadablePredicates } from "./util/annotateReadablePredicates.js"; +export type { CompactShape } from "./schema/ShexJSchemaTransformerCompact.js"; +export { ShexJSchemaTransformerCompact } from "./schema/ShexJSchemaTransformerCompact.js"; +export type { CompactSchema } from "./typing/shexjToTypingCompact.js"; +export default shexjToTyping; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/schema/ShexJSchemaTransformerCompact.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/schema/ShexJSchemaTransformerCompact.ts new file mode 100644 index 0000000..f1c5a8b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/schema/ShexJSchemaTransformerCompact.ts @@ -0,0 +1,235 @@ +import type { ObjectLiteral } from "@ldo/traverser-shexj"; +import ShexJTraverser from "@ldo/traverser-shexj"; + +export interface CompactShape { + iri: string; + predicates: CompactSchemaProperty[]; +} + +type CompactSchemaValue = { + literals?: number[] | string[] | boolean; + type: "number" | "string" | "boolean" | "literal"; +}; + +interface CompactSchemaProperty { + /** Type of property. */ + type: "number" | "string" | "boolean" | "literal" | "nested" | "eitherOf"; + /** The RDF predicate URI. */ + predicateUri: string; + /** The alias of the `predicateUri` when serialized to a JSON object. */ + readablePredicate: string; + /** The required literal value(s), if type is `literal`. Others are allowed, if `extra` is true. */ + literalValue?: number | string | boolean | number[] | string[]; + /** If type is `nested`, the shape or its IRI. */ + nestedSchema?: string | CompactShape; + /** Maximum allowed number of values. `-1` means infinite. */ + maxCardinality: number; + /** Minimum required number of values */ + minCardinality: number; + /** If type is `eitherOf`, specifies multiple allowed types (CompactSchemaValue, shapes, or shape IRI). */ + eitherOf?: (CompactSchemaValue | CompactShape | string)[]; + /** If other (additional) values are permitted. Useful for literals. */ + extra?: boolean; +} + +export const ShexJSchemaTransformerCompact = ShexJTraverser.createTransformer< + { + Schema: { return: CompactShape[] }; + ShapeDecl: { return: CompactShape }; + Shape: { return: CompactShape }; + EachOf: { return: CompactShape }; + TripleConstraint: { return: CompactSchemaProperty }; + NodeConstraint: { return: CompactSchemaValue }; + ShapeOr: { return: (CompactSchemaValue | CompactShape | string)[] }; + ShapeAnd: { return: never }; + ShapeNot: { return: never }; + ShapeExternal: { return: never }; + }, + null +>({ + Schema: { + transformer: async (_schema, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + + return transformedChildren.shapes || []; + }, + }, + + ShapeDecl: { + transformer: async (shapeDecl, getTransformedChildren) => { + const schema = await getTransformedChildren(); + const shape = schema.shapeExpr as CompactShape; + + return { ...shape, iri: shapeDecl.id } as CompactShape; + }, + }, + + Shape: { + transformer: async (_shape, getTransformedChildren) => { + // TODO: We don't handles those + _shape.closed; + + const transformedChildren = await getTransformedChildren(); + const compactShape = transformedChildren.expression as CompactShape; + + for (const extra of _shape.extra || []) { + const extraPredicate = compactShape.predicates.find( + (p) => p.predicateUri === extra, + ); + if (extraPredicate) extraPredicate.extra = true; + } + + return compactShape; + }, + }, + + // EachOf contains the `expressions` array of properties (TripleConstraint) + EachOf: { + transformer: async (eachOf, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + + return { + iri: "", + predicates: transformedChildren.expressions.map( + // We disregard cases where properties are referenced (strings) + // or where they consist of Unions or Intersections (not supported). + (expr) => expr as CompactSchemaProperty, + ), + }; + }, + }, + + TripleConstraint: { + transformer: async ( + tripleConstraint, + getTransformedChildren, + _setReturnPointer, + ) => { + const transformedChildren = await getTransformedChildren(); + + const commonProperties = { + maxCardinality: tripleConstraint.max ?? 1, + minCardinality: tripleConstraint.min ?? 1, + predicateUri: tripleConstraint.predicate, + readablePredicate: tripleConstraint.readablePredicate, + }; + // Make property based on object type which is either a parsed schema, literal or type. + if (typeof transformedChildren.valueExpr === "string") { + // Reference to nested object + return { + type: "nested", + nestedSchema: transformedChildren.valueExpr, + ...commonProperties, + } satisfies CompactSchemaProperty; + } else if ( + transformedChildren.valueExpr && + (transformedChildren.valueExpr as CompactShape).predicates + ) { + // Nested object + return { + type: "nested", + nestedSchema: transformedChildren.valueExpr as CompactShape, + ...commonProperties, + } satisfies CompactSchemaProperty; + } else if (Array.isArray(transformedChildren.valueExpr)) { + return { + type: "eitherOf", + eitherOf: transformedChildren.valueExpr, + ...commonProperties, + }; + } else { + // type or literal + const nodeConstraint = + transformedChildren.valueExpr as CompactSchemaValue; + return { + type: nodeConstraint.type, + literalValue: nodeConstraint.literals, + ...commonProperties, + } satisfies CompactSchemaProperty; + } + }, + }, + + NodeConstraint: { + transformer: async (nodeConstraint) => { + if (nodeConstraint.datatype) { + switch (nodeConstraint.datatype) { + case "http://www.w3.org/2001/XMLSchema#boolean": + return { type: "boolean" }; + case "http://www.w3.org/2001/XMLSchema#byte": + case "http://www.w3.org/2001/XMLSchema#decimal": + case "http://www.w3.org/2001/XMLSchema#double": + case "http://www.w3.org/2001/XMLSchema#float": + case "http://www.w3.org/2001/XMLSchema#int": + case "http://www.w3.org/2001/XMLSchema#integer": + case "http://www.w3.org/2001/XMLSchema#long": + case "http://www.w3.org/2001/XMLSchema#negativeInteger": + case "http://www.w3.org/2001/XMLSchema#nonNegativeInteger": + case "http://www.w3.org/2001/XMLSchema#nonPositiveInteger": + case "http://www.w3.org/2001/XMLSchema#positiveInteger": + case "http://www.w3.org/2001/XMLSchema#short": + case "http://www.w3.org/2001/XMLSchema#unsignedLong": + case "http://www.w3.org/2001/XMLSchema#unsignedInt": + case "http://www.w3.org/2001/XMLSchema#unsignedShort": + case "http://www.w3.org/2001/XMLSchema#unsignedByte": + return { type: "number" }; + default: + return { type: "string" }; // treat most as string + } + } + if (nodeConstraint.nodeKind) { + // Something reference-like. + return { type: "string" }; + } + if (nodeConstraint.values) { + return { + type: "literal", + literals: nodeConstraint.values.map( + // TODO: We do not convert them to number or boolean or lang tag. + (valueRecord) => (valueRecord as ObjectLiteral).value, + ), + }; + } + + // Maybe we should throw instead... + throw { + error: new Error("Could not parse Node Constraint"), + nodeConstraint, + }; + }, + }, + + // Transformer from ShapeOr + ShapeOr: { + transformer: async (shapeOr, getTransformedChildren) => { + const tc = await getTransformedChildren(); + // Either a shape IRI, a nested shape or a node CompactSchemaValue (node constraint). + return (Array.isArray(tc) ? tc : [tc]) as ( + | string + | CompactShape + | CompactSchemaValue + )[]; + }, + }, + + // Transformer from ShapeAnd + ShapeAnd: { + transformer: async () => { + throw new Error("ShapeAnd not supported (compact)"); + }, + }, + + // Transformer from ShapeNot - not supported. + ShapeNot: { + transformer: async () => { + throw new Error("ShapeNot not supported (compact)"); + }, + }, + + // Transformer from ShapeExternal - not supported. + ShapeExternal: { + transformer: async () => { + throw new Error("ShapeExternal not supported (compact)"); + }, + }, +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/ShapeInterfaceDeclaration.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/ShapeInterfaceDeclaration.ts new file mode 100644 index 0000000..037f300 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/ShapeInterfaceDeclaration.ts @@ -0,0 +1,5 @@ +import type { InterfaceDeclaration } from "dts-dom"; + +export interface ShapeInterfaceDeclaration extends InterfaceDeclaration { + shapeId?: string; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/ShexJTypingTransformer.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/ShexJTypingTransformer.ts new file mode 100644 index 0000000..0c668da --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/ShexJTypingTransformer.ts @@ -0,0 +1,385 @@ +import ShexJTraverser from "@ldo/traverser-shexj"; +import * as dom from "dts-dom"; +import type { Annotation } from "shexj"; +import { nameFromObject } from "../context/JsonLdContextBuilder.js"; +import type { ShapeInterfaceDeclaration } from "./ShapeInterfaceDeclaration.js"; +import { getRdfTypesForTripleConstraint } from "../util/getRdfTypesForTripleConstraint.js"; +import { dedupeObjectTypeMembers } from "./util/dedupeObjectTypeMembers.js"; + +export interface ShexJTypeTransformerContext { + getNameFromIri: (iri: string, rdfType?: string) => string; +} + +export function commentFromAnnotations( + annotations?: Annotation[], +): string | undefined { + const commentAnnotationObject = annotations?.find( + (annotation) => + annotation.predicate === "http://www.w3.org/2000/01/rdf-schema#comment", + )?.object; + if (typeof commentAnnotationObject === "string") { + // It's an IRI + return commentAnnotationObject; + } else { + return commentAnnotationObject?.value; + } +} + +export const ShexJTypingTransformer = ShexJTraverser.createTransformer< + { + Schema: { + return: dom.TopLevelDeclaration[]; + }; + ShapeDecl: { + return: dom.InterfaceDeclaration; + }; + Shape: { + return: dom.InterfaceDeclaration; + }; + EachOf: { + return: dom.ObjectType | dom.InterfaceDeclaration; + }; + TripleConstraint: { + return: dom.PropertyDeclaration; + }; + NodeConstraint: { + return: dom.Type; + }; + ShapeOr: { + return: dom.UnionType; + }; + ShapeAnd: { + return: dom.IntersectionType; + }; + ShapeNot: { + return: never; + }; + ShapeExternal: { + return: never; + }; + }, + ShexJTypeTransformerContext +>({ + Schema: { + transformer: async ( + _schema, + getTransformedChildren, + ): Promise => { + const transformedChildren = await getTransformedChildren(); + const interfaces: dom.TopLevelDeclaration[] = []; + transformedChildren.shapes?.forEach((shape) => { + if ( + typeof shape !== "string" && + (shape as dom.InterfaceDeclaration).kind === "interface" + ) { + interfaces.push(shape as dom.InterfaceDeclaration); + } + }); + return interfaces; + }, + }, + ShapeDecl: { + transformer: async ( + shapeDecl, + getTransformedChildren, + ): Promise => { + const shapeName = nameFromObject(shapeDecl) || "Shape"; + const { shapeExpr } = await getTransformedChildren(); + if ((shapeExpr as dom.InterfaceDeclaration).kind === "interface") { + const shapeInterface = shapeExpr as ShapeInterfaceDeclaration; + shapeInterface.name = shapeName; + // This exists so the LDO-CLI can understand which type corresponds to the shape + shapeInterface.shapeId = shapeDecl.id; + return shapeInterface; + } else { + // TODO: Handle other items + throw new Error( + "Cannot handle ShapeOr, ShapeAnd, ShapeNot, ShapeExternal, or NodeConstraint direcly on ShapeDecl.", + ); + } + }, + }, + Shape: { + transformer: async (shape, getTransformedChildren, setReturnPointer) => { + const newInterface: ShapeInterfaceDeclaration = dom.create.interface(""); + setReturnPointer(newInterface); + const transformedChildren = await getTransformedChildren(); + // Add @id and @context + newInterface.members.push( + dom.create.property( + "@id", + dom.type.string, + dom.DeclarationFlags.Optional, + ), + ); + newInterface.members.push( + dom.create.property( + "@context", + dom.create.namedTypeReference("LdoJsonldContext"), + dom.DeclarationFlags.Optional, + ), + ); + if (typeof transformedChildren.expression === "string") { + // TODO: handle string + } else if ( + (transformedChildren.expression as dom.ObjectType).kind === "object" || + (transformedChildren.expression as dom.InterfaceDeclaration).kind === + "interface" + ) { + newInterface.members.push( + ...(transformedChildren.expression as dom.ObjectType).members, + ); + } else if ( + (transformedChildren.expression as dom.PropertyDeclaration).kind === + "property" + ) { + newInterface.members.push( + transformedChildren.expression as dom.PropertyDeclaration, + ); + } + // Use EXTENDS + if (transformedChildren.extends) { + transformedChildren.extends.forEach((extendsItem) => { + const extendsInterface = extendsItem as dom.InterfaceDeclaration; + if (extendsInterface.kind === "interface") { + // NOTE: This is how you would use the actual typescript "extends" + // feature, but as ShEx extend doesn't work the same way as ts + // extends, we just dedupe and push members. + // newInterface.baseTypes?.push( + // extendsItem as dom.InterfaceDeclaration, + // ); + newInterface.members = dedupeObjectTypeMembers([ + ...extendsInterface.members, + ...newInterface.members, + ]); + } + }); + } + return newInterface; + }, + }, + EachOf: { + transformer: async (eachOf, getTransformedChildren, setReturnPointer) => { + const transformedChildren = await getTransformedChildren(); + const name = nameFromObject(eachOf); + const objectType = name + ? dom.create.interface(name) + : dom.create.objectType([]); + setReturnPointer(objectType); + // Get Input property expressions + const inputPropertyExpressions: dom.PropertyDeclaration[] = []; + transformedChildren.expressions + .filter( + ( + expression, + ): expression is dom.ObjectType | dom.PropertyDeclaration => { + return ( + (expression as dom.PropertyDeclaration).kind === "property" || + (expression as dom.ObjectType).kind === "object" || + (expression as dom.InterfaceDeclaration).kind === "interface" + ); + }, + ) + .forEach( + ( + expression: + | dom.ObjectType + | dom.InterfaceDeclaration + | dom.PropertyDeclaration, + ) => { + if (expression.kind === "property") { + inputPropertyExpressions.push(expression); + } else { + expression.members.forEach((objectMember) => { + if (objectMember.kind === "property") { + inputPropertyExpressions.push(objectMember); + } + }); + } + }, + ); + objectType.members.push( + ...dedupeObjectTypeMembers(inputPropertyExpressions), + ); + return objectType; + }, + }, + TripleConstraint: { + transformer: async ( + tripleConstraint, + getTransformedChildren, + setReturnPointer, + node, + context, + ) => { + const transformedChildren = await getTransformedChildren(); + + const rdfTypes = getRdfTypesForTripleConstraint(node); + + // HACK: Selecting only one RDFType might cause edge cases children in the + // heirarchy that have different predicate names. + const propertyName = context.getNameFromIri( + tripleConstraint.predicate, + rdfTypes[0], + ); + const isSet = + (tripleConstraint.max !== undefined && tripleConstraint.max !== 1) || + tripleConstraint.predicate === + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"; + const isOptional = tripleConstraint.min === 0; + let type: dom.Type = dom.type.any; + if (transformedChildren.valueExpr) { + type = transformedChildren.valueExpr as dom.Type; + } + + const propertyDeclaration = dom.create.property( + propertyName, + isSet + ? { + kind: "name", + name: "LdSet", + typeArguments: [type], + } + : type, + isOptional ? dom.DeclarationFlags.Optional : dom.DeclarationFlags.None, + ); + + propertyDeclaration.jsDocComment = commentFromAnnotations( + tripleConstraint.annotations, + ); + return propertyDeclaration; + }, + }, + NodeConstraint: { + transformer: async ( + nodeConstraint, + _getTransformedChildren, + setReturnPointer, + node, + context, + ) => { + if (nodeConstraint.datatype) { + switch (nodeConstraint.datatype) { + case "http://www.w3.org/2001/XMLSchema#string": + case "http://www.w3.org/2001/XMLSchema#ENTITIES": + case "http://www.w3.org/2001/XMLSchema#ENTITY": + case "http://www.w3.org/2001/XMLSchema#ID": + case "http://www.w3.org/2001/XMLSchema#IDREF": + case "http://www.w3.org/2001/XMLSchema#IDREFS": + case "http://www.w3.org/2001/XMLSchema#language": + case "http://www.w3.org/2001/XMLSchema#Name": + case "http://www.w3.org/2001/XMLSchema#NCName": + case "http://www.w3.org/2001/XMLSchema#NMTOKEN": + case "http://www.w3.org/2001/XMLSchema#NMTOKENS": + case "http://www.w3.org/2001/XMLSchema#normalizedString": + case "http://www.w3.org/2001/XMLSchema#QName": + case "http://www.w3.org/2001/XMLSchema#token": + return dom.type.string; + case "http://www.w3.org/2001/XMLSchema#date": + case "http://www.w3.org/2001/XMLSchema#dateTime": + case "http://www.w3.org/2001/XMLSchema#duration": + case "http://www.w3.org/2001/XMLSchema#gDay": + case "http://www.w3.org/2001/XMLSchema#gMonth": + case "http://www.w3.org/2001/XMLSchema#gMonthDay": + case "http://www.w3.org/2001/XMLSchema#gYear": + case "http://www.w3.org/2001/XMLSchema#gYearMonth": + case "http://www.w3.org/2001/XMLSchema#time": + return dom.type.string; + case "http://www.w3.org/2001/XMLSchema#byte": + case "http://www.w3.org/2001/XMLSchema#decimal": + case "http://www.w3.org/2001/XMLSchema#double": + case "http://www.w3.org/2001/XMLSchema#float": + case "http://www.w3.org/2001/XMLSchema#int": + case "http://www.w3.org/2001/XMLSchema#integer": + case "http://www.w3.org/2001/XMLSchema#long": + case "http://www.w3.org/2001/XMLSchema#negativeInteger": + case "http://www.w3.org/2001/XMLSchema#nonNegativeInteger": + case "http://www.w3.org/2001/XMLSchema#nonPositiveInteger": + case "http://www.w3.org/2001/XMLSchema#positiveInteger": + case "http://www.w3.org/2001/XMLSchema#short": + case "http://www.w3.org/2001/XMLSchema#unsignedLong": + case "http://www.w3.org/2001/XMLSchema#unsignedInt": + case "http://www.w3.org/2001/XMLSchema#unsignedShort": + case "http://www.w3.org/2001/XMLSchema#unsignedByte": + return dom.type.number; + case "http://www.w3.org/2001/XMLSchema#boolean": + return dom.type.boolean; + case "http://www.w3.org/2001/XMLSchema#hexBinary": + return dom.type.string; + case "http://www.w3.org/2001/XMLSchema#anyURI": + return dom.type.string; + default: + return dom.type.string; + } + } + if (nodeConstraint.nodeKind) { + switch (nodeConstraint.nodeKind) { + case "iri": + return dom.create.objectType([ + dom.create.property("@id", dom.type.string), + ]); + case "bnode": + return dom.create.objectType([]); + case "nonliteral": + return dom.create.objectType([ + dom.create.property( + "@id", + dom.type.string, + dom.DeclarationFlags.Optional, + ), + ]); + case "literal": + default: + return dom.type.string; + } + } + if (nodeConstraint.values) { + const valuesUnion = dom.create.union([]); + nodeConstraint.values.forEach((value) => { + if (typeof value === "string") { + valuesUnion.members.push( + dom.create.objectType([ + dom.create.property( + "@id", + dom.type.stringLiteral(context.getNameFromIri(value)), + ), + ]), + ); + } + }); + return valuesUnion; + } + return dom.type.undefined; + }, + }, + ShapeOr: { + transformer: async (shapeOr, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + const validTypes: dom.Type[] = []; + transformedChildren.shapeExprs.forEach((type) => { + if (typeof type === "object") validTypes.push(type); + }); + return dom.create.union(validTypes); + }, + }, + ShapeAnd: { + transformer: async (shapeAnd, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + const validTypes: dom.Type[] = []; + transformedChildren.shapeExprs.forEach((type) => { + if (typeof type === "object") validTypes.push(type); + }); + return dom.create.intersection(validTypes); + }, + }, + ShapeNot: { + transformer: async () => { + throw new Error("ShapeNot is not supported"); + }, + }, + ShapeExternal: { + transformer: async () => { + throw new Error("ShapeExternal is not supported"); + }, + }, +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/ShexJTypingTransformerCompact.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/ShexJTypingTransformerCompact.ts new file mode 100644 index 0000000..e29c446 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/ShexJTypingTransformerCompact.ts @@ -0,0 +1,621 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import ShexJTraverser from "@ldo/traverser-shexj"; +import type { Annotation } from "shexj"; +import { nameFromObject } from "../context/JsonLdContextBuilder.js"; +import type { ShapeInterfaceDeclaration } from "./ShapeInterfaceDeclaration.js"; +import * as dom from "dts-dom"; + +// Collected enum alias names (e.g., AuthenticatedAgentId) to emit at end +export const additionalCompactEnumAliases = new Set(); + +export interface CompactTransformerContext { + getNameFromIri: (iri: string, rdfType?: string) => string; +} + +function commentFromAnnotations( + annotations?: Annotation[], +): string | undefined { + const commentAnnotationObject = annotations?.find( + (annotation) => + annotation.predicate === "http://www.w3.org/2000/01/rdf-schema#comment", + )?.object; + if (typeof commentAnnotationObject === "string") + return commentAnnotationObject; + return commentAnnotationObject?.value; +} + +// Helper: classify a dom.Type into categories we care about. +function isObjectLike(t: dom.Type): boolean { + return ( + (t as dom.ObjectType).kind === "object" || + (t as dom.InterfaceDeclaration).kind === "interface" + ); +} + +function isPrimitiveLike(t: dom.Type): boolean { + const kind = (t as any)?.kind; + if (kind === "name") return true; // named references and intrinsic tokens + if (kind === "union") { + return (t as dom.UnionType).members.every(isPrimitiveLike); + } + if (kind === "type-parameter") return true; + // Fallback: treat scalar intrinsic tokens as primitive + const intrinsicKinds = new Set(["string", "number", "boolean", "undefined"]); + return intrinsicKinds.has(kind || ""); +} + +// Small helpers for unions and alias naming +function isUnionType(t: dom.Type): t is dom.UnionType { + return (t as any)?.kind === "union"; +} + +function unionOf(types: dom.Type[]): dom.Type { + const flat: dom.Type[] = []; + const collect = (tt: dom.Type) => { + if (isUnionType(tt)) tt.members.forEach(collect); + else flat.push(tt); + }; + types.forEach(collect); + const seen = new Set(); + const unique: dom.Type[] = []; + flat.forEach((m) => { + const key = + (m as any).name || + (m as any).value || + (m as any).kind + JSON.stringify(m); + if (!seen.has(key)) { + seen.add(key); + unique.push(m); + } + }); + if (unique.length === 0) return dom.type.any as unknown as dom.Type; + if (unique.length === 1) return unique[0]; + return dom.create.union(unique); +} + +function setOf(inner: dom.Type): dom.NamedTypeReference { + return { + kind: "name", + name: "Set", + typeArguments: [inner], + } as any; +} + +function recordOf(key: dom.Type, value: dom.Type): dom.NamedTypeReference { + return { + kind: "name", + name: "Record", + typeArguments: [key, value], + } as any; +} + +// Note: aliasing helpers previously used in earlier versions were removed. + +// Property name collision resolution using predicate IRI mapping +const predicateIriByProp = new WeakMap(); + +// Note: collisions are handled by annotateReadablePredicates pre-pass. + +// Merge duplicate properties without introducing LdSet. If a property appears multiple +// times (e.g., via EXTENDS or grouped expressions) we: +// - union the types (flattening existing unions) +// - if one side is Set and the other is plain U, produce Set +// - if both are Set
, Set -> Set +// - preserve optional flag if any occurrence optional +function dedupeCompactProperties( + props: dom.PropertyDeclaration[], +): dom.PropertyDeclaration[] { + const isSetRef = (t: dom.Type): t is dom.NamedTypeReference => + (t as any).kind === "name" && (t as any).name === "Set"; + const getSetInner = (t: dom.Type): dom.Type => + isSetRef(t) ? (t as any).typeArguments[0] : t; + + // Group by composite key (name + predicate IRI) + const groups = new Map(); + for (const p of props) { + const pred = predicateIriByProp.get(p) || ""; + const key = `${p.name}\u0000${pred}`; + if (!groups.has(key)) groups.set(key, []); + groups.get(key)!.push(p); + } + + const merged: dom.PropertyDeclaration[] = []; + for (const [, group] of groups) { + if (group.length === 1) { + merged.push(group[0]); + continue; + } + let acc = group[0]; + for (let i = 1; i < group.length; i++) { + const next = group[i]; + const accSet = isSetRef(acc.type); + const nextSet = isSetRef(next.type); + let mergedType: dom.Type; + if (accSet && nextSet) { + mergedType = setOf( + unionOf([getSetInner(acc.type), getSetInner(next.type)]), + ); + } else if (accSet && !nextSet) { + mergedType = setOf(unionOf([getSetInner(acc.type), next.type])); + } else if (!accSet && nextSet) { + mergedType = setOf(unionOf([acc.type, getSetInner(next.type)])); + } else { + mergedType = unionOf([acc.type, next.type]); + } + const optional = + acc.flags === dom.DeclarationFlags.Optional || + next.flags === dom.DeclarationFlags.Optional + ? dom.DeclarationFlags.Optional + : dom.DeclarationFlags.None; + const mergedProp = dom.create.property(acc.name, mergedType, optional); + mergedProp.jsDocComment = + acc.jsDocComment && next.jsDocComment + ? `${acc.jsDocComment} | ${next.jsDocComment}` + : acc.jsDocComment || next.jsDocComment; + const pred = predicateIriByProp.get(acc) || predicateIriByProp.get(next); + if (pred) predicateIriByProp.set(mergedProp, pred); + acc = mergedProp; + } + merged.push(acc); + } + return merged; +} + +// Helpers to add id: IRI to anonymous object(-union) types +function ensureIdOnMembers(members?: any[]): void { + if (!members) return; + const props = (members.filter?.((m: any) => m?.kind === "property") || + []) as dom.PropertyDeclaration[]; + if (!props.some((m) => m.name === "id")) { + members.unshift( + dom.create.property( + "id", + dom.create.namedTypeReference("IRI"), + dom.DeclarationFlags.None, + ), + ); + } +} + +function withIdOnAnonymousObject(t: dom.Type): dom.Type { + if ((t as any)?.kind === "object") { + const mems = (t as any).members as dom.PropertyDeclaration[] | undefined; + ensureIdOnMembers(mems as any); + return t; + } + return t; +} + +function withIdInUnionObjectMembers(t: dom.Type): dom.Type { + if (!isUnionType(t)) return t; + const members = (t as dom.UnionType).members.map((m) => + (m as any)?.kind === "object" ? withIdOnAnonymousObject(m) : m, + ); + return dom.create.union(members); +} + +// Create property and attach predicate IRI and annotations consistently +function createProperty( + name: string, + type: dom.Type, + flags: dom.DeclarationFlags, + predicateIri?: string, + annotations?: Annotation[], +): dom.PropertyDeclaration { + const prop = dom.create.property(name, type, flags); + if (predicateIri) predicateIriByProp.set(prop, predicateIri); + const cmt = commentFromAnnotations(annotations) || ""; + prop.jsDocComment = cmt + ? `${cmt}\n\nOriginal IRI: ${predicateIri ?? ""}`.trim() + : `Original IRI: ${predicateIri ?? ""}`; + return prop; +} + +export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer< + { + Schema: { return: dom.TopLevelDeclaration[] }; + ShapeDecl: { return: dom.InterfaceDeclaration }; + Shape: { return: dom.InterfaceDeclaration }; + EachOf: { return: dom.ObjectType | dom.InterfaceDeclaration }; + TripleConstraint: { return: dom.PropertyDeclaration }; + NodeConstraint: { return: dom.Type }; + ShapeOr: { return: dom.UnionType }; + ShapeAnd: { return: dom.IntersectionType }; + ShapeNot: { return: never }; + ShapeExternal: { return: never }; + }, + null +>({ + // Transformer from Schema to interfaces + Schema: { + transformer: async (_schema, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + const interfaces: dom.TopLevelDeclaration[] = []; + transformedChildren.shapes?.forEach((shape) => { + if ( + typeof shape !== "string" && + (shape as dom.InterfaceDeclaration).kind === "interface" + ) { + interfaces.push(shape as dom.InterfaceDeclaration); + } + }); + return interfaces; + }, + }, + + // Transformer from ShapeDecl to interface + ShapeDecl: { + transformer: async (shapeDecl, getTransformedChildren) => { + const shapeName = nameFromObject(shapeDecl) || "Shape"; + const { shapeExpr } = await getTransformedChildren(); + if ((shapeExpr as dom.InterfaceDeclaration).kind === "interface") { + const shapeInterface = shapeExpr as ShapeInterfaceDeclaration; + shapeInterface.name = shapeName; + // Preserve shape id for downstream shapeTypes generation + // (mirrors standard transformer behavior) + shapeInterface.shapeId = shapeDecl.id; + if ( + !shapeInterface.members.find( + (m) => m.kind === "property" && m.name === "id", + ) + ) { + shapeInterface.members.unshift( + dom.create.property( + "id", + dom.create.namedTypeReference("IRI"), + // Root interfaces should have mandatory id + dom.DeclarationFlags.None, + ), + ); + } + return shapeInterface; + } + throw new Error( + "Unsupported direct shape expression on ShapeDecl for compact format.", + ); + }, + }, + + // Transformer from Shape to interface + Shape: { + transformer: async (_shape, getTransformedChildren, setReturnPointer) => { + const newInterface: ShapeInterfaceDeclaration = dom.create.interface(""); + setReturnPointer(newInterface); + const transformedChildren = await getTransformedChildren(); + if ( + typeof transformedChildren.expression !== "string" && + transformedChildren.expression && + ((transformedChildren.expression as dom.ObjectType).kind === "object" || + (transformedChildren.expression as dom.InterfaceDeclaration).kind === + "interface") + ) { + newInterface.members.push( + ...(transformedChildren.expression as dom.ObjectType).members, + ); + } else if ( + (transformedChildren.expression as dom.PropertyDeclaration)?.kind === + "property" + ) { + newInterface.members.push( + transformedChildren.expression as dom.PropertyDeclaration, + ); + } + if (transformedChildren.extends) { + transformedChildren.extends.forEach((ext) => { + const extInt = ext as dom.InterfaceDeclaration; + if (extInt.kind === "interface") { + const merged = [ + ...extInt.members.filter( + (m) => !(m.kind === "property" && m.name === "id"), + ), + ...newInterface.members, + ].filter( + (m): m is dom.PropertyDeclaration => m.kind === "property", + ); + newInterface.members = dedupeCompactProperties(merged); + } + }); + } + // Final pass: ensure only a single id property + const idSeen = new Set(); + newInterface.members = newInterface.members.filter((m, idx) => { + if (m.kind !== "property" || m.name !== "id") return true; + if (idSeen.size === 0) { + idSeen.add(idx); + // normalize id type to IRI + m.type = dom.create.namedTypeReference("IRI"); + return true; + } + return false; + }); + return newInterface; + }, + }, + + // Transformer from EachOf to object type. EachOf contains the `expressions` array of properties (TripleConstraint) + EachOf: { + transformer: async (eachOf, getTransformedChildren, setReturnPointer) => { + const transformedChildren = await getTransformedChildren(); + const name = nameFromObject(eachOf); + + const objectType = name + ? dom.create.interface(name) + : dom.create.objectType([]); + setReturnPointer(objectType); + const inputProps: dom.PropertyDeclaration[] = []; + transformedChildren.expressions.forEach((expr) => { + if (!expr || typeof expr === "string") return; + const kind = (expr as any).kind; + if (kind === "property") { + inputProps.push(expr as dom.PropertyDeclaration); + } else if (kind === "object" || kind === "interface") { + const mlist = (expr as dom.ObjectType | dom.InterfaceDeclaration) + .members; + mlist.forEach((m) => { + if ((m as any).kind === "property") { + inputProps.push(m as dom.PropertyDeclaration); + } + }); + } + }); + const deduped = dedupeCompactProperties(inputProps); + objectType.members.push(...deduped); + return objectType; + }, + }, + + // Transformer from triple constraints to type properties. + TripleConstraint: { + transformer: async ( + tripleConstraint, + getTransformedChildren, + _setReturnPointer, + node, + ) => { + const transformedChildren = await getTransformedChildren(); + const baseName = (tripleConstraint as any).readablePredicate as string; + + const max = tripleConstraint.max; + const isPlural = max === -1 || (max !== undefined && max !== 1); + const isOptional = tripleConstraint.min === 0; + + let valueType: dom.Type = dom.type.any; + if (transformedChildren.valueExpr) + valueType = transformedChildren.valueExpr as dom.Type; + + // Generic: If valueExpr is a NodeConstraint with concrete `values`, + // build a union of named alias references derived from those values. + // Works for any predicate (not only rdf:type). + const originalValueExpr: any = (tripleConstraint as any)?.valueExpr; + if ( + originalValueExpr && + typeof originalValueExpr === "object" && + originalValueExpr.type === "NodeConstraint" && + Array.isArray(originalValueExpr.values) && + originalValueExpr.values.length > 0 + ) { + const aliasRefs: dom.Type[] = []; + for (const v of originalValueExpr.values) { + // valueSetValue can be string IRIREF or ObjectLiteral or other stems; handle IRIREF and ObjectLiteral + if (typeof v === "string") { + // For concrete IRIREF values, use a string literal of the IRI + aliasRefs.push(dom.type.stringLiteral(v)); + } else if (v && typeof v === "object") { + // ObjectLiteral has `value`; use that literal as alias base + const literalVal = (v as any).value as string | undefined; + if (literalVal) { + // For explicit literal values, use a string literal type + aliasRefs.push(dom.type.stringLiteral(literalVal)); + } + // For other union members (IriStem, ranges, Language, etc.), skip here; fall back covered below if none collected + } + } + if (aliasRefs.length > 0) { + const union = unionOf(aliasRefs); + const final = isPlural ? setOf(union) : union; + return createProperty( + baseName, + final, + isOptional + ? dom.DeclarationFlags.Optional + : dom.DeclarationFlags.None, + tripleConstraint.predicate, + tripleConstraint.annotations, + ); + } + } + + if ( + (valueType as dom.InterfaceDeclaration).kind === "interface" && + !(valueType as dom.InterfaceDeclaration).name + ) { + valueType = dom.create.objectType( + (valueType as dom.InterfaceDeclaration) + .members as dom.PropertyDeclaration[], + ); + } + + // Normalize NodeConstraint returned object forms for IRIs into IRI + // Heuristic: existing transformer (compact) returns string/number/boolean OR object/interface. + // We treat any simple string/number/boolean/name as primitive. + + // Determine category + const objLike = isObjectLike(valueType); + const isUnion = + (valueType as unknown as { kind?: string })?.kind === "union"; + const unionMembers: dom.Type[] = isUnion + ? (valueType as dom.UnionType).members + : []; + const unionAllObjLike = + isUnion && unionMembers.length > 0 && unionMembers.every(isObjectLike); + const primLike = isPrimitiveLike(valueType); + if ( + !primLike && + !objLike && + (valueType as dom.UnionType).kind === "union" + ) { + const u = valueType as dom.UnionType; + const hasObj = u.members.some(isObjectLike); + const hasPrim = u.members.some(isPrimitiveLike); + if (isPlural && hasObj && hasPrim) { + throw new Error( + `Mixed plural union (object + primitive) not supported for predicate ${tripleConstraint.predicate}`, + ); + } + } + + let finalType: dom.Type; + if (isPlural) { + if (objLike || unionAllObjLike) { + if ( + (valueType as dom.InterfaceDeclaration).kind === "interface" && + (valueType as dom.InterfaceDeclaration).name + ) { + const ifaceName = (valueType as dom.InterfaceDeclaration).name; + // Dictionary of full object instances keyed by IRI + finalType = recordOf( + dom.create.namedTypeReference("IRI"), + dom.create.namedTypeReference(ifaceName), + ); + } else { + // Anonymous object or union of anonymous/interface objects + let valueForRecord: dom.Type = valueType; + if (unionAllObjLike) { + // Ensure each union member has id?: IRI if anonymous object + valueForRecord = withIdInUnionObjectMembers(valueType); + } else { + valueForRecord = withIdOnAnonymousObject(valueType); + } + finalType = recordOf( + dom.create.namedTypeReference("IRI"), + valueForRecord, + ); + } + } else { + finalType = setOf(valueType); + } + } else { + // Singular + // If anonymous object or union of object-like types, ensure id: IRI is present (mandatory) + if (objLike) { + if ((valueType as dom.ObjectType).kind === "object") { + valueType = withIdOnAnonymousObject(valueType); + } + } else if (isUnion && unionAllObjLike) { + valueType = withIdInUnionObjectMembers(valueType); + } + // Singular: always the interface/object type itself (never Id union) + if ( + (valueType as dom.InterfaceDeclaration).kind === "interface" && + (valueType as dom.InterfaceDeclaration).name + ) { + finalType = dom.create.namedTypeReference( + (valueType as dom.InterfaceDeclaration).name, + ); + } else { + finalType = valueType; + } + } + return createProperty( + baseName, + finalType, + isOptional ? dom.DeclarationFlags.Optional : dom.DeclarationFlags.None, + tripleConstraint.predicate, + tripleConstraint.annotations, + ); + }, + }, + + // Transformer from node constraint to type + NodeConstraint: { + transformer: async (nodeConstraint) => { + if (nodeConstraint.datatype) { + switch (nodeConstraint.datatype) { + case "http://www.w3.org/2001/XMLSchema#boolean": + return dom.type.boolean; + case "http://www.w3.org/2001/XMLSchema#byte": + case "http://www.w3.org/2001/XMLSchema#decimal": + case "http://www.w3.org/2001/XMLSchema#double": + case "http://www.w3.org/2001/XMLSchema#float": + case "http://www.w3.org/2001/XMLSchema#int": + case "http://www.w3.org/2001/XMLSchema#integer": + case "http://www.w3.org/2001/XMLSchema#long": + case "http://www.w3.org/2001/XMLSchema#negativeInteger": + case "http://www.w3.org/2001/XMLSchema#nonNegativeInteger": + case "http://www.w3.org/2001/XMLSchema#nonPositiveInteger": + case "http://www.w3.org/2001/XMLSchema#positiveInteger": + case "http://www.w3.org/2001/XMLSchema#short": + case "http://www.w3.org/2001/XMLSchema#unsignedLong": + case "http://www.w3.org/2001/XMLSchema#unsignedInt": + case "http://www.w3.org/2001/XMLSchema#unsignedShort": + case "http://www.w3.org/2001/XMLSchema#unsignedByte": + return dom.type.number; + default: + return dom.type.string; // treat most as string + } + } + if (nodeConstraint.nodeKind) { + switch (nodeConstraint.nodeKind) { + case "iri": + return dom.create.namedTypeReference("IRI"); + case "bnode": + return dom.type.string; // opaque id as string + case "nonliteral": + return dom.create.namedTypeReference("IRI"); + case "literal": + default: + return dom.type.string; + } + } + if (nodeConstraint.values) { + const u = dom.create.union([]); + nodeConstraint.values.forEach((v) => { + if (typeof v === "string") u.members.push(dom.type.stringLiteral(v)); + }); + if (!u.members.length) return dom.type.string; + if (u.members.length === 1) return u.members[0]; + return u; + } + return dom.type.any; + }, + }, + + // Transformer from ShapeOr to union type + ShapeOr: { + transformer: async (_shapeOr, getTransformedChildren) => { + const tc = await getTransformedChildren(); + const valid: dom.Type[] = []; + tc.shapeExprs.forEach((t) => { + if (typeof t === "object") valid.push(t); + }); + return dom.create.union(valid); + }, + }, + + // Transformer from ShapeAnd to intersection type + ShapeAnd: { + transformer: async (_shapeAnd, getTransformedChildren) => { + const tc = await getTransformedChildren(); + const valid: dom.Type[] = []; + tc.shapeExprs.forEach((t) => { + if (typeof t === "object") valid.push(t); + }); + return dom.create.intersection(valid); + }, + }, + + // Transformer from ShapeNot to type - not supported. + ShapeNot: { + transformer: async () => { + throw new Error("ShapeNot not supported (compact)"); + }, + }, + + // Transformer from ShapeExternal to type - not supported. + ShapeExternal: { + transformer: async () => { + throw new Error("ShapeExternal not supported (compact)"); + }, + }, +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/shexjToTyping.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/shexjToTyping.ts new file mode 100644 index 0000000..99ad12d --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/shexjToTyping.ts @@ -0,0 +1,21 @@ +import type { ContextDefinition } from "jsonld"; +import type { Schema } from "@ldo/traverser-shexj"; +import type { TypeingReturn } from "./shexjToTypingLdo.js"; +import { shexjToTypingLdo } from "./shexjToTypingLdo.js"; +import type { CompactSchema } from "./shexjToTypingCompact.js"; +import { shexjToTypingCompact } from "./shexjToTypingCompact.js"; + +export interface TypingsOptions { + format?: "ldo" | "compact"; +} + +export async function shexjToTyping( + shexj: Schema, + options: TypingsOptions = {}, +): Promise< + [TypeingReturn, ContextDefinition] | [TypeingReturn, undefined, CompactSchema] +> { + const format = options.format || "ldo"; + if (format === "compact") return shexjToTypingCompact(shexj); + return shexjToTypingLdo(shexj); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/shexjToTypingCompact.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/shexjToTypingCompact.ts new file mode 100644 index 0000000..a3c9b38 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/shexjToTypingCompact.ts @@ -0,0 +1,98 @@ +import type { Schema } from "@ldo/traverser-shexj"; +import { jsonld2graphobject } from "jsonld2graphobject"; +import { + ShexJTypingTransformerCompact, + additionalCompactEnumAliases, +} from "./ShexJTypingTransformerCompact.js"; +import * as dom from "dts-dom"; +import type { TypeingReturn } from "./shexjToTypingLdo.js"; +import type { CompactShape } from "../schema/ShexJSchemaTransformerCompact.js"; +import { ShexJSchemaTransformerCompact } from "../schema/ShexJSchemaTransformerCompact.js"; + +type IRI = string; +export type CompactSchema = { [shapeId: IRI]: CompactShape }; + +export async function shexjToTypingCompact( + shexj: Schema, +): Promise<[TypeingReturn, undefined, CompactSchema]> { + // Prepare processed schema (names still rely on context visitor) + const processedShexj: Schema = (await jsonld2graphobject( + { + ...shexj, + "@id": "SCHEMA", + "@context": "http://www.w3.org/ns/shex.jsonld", + }, + "SCHEMA", + )) as unknown as Schema; + + additionalCompactEnumAliases.clear(); + const declarations = await ShexJTypingTransformerCompact.transform( + processedShexj, + "Schema", + null, + ); + + const compactSchemaShapesUnflattened = + await ShexJSchemaTransformerCompact.transform( + processedShexj, + "Schema", + null, + ); + const compactSchema = flattenSchema(compactSchemaShapesUnflattened); + + // Append only enum aliases (no interface Id aliases in compact format now) + const hasName = (d: unknown): d is { name: string } => + typeof (d as { name?: unknown }).name === "string"; + additionalCompactEnumAliases.forEach((alias) => { + const exists = declarations.some((d) => hasName(d) && d.name === alias); + if (!exists) + declarations.push( + dom.create.alias(alias, dom.create.namedTypeReference("IRI")), + ); + }); + + const typings = declarations.map((declaration) => ({ + typingString: dom + .emit(declaration, { rootFlags: dom.ContextFlags.InAmbientNamespace }) + .replace(/\r\n/g, "\n"), + dts: declaration, + })); + const header = `export type IRI = string;\n\n`; + const typingsString = + header + typings.map((t) => `export ${t.typingString}`).join(""); + + return [{ typingsString, typings }, undefined, compactSchema]; +} + +/** Shapes may be nested. Put all to their root and give nested ones ids. */ +function flattenSchema(shapes: CompactShape[]): CompactSchema { + let schema: CompactSchema = {}; + + for (const shape of shapes) { + schema[shape.iri] = shape; + + // Find nested, unflattened (i.e. anonymous) schemas in properties. + const nestedSchemaPredicates = shape.predicates.filter( + (pred) => pred.type === "nested" && typeof pred.nestedSchema === "object", + ); + + for (const pred of nestedSchemaPredicates) { + const newId = shape.iri + "||" + pred.predicateUri; + + // Recurse + const flattened = flattenSchema([ + { + ...(pred.nestedSchema as CompactShape), + iri: newId, + }, + ]); + // Replace the nested schema with its new id. + pred.nestedSchema = newId; + + schema = { ...schema, ...flattened }; + } + // Flatten / Recurse + } + + return schema; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/shexjToTypingLdo.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/shexjToTypingLdo.ts new file mode 100644 index 0000000..d170eda --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/shexjToTypingLdo.ts @@ -0,0 +1,58 @@ +import type { ContextDefinition } from "jsonld"; +import type { Schema } from "@ldo/traverser-shexj"; +import { JsonLdContextBuilder } from "../context/JsonLdContextBuilder.js"; +import { ShexJNameVisitor } from "../context/ShexJContextVisitor.js"; +import { jsonld2graphobject } from "jsonld2graphobject"; +import { ShexJTypingTransformer } from "./ShexJTypingTransformer.js"; +import * as dom from "dts-dom"; + +export interface TypeingReturn { + typingsString: string; + typings: { + typingString: string; + dts: dom.TopLevelDeclaration; + }[]; +} + +export async function shexjToTypingLdo( + shexj: Schema, +): Promise<[TypeingReturn, ContextDefinition]> { + const processedShexj: Schema = (await jsonld2graphobject( + { + ...shexj, + "@id": "SCHEMA", + "@context": "http://www.w3.org/ns/shex.jsonld", + }, + "SCHEMA", + )) as unknown as Schema; + const jsonLdContextBuilder = new JsonLdContextBuilder(); + await ShexJNameVisitor.visit(processedShexj, "Schema", jsonLdContextBuilder); + + const declarations = await ShexJTypingTransformer.transform( + processedShexj, + "Schema", + { + getNameFromIri: + jsonLdContextBuilder.getNameFromIri.bind(jsonLdContextBuilder), + }, + ); + + const typings = declarations.map((declaration) => { + return { + typingString: dom + .emit(declaration, { + rootFlags: dom.ContextFlags.InAmbientNamespace, + }) + .replace(/\r\n/g, "\n"), + dts: declaration, + }; + }); + + const header = `import { LdSet, LdoJsonldContext } from "@ldo/ldo"\n\n`; + const typingsString = + header + typings.map((t) => `export ${t.typingString}`).join(""); + + const typeingReturn: TypeingReturn = { typingsString, typings }; + + return [typeingReturn, jsonLdContextBuilder.generateJsonldContext()]; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/util/dedupeObjectTypeMembers.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/util/dedupeObjectTypeMembers.ts new file mode 100644 index 0000000..b8f5caf --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/typing/util/dedupeObjectTypeMembers.ts @@ -0,0 +1,51 @@ +import type { ObjectTypeMember } from "dts-dom"; +import * as dom from "dts-dom"; + +export function dedupeObjectTypeMembers( + memberList: ObjectTypeMember[], +): ObjectTypeMember[] { + const properties: Record = {}; + memberList.forEach((expression) => { + const propertyDeclaration = expression as dom.PropertyDeclaration; + // Combine properties if they're duplicates + if (properties[propertyDeclaration.name]) { + const oldPropertyDeclaration = properties[propertyDeclaration.name]; + const oldPropertyType = isLdSetType(oldPropertyDeclaration.type) + ? oldPropertyDeclaration.type.typeArguments[0] + : oldPropertyDeclaration.type; + const propertyType = isLdSetType(propertyDeclaration.type) + ? propertyDeclaration.type.typeArguments[0] + : propertyDeclaration.type; + const isOptional = + propertyDeclaration.flags === dom.DeclarationFlags.Optional || + oldPropertyDeclaration.flags === dom.DeclarationFlags.Optional; + properties[propertyDeclaration.name] = dom.create.property( + propertyDeclaration.name, + { + kind: "name", + name: "LdSet", + typeArguments: [dom.create.union([oldPropertyType, propertyType])], + }, + isOptional ? dom.DeclarationFlags.Optional : dom.DeclarationFlags.None, + ); + // Set JS Comment + properties[propertyDeclaration.name].jsDocComment = + oldPropertyDeclaration.jsDocComment && propertyDeclaration.jsDocComment + ? `${oldPropertyDeclaration.jsDocComment} | ${propertyDeclaration.jsDocComment}` + : oldPropertyDeclaration.jsDocComment || + propertyDeclaration.jsDocComment; + } else { + properties[propertyDeclaration.name] = propertyDeclaration; + } + }); + return Object.values(properties); +} + +function isLdSetType( + potentialLdSet: dom.Type, +): potentialLdSet is dom.NamedTypeReference { + return ( + (potentialLdSet as dom.NamedTypeReference).kind === "name" && + (potentialLdSet as dom.NamedTypeReference).name === "LdSet" + ); +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/util/annotateReadablePredicates.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/util/annotateReadablePredicates.ts new file mode 100644 index 0000000..272027f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/util/annotateReadablePredicates.ts @@ -0,0 +1,133 @@ +import type { Schema, ShapeDecl, Shape, EachOf, TripleConstraint } from "shexj"; + +// Split IRI by colon, slash and hash; drop empties +const splitIriTokens = (iri: string): string[] => + iri.split(/[:/#]+/).filter(Boolean); +// Keep dots and dashes (so 0.1 stays as 0.1) but sanitize everything else +const sanitize = (s: string) => s.replace(/[^\w.\-]/g, "_"); + +type TCwReadable = TripleConstraint & { readablePredicate?: string }; + +/** + * Annotate EachOf-level TripleConstraints with a collision-free readablePredicate. + * Rule: for any group that shares the same local token, rename all members using + * prefix-first `${prefix}_${local}` from right to left; fallback to composite. + */ +export function annotateReadablePredicates(schema: Schema): void { + const shapes = schema.shapes ?? []; + + const annotateEachOf = (eachOf: EachOf): void => { + if ( + !eachOf || + eachOf.type !== "EachOf" || + !Array.isArray(eachOf.expressions) + ) + return; + + const tcs = (eachOf.expressions as unknown[]).filter( + (e): e is TCwReadable => + typeof e === "object" && + e !== null && + (e as any).type === "TripleConstraint", + ); + + if (tcs.length > 0) { + // Group by local token (last segment of IRI) and set a base readablePredicate for all + const groups = new Map(); + for (const tc of tcs) { + const tokens = splitIriTokens(tc.predicate); + const local = tokens.length ? tokens[tokens.length - 1] : tc.predicate; + // default base name for non-colliders + tc.readablePredicate = local; + const arr = groups.get(local) ?? []; + arr.push(tc); + groups.set(local, arr); + } + // Resolve each group (rename all in collisions) + for (const [, arr] of groups) { + if (arr.length <= 1) continue; + const used = new Set(); + const local = splitIriTokens(arr[0].predicate).slice(-1)[0] ?? ""; + for (const tc of arr) { + const tokens = splitIriTokens(tc.predicate); + let localIdx = tokens.lastIndexOf(local); + if (localIdx === -1) localIdx = Math.max(tokens.length - 1, 0); + let prefixIdx = localIdx - 1; + let assigned = false; + while (prefixIdx >= 0) { + const cand = `${sanitize(tokens[prefixIdx])}_${sanitize( + tokens[localIdx], + )}`; + if (!used.has(cand)) { + tc.readablePredicate = cand; + used.add(cand); + assigned = true; + break; + } + prefixIdx -= 1; + } + if (!assigned) { + const iriNoProto = tc.predicate.replace(/^[a-z]+:\/\//i, ""); + const composite = sanitize( + iriNoProto + .split(/[:/#]+/) + .slice(0, -1) + .join("_") || "iri", + ); + let cand = `${composite}_${sanitize(tokens[localIdx] || local)}`; + let n = 1; + while (used.has(cand)) cand = `${cand}_${n++}`; + tc.readablePredicate = cand; + used.add(cand); + } + } + } + + // Recurse into nested valueExpr shapes of each TC + for (const tc of tcs) { + const ve: any = (tc as any).valueExpr; + if (ve && typeof ve === "object") { + const t = (ve as any).type; + if (t === "Shape" && (ve as any).expression) + annotateEachOf((ve as any).expression as EachOf); + else if (t === "EachOf") annotateEachOf(ve as EachOf); + else if (t === "ShapeOr" && Array.isArray((ve as any).shapeExprs)) { + for (const sub of (ve as any).shapeExprs) annotateFromExpr(sub); + } else if ( + t === "ShapeAnd" && + Array.isArray((ve as any).shapeExprs) + ) { + for (const sub of (ve as any).shapeExprs) annotateFromExpr(sub); + } + } + } + } + + // Also recurse into any inline sub-EachOf/Shape expressions found directly in expressions + for (const ex of eachOf.expressions as any[]) { + if (ex && typeof ex === "object") annotateFromExpr(ex); + } + }; + + const annotateFromExpr = (expr: any): void => { + if (!expr || typeof expr !== "object") return; + const t = (expr as any).type; + if (t === "Shape" && (expr as any).expression) + annotateEachOf((expr as any).expression as EachOf); + else if (t === "EachOf") annotateEachOf(expr as EachOf); + else if (t === "ShapeOr" && Array.isArray((expr as any).shapeExprs)) { + for (const sub of (expr as any).shapeExprs) annotateFromExpr(sub); + } else if (t === "ShapeAnd" && Array.isArray((expr as any).shapeExprs)) { + for (const sub of (expr as any).shapeExprs) annotateFromExpr(sub); + } else if (t === "TripleConstraint") { + const ve = (expr as any).valueExpr; + if (ve && typeof ve === "object") annotateFromExpr(ve); + } + }; + + for (const s of shapes) { + const sd = s as ShapeDecl; + const shape = (sd.shapeExpr || (sd as any)) as Shape | undefined; + if (shape?.expression) annotateFromExpr(shape as any); + } +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/util/getRdfTypesForTripleConstraint.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/util/getRdfTypesForTripleConstraint.ts new file mode 100644 index 0000000..079951f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/src/util/getRdfTypesForTripleConstraint.ts @@ -0,0 +1,128 @@ +import type { + ShexJTraverserTypes, + tripleExprOrRef, +} from "@ldo/traverser-shexj"; +import type { InterfaceInstanceNode } from "@ldo/type-traverser"; + +function addRdfTypeFromTripleExpr( + tripleExpr: tripleExprOrRef, + rdfTypeSet: Set, +) { + if ( + typeof tripleExpr === "object" && + tripleExpr.type === "TripleConstraint" && + tripleExpr.predicate === + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" && + typeof tripleExpr.valueExpr === "object" && + tripleExpr.valueExpr.type === "NodeConstraint" && + tripleExpr.valueExpr.values + ) { + tripleExpr.valueExpr.values.forEach((val) => { + if (typeof val === "string") rdfTypeSet.add(val); + // TODO handle other edge cases like IRIStem + }); + } +} + +function recursivelyGatherTypesFromShapeNodes( + shapeNode: InterfaceInstanceNode< + ShexJTraverserTypes, + "Shape", + ShexJTraverserTypes["Shape"] + >, + rdfTypeSet: Set, +): void { + const tripleExpr = shapeNode.instance.expression; + if (tripleExpr) addRdfTypeFromTripleExpr(tripleExpr, rdfTypeSet); + + shapeNode.parent("shapeExpr").forEach((parentShapeExpr) => { + parentShapeExpr + .parent("ShapeDecl", "shapeExpr") + .forEach((parentShapeDecl) => { + parentShapeDecl + .parent("shapeDeclRef") + .forEach((parentShapeDeclOrRef) => { + parentShapeDeclOrRef + .parent("shapeExprOrRef") + .forEach((parentShapeExprOrRef) => { + parentShapeExprOrRef + .parent("Shape", "extends") + .forEach((parentShape) => { + recursivelyGatherTypesFromShapeNodes( + parentShape, + rdfTypeSet, + ); + const childExpressionNode = parentShape.child("expression"); + if (!childExpressionNode) return; + const childEachOf = childExpressionNode.child().child(); + if (childEachOf.typeName === "EachOf") { + recursivelyGatherTypesFromEachOfNodes( + childEachOf, + rdfTypeSet, + ); + } + }); + }); + }); + }); + }); +} + +function recursivelyGatherTypesFromEachOfNodes( + eachOfNode: InterfaceInstanceNode< + ShexJTraverserTypes, + "EachOf", + ShexJTraverserTypes["EachOf"] + >, + rdfTypeSet: Set, +): void { + const tripleExprs = eachOfNode.instance.expressions; + tripleExprs.forEach((tripleExpr) => { + addRdfTypeFromTripleExpr(tripleExpr, rdfTypeSet); + }); + + eachOfNode.parent("tripleExpr").forEach((tripleExprNode) => { + const tripleExprOrRefNodes = tripleExprNode.parent("tripleExprOrRef"); + tripleExprOrRefNodes.forEach((tripleExprOrRdfNode) => { + const parentEachOfs = tripleExprOrRdfNode.parent("EachOf", "expressions"); + parentEachOfs.forEach((parentEachOf) => { + recursivelyGatherTypesFromEachOfNodes(parentEachOf, rdfTypeSet); + }); + // Deal with shape extends + const parentShapes = tripleExprOrRdfNode.parent("Shape", "expression"); + parentShapes.forEach((parentShape) => + recursivelyGatherTypesFromShapeNodes(parentShape, rdfTypeSet), + ); + }); + }); +} + +export function getRdfTypesForTripleConstraint( + tripleConstraintNode: InterfaceInstanceNode< + ShexJTraverserTypes, + "TripleConstraint", + ShexJTraverserTypes["TripleConstraint"] + >, +): string[] | undefined[] { + // Check that there's a triple constraint that is a type at the + // same level if there is, use that as an rdfType + const rdfTypeSet = new Set(); + tripleConstraintNode.parent("tripleExpr").forEach((tripleExprParents) => { + tripleExprParents + .parent("tripleExprOrRef") + .forEach((tripleExprOrRefParent) => { + tripleExprOrRefParent + .parent("EachOf", "expressions") + .forEach((eachOfParent) => { + recursivelyGatherTypesFromEachOfNodes(eachOfParent, rdfTypeSet); + }); + tripleExprOrRefParent + .parent("Shape", "expression") + .forEach((shapeParent) => { + recursivelyGatherTypesFromShapeNodes(shapeParent, rdfTypeSet); + }); + }); + }); + const rdfTypes = rdfTypeSet.size > 0 ? Array.from(rdfTypeSet) : [undefined]; + return rdfTypes; +} diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/context.test.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/context.test.ts new file mode 100644 index 0000000..aa59230 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/context.test.ts @@ -0,0 +1,20 @@ +import { testData } from "./testData/testData.js"; +import { shexjToContext } from "../src/context/shexjToContext.js"; +import parser from "@shexjs/parser"; +import type { Schema } from "shexj"; + +console.warn = () => {}; + +describe("context", () => { + testData.forEach(({ name, shexc, successfulContext }) => { + // Skip entries with empty context placeholder (compact-only tests) + if (!successfulContext || !Object.keys(successfulContext).length) return; + it(`Creates a context for ${name}`, async () => { + const schema: Schema = parser + .construct("https://ldo.js.org/") + .parse(shexc); + const context = await shexjToContext(schema); + expect(context).toEqual(successfulContext); + }); + }); +}); diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/activityPub.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/activityPub.ts new file mode 100644 index 0000000..0c6f273 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/activityPub.ts @@ -0,0 +1,9015 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +import type { TestData } from "./testData.js"; + +/** + * Activity Pub + */ +export const activityPub: TestData = { + name: "activity pub", + shexc: ` + # ---------------------------------------------------- + # Shex (https://shex.io) shapes based on the activity + # streams spec (https://www.w3.org/TR/activitystreams-vocabulary) + # ---------------------------------------------------- + + PREFIX sra: + PREFIX as: + PREFIX xsd: + PREFIX rdf: + PREFIX rdfs: + + # ---------------------------------------------------- + # Object + # ---------------------------------------------------- + sra:ActivityPubObject EXTRA a { + $sra:ObjectShape ( + a [ as:Object ] + // rdfs:comment "Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection." ; + + (as:attachment @sra:ActivityPubObject * ; as:attachment @sra:Link *) + // rdfs:comment "Identifies a resource attached or related to an object that potentially requires special handling. The intent is to provide a model that is at least semantically similar to attachments in email." ; + + (as:attributedTo @sra:ActivityPubObject ; as:attributedTo @sra:Link *) + // rdfs:comment "Identifies one or more entities to which this object is attributed. The attributed entities might not be Actors. For instance, an object might be attributed to the completion of another activity." ; + + (as:audience @sra:ActivityPubObject * ; as:audience @sra:Link *) + // rdfs:comment "Identifies one or more entities that represent the total population of entities for which the object can considered to be relevant." ; + + (as:content xsd:string * ; as:content rdf:langString *) + // rdfs:comment "The content or textual representation of the Object encoded as a JSON string. By default, the value of content is HTML. The mediaType property can be used in the object to indicate a different content type. The content MAY be expressed using multiple language-tagged values. " ; + + (as:context @sra:ActivityPubObject * ; as:context @sra:Link *) + // rdfs:comment "Identifies the context within which the object exists or an activity was performed. The notion of \\"context\\" used is intentionally vague. The intended function is to serve as a means of grouping objects and activities that share a common originating context or purpose. An example could be all activities relating to a common project or event." ; + + (as:name xsd:string * ; as:name rdf:langString *) + // rdfs:comment "A simple, human-readable, plain-text name for the object. HTML markup MUST NOT be included. The name MAY be expressed using multiple language-tagged values." ; + + as:endTime xsd:dateTime ? + // rdfs:comment "The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude." ; + + (as:generator @sra:ActivityPubObject * ; as:generator @sra:Link *) + // rdfs:comment "Identifies the entity (e.g. an application) that generated the object. " ; + + (as:icon @sra:Image * ; as:icon @sra:Link *) + // rdfs:comment "Indicates an entity that describes an icon for this object. The image should have an aspect ratio of one (horizontal) to one (vertical) and should be suitable for presentation at a small size." ; + + (as:image @sra:Image * ; as:image @sra:Link *) + // rdfs:comment "Indicates an entity that describes an image for this object. Unlike the icon property, there are no aspect ratio or display size limitations assumed." ; + + (as:inReplyTo @sra:ActivityPubObject * ; as:inReplyTo @sra:Link *) + // rdfs:comment "Indicates one or more entities for which this object is considered a response." ; + + (as:location @sra:ActivityPubObject * ; as:location @sra:Link *) + // rdfs:comment "Indicates one or more physical or logical locations associated with the object." ; + + (as:preview @sra:ActivityPubObject * ; as:preview @sra:Link *) + // rdfs:comment "Identifies an entity that provides a preview of this object." ; + + as:published xsd:dateTime ? + // rdfs:comment "The date and time at which the object was published" ; + + as:replies @sra:Collection ? + // rdfs:comment "Identifies a Collection containing objects considered to be responses to this object." ; + + as:startTime xsd:dateTime ? + // rdfs:comment "The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin." ; + + (as:summary xsd:string * ; as:summary rdf:langString *) + // rdfs:comment "A natural language summarization of the object encoded as HTML. Multiple language tagged summaries MAY be provided." ; + + (as:tag @sra:ActivityPubObject * ; as:tag @sra:Link *) + // rdfs:comment "One or more \\"tags\\" that have been associated with an objects. A tag can be any kind of Object. The key difference between attachment and tag is that the former implies association by inclusion, while the latter implies associated by reference." ; + + as:updated xsd:dateTime ? + // rdfs:comment "The date and time at which the object was updated" ; + + (as:url xsd:anyURI * ; as:url @sra:Link *) + // rdfs:comment "Identifies one or more links to representations of the object" ; + + (as:to @sra:ActivityPubObject * ; as:to @sra:Link *) + // rdfs:comment "Identifies an entity considered to be part of the public primary audience of an Object" ; + + (as:bto @sra:ActivityPubObject * ; as:bto @sra:Link *) + // rdfs:comment "Identifies an Object that is part of the private primary audience of this Object." ; + + (as:cc @sra:ActivityPubObject * ; as:cc @sra:Link *) + // rdfs:comment "Identifies an Object that is part of the public secondary audience of this Object." ; + + (as:bcc @sra:ActivityPubObject * ; as:bcc @sra:Link *) + // rdfs:comment "Identifies one or more Objects that are part of the private secondary audience of this Object." ; + + as:mediaType xsd:string ? + // rdfs:comment "When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content." ; + + as:duration xsd:duration ? + // rdfs:comment "When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object's approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as \\"PT5S\\")." ; + ) ; + } + + # ---------------------------------------------------- + # Link + # ---------------------------------------------------- + sra:Link EXTRA a { + $sra:LinkShape ( + a [ as:Link ] + // rdfs:comment "A Link is an indirect, qualified reference to a resource identified by a URL. The fundamental model for links is established by [ RFC5988]. Many of the properties defined by the Activity Vocabulary allow values that are either instances of Object or Link. When a Link is used, it establishes a qualified relation connecting the subject (the containing object) to the resource identified by the href. Properties of the Link are properties of the reference as opposed to properties of the resource." ; + + as:href xsd:anyURI ? + // rdfs:comment "The target resource pointed to by a Link." ; + + as:rel xsd:string * + // rdfs:comment "A link relation associated with a Link. The value MUST conform to both the [HTML5] and [RFC5988] \\"link relation\\" definitions. In the [HTML5], any string not containing the \\"space\\" U+0020, \\"tab\\" (U+0009), \\"LF\\" (U+000A), \\"FF\\" (U+000C), \\"CR\\" (U+000D) or \\",\\" (U+002C) characters can be used as a valid link relation." ; + + as:mediaType xsd:string ? + // rdfs:comment "When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content." ; + + (as:name xsd:string * ; as:name rdf:langString *) + // rdfs:comment "A simple, human-readable, plain-text name for the object. HTML markup MUST NOT be included. The name MAY be expressed using multiple language-tagged values." ; + + as:hreflang xsd:string ? + // rdfs:comment "Hints as to the language used by the target resource. Value MUST be a [BCP47] Language-Tag." ; + + as:height xsd:nonNegativeInteger ? + // rdfs:comment "On a Link, specifies a hint as to the rendering height in device-independent pixels of the linked resource." ; + + as:width xsd:nonNegativeInteger ? + // rdfs:comment "On a Link, specifies a hint as to the rendering width in device-independent pixels of the linked resource." ; + + (as:preview @sra:ActivityPubObject * ; as:preview @sra:Link *) + // rdfs:comment "Identifies an entity that provides a preview of this object." ; + ) ; + } + + # ---------------------------------------------------- + # Activity + # ---------------------------------------------------- + sra:Activity EXTRA a { + $sra:ActivityShape ( + &sra:ObjectShape ; + a [ as:Activity ] + // rdfs:comment "An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken." ; + + (as:actor @sra:ActivityPubObject * ; as:actor @sra:Link *) + // rdfs:comment "Describes one or more entities that either performed or are expected to perform the activity. Any single activity can have multiple actors. The actor MAY be specified using an indirect Link." ; + + (as:object @sra:ActivityPubObject * ; as:object @sra:Link *) + // rdfs:comment "When used within an Activity, describes the direct object of the activity. For instance, in the activity \\"John added a movie to his wishlist\\", the object of the activity is the movie added. When used within a Relationship describes the entity to which the subject is related." ; + + (as:target @sra:ActivityPubObject * ; as:target @sra:Link *) + // rdfs:comment "Describes the indirect object, or target, of the activity. The precise meaning of the target is largely dependent on the type of action being described but will often be the object of the English preposition \\"to\\". For instance, in the activity \\"John added a movie to his wishlist\\", the target of the activity is John's wishlist. An activity can have more than one target." ; + + (as:result @sra:ActivityPubObject * ; as:result @sra:Link *) + // rdfs:comment "Describes the result of the activity. For instance, if a particular action results in the creation of a new resource, the result property can be used to describe that new resource." ; + + (as:origin @sra:ActivityPubObject * ; as:origin @sra:Link *) + // rdfs:comment "Describes an indirect object of the activity from which the activity is directed. The precise meaning of the origin is the object of the English preposition \\"from\\". For instance, in the activity \\"John moved an item to List B from List A\\", the origin of the activity is \\"List A\\". " ; + + (as:instrument @sra:ActivityPubObject * ; as:instrument @sra:Link *) + // rdfs:comment "Identifies one or more objects used (or to be used) in the completion of an Activity." ; + ) ; + } + + # ---------------------------------------------------- + # Intransitive Activity + # ---------------------------------------------------- + sra:InstransitiveActivity EXTRA a { + $sra:IntransitiveActivityShape ( + &sra:ActivityShape ; + a [ as:IntransitiveActivity ] + // rdfs:comment "Instances of IntransitiveActivity are a subtype of Activity representing intransitive actions. The object property is therefore inappropriate for these activities." ; + ) ; + } + + # ---------------------------------------------------- + # Collection + # ---------------------------------------------------- + sra:Collection EXTRA a { + $sra:CollectionShape ( + &sra:ObjectShape ; + a [ as:Collection ] + // rdfs:comment "A Collection is a subtype of Object that represents ordered or unordered sets of Object or Link instances. Refer to the Activity Streams 2.0 Core specification for a complete description of the Collection type. " ; + + as:totalItems xsd:nonNegativeInteger ? + // rdfs:comment "A non-negative integer specifying the total number of objects contained by the logical view of the collection. This number might not reflect the actual number of items serialized within the Collection object instance." ; + + (as:current @sra:CollectionPage ? | as:current @sra:Link ?) + // rdfs:comment "In a paged Collection, indicates the page that contains the most recently updated member items." ; + + (as:first @sra:CollectionPage ? | as:first @sra:Link ?) + // rdfs:comment "In a paged Collection, indicates the furthest preceeding page of items in the collection." ; + + (as:last @sra:CollectionPage ? | as:last @sra:Link ?) + // rdfs:comment "In a paged Collection, indicates the furthest proceeding page of the collection." ; + + (as:items @sra:ActivityPubObject * ; as:items @sra:Link *) + // rdfs:comment "Identifies the items contained in a collection. The items might be ordered or unordered. " ; + ) ; + } + + # ---------------------------------------------------- + # Ordered Collection + # ---------------------------------------------------- + sra:OrderedCollection EXTRA a { + $sra:OrderedCollectionShape ( + &sra:CollectionShape ; + a [ as:OrderedCollection ] + // rdfs:comment "A subtype of Collection in which members of the logical collection are assumed to always be strictly ordered." ; + ) ; + } + + # ---------------------------------------------------- + # Collection Page + # ---------------------------------------------------- + sra:CollectionPage EXTRA a { + $sra:CollectionPageShape ( + &sra:CollectionShape ; + a [ as:CollectionPage ] + // rdfs:comment "Used to represent distinct subsets of items from a Collection. Refer to the Activity Streams 2.0 Core for a complete description of the CollectionPage object." ; + + (as:partOf @sra:Link ? | as:partOf @sra:Collection ?) + // rdfs:comment "Identifies the Collection to which a CollectionPage objects items belong." ; + + (as:next @sra:CollectionPage ? | as:next @sra:Link ?) + // rdfs:comment "In a paged Collection, indicates the next page of items." ; + + (as:prev @sra:CollectionPage ? | as:next @sra:Link ?) + // rdfs:comment "In a paged Collection, identifies the previous page of items." ; + ) ; + } + + # ---------------------------------------------------- + # Ordered Collection Page + # ---------------------------------------------------- + sra:OrderedCollectionPage EXTRA a { + $sra:OrderedCollectionPageShape ( + &sra:OrderedCollectionShape ; + a [ as:OrderedCollectionPage ] + // rdfs:comment "Used to represent ordered subsets of items from an OrderedCollection. Refer to the Activity Streams 2.0 Core for a complete description of the OrderedCollectionPage object." ; + + as:startIndex xsd:nonNegativeInteger ? + // rdfs:comment "A non-negative integer value identifying the relative position within the logical view of a strictly ordered collection." + ) ; + } + + # ---------------------------------------------------- + # Accept + # ---------------------------------------------------- + sra:Accept EXTRA a { + $sra:AcceptShape ( + &sra:ActivityShape ; + a [ as:Accept ] + // rdfs:comment "Indicates that the actor accepts the object. The target property can be used in certain circumstances to indicate the context into which the object has been accepted." ; + ) ; + } + + # ---------------------------------------------------- + # TentativeAccept + # ---------------------------------------------------- + sra:TentativeAccept EXTRA a { + $sra:TentativeAcceptShape ( + &sra:AcceptShape ; + a [ as:TentativeAccept ] + // rdfs:comment "A specialization of Accept indicating that the acceptance is tentative." ; + ) ; + } + + # ---------------------------------------------------- + # Add + # ---------------------------------------------------- + sra:Add EXTRA a { + $sra:AddShape ( + &sra:ActivityShape ; + a [ as:Add ] + // rdfs:comment "Indicates that the actor has added the object to the target. If the target property is not explicitly specified, the target would need to be determined implicitly by context. The origin can be used to identify the context from which the object originated. " ; + ) ; + } + + # ---------------------------------------------------- + # Arrive + # ---------------------------------------------------- + sra:Arrive EXTRA a { + $sra:ArriveShape ( + &sra:IntransitiveActivityShape ; + a [ as:Arrive ] + // rdfs:comment "An IntransitiveActivity that indicates that the actor has arrived at the location. The origin can be used to identify the context from which the actor originated. The target typically has no defined meaning." ; + ) ; + } + + # ---------------------------------------------------- + # Create + # ---------------------------------------------------- + sra:Create EXTRA a { + $sra:CreateShape ( + &sra:ActivityShape ; + a [ as:Create ] + // rdfs:comment "Indicates that the actor has created the object." ; + ) ; + } + + # ---------------------------------------------------- + # Delete + # ---------------------------------------------------- + sra:Delete EXTRA a { + $sra:DeleteShape ( + &sra:ActivityShape ; + a [ as:Delete ] + // rdfs:comment "Indicates that the actor has deleted the object. If specified, the origin indicates the context from which the object was deleted." ; + ) ; + } + + # ---------------------------------------------------- + # Follow + # ---------------------------------------------------- + sra:Follow EXTRA a { + $sra:FollowShape ( + &sra:ActivityShape ; + a [ as:Follow ] + // rdfs:comment "Indicates that the actor is \\"following\\" the object. Following is defined in the sense typically used within Social systems in which the actor is interested in any activity performed by or on the object. The target and origin typically have no defined meaning." ; + ) ; + } + + # ---------------------------------------------------- + # Ignore + # ---------------------------------------------------- + sra:Ignore EXTRA a { + $sra:IgnoreShape ( + &sra:ActivityShape ; + a [ as:Ignore ] + // rdfs:comment "Indicates that the actor is ignoring the object. The target and origin typically have no defined meaning." ; + ) ; + } + + # ---------------------------------------------------- + # Join + # ---------------------------------------------------- + sra:Join EXTRA a { + $sra:JoinShape ( + &sra:ActivityShape ; + a [ as:Join ] + // rdfs:comment "Indicates that the actor has joined the object. The target and origin typically have no defined meaning." ; + ) ; + } + + # ---------------------------------------------------- + # Leave + # ---------------------------------------------------- + sra:Leave EXTRA a { + $sra:LeaveShape ( + &sra:ActivityShape ; + a [ as:Leave ] + // rdfs:comment "Indicates that the actor has left the object. The target and origin typically have no meaning." ; + ) ; + } + + # ---------------------------------------------------- + # Like + # ---------------------------------------------------- + sra:Like EXTRA a { + $sra:LikeShape ( + &sra:ActivityShape ; + a [ as:Like ] + // rdfs:comment "Indicates that the actor likes, recommends or endorses the object. The target and origin typically have no defined meaning." ; + ) ; + } + + # ---------------------------------------------------- + # Offer + # ---------------------------------------------------- + sra:Offer EXTRA a { + $sra:OfferShape ( + &sra:ActivityShape ; + a [ as:Offer ] + // rdfs:comment "Indicates that the actor is offering the object. If specified, the target indicates the entity to which the object is being offered." ; + ) ; + } + + # ---------------------------------------------------- + # Invite + # ---------------------------------------------------- + sra:Invite EXTRA a { + $sra:InviteShape ( + &sra:OfferShape ; + a [ as:Invite ] + // rdfs:comment "A specialization of Offer in which the actor is extending an invitation for the object to the target." ; + ) ; + } + + # ---------------------------------------------------- + # Reject + # ---------------------------------------------------- + sra:Reject EXTRA a { + $sra:RejectShape ( + &sra:ActivityShape ; + a [ as:Reject ] + // rdfs:comment "Indicates that the actor is rejecting the object. The target and origin typically have no defined meaning." ; + ) ; + } + + # ---------------------------------------------------- + # TentativeReject + # ---------------------------------------------------- + sra:TentativeReject EXTRA a { + $sra:TentativeRejectShape ( + &sra:RejectShape ; + a [ as:TentativeReject ] + // rdfs:comment "A specialization of Reject in which the rejection is considered tentative." ; + ) ; + } + + # ---------------------------------------------------- + # Remove + # ---------------------------------------------------- + sra:Remove EXTRA a { + $sra:RemoveShape ( + &sra:ActivityShape ; + a [ as:Remove ] + // rdfs:comment "Indicates that the actor is removing the object. If specified, the origin indicates the context from which the object is being removed." ; + ) ; + } + + # ---------------------------------------------------- + # Undo + # ---------------------------------------------------- + sra:Undo EXTRA a { + $sra:UndoShape ( + &sra:ActivityShape ; + a [ as:Undo ] + // rdfs:comment " Indicates that the actor is undoing the object. In most cases, the object will be an Activity describing some previously performed action (for instance, a person may have previously \\"liked\\" an article but, for whatever reason, might choose to undo that like at some later point in time). The target and origin typically have no defined meaning." ; + ) ; + } + + # ---------------------------------------------------- + # Update + # ---------------------------------------------------- + sra:Update EXTRA a { + $sra:UpdateShape ( + &sra:ActivityShape ; + a [ as:Update ] + // rdfs:comment "Indicates that the actor has updated the object. Note, however, that this vocabulary does not define a mechanism for describing the actual set of modifications made to object. The target and origin typically have no defined meaning." ; + ) ; + } + + # ---------------------------------------------------- + # View + # ---------------------------------------------------- + sra:View EXTRA a { + $sra:ViewShape ( + &sra:ActivityShape ; + a [ as:View ] + // rdfs:comment "Indicates that the actor has viewed the object." ; + ) ; + } + + # ---------------------------------------------------- + # Listen + # ---------------------------------------------------- + sra:Listen EXTRA a { + $sra:ListenShape ( + &sra:ActivityShape ; + a [ as:Listen ] + // rdfs:comment "Indicates that the actor has listened to the object." ; + ) ; + } + + # ---------------------------------------------------- + # Read + # ---------------------------------------------------- + sra:Read EXTRA a { + $sra:ReadShape ( + &sra:ActivityShape ; + a [ as:Read ] + // rdfs:comment "Indicates that the actor has read the object." ; + ) ; + } + + # ---------------------------------------------------- + # Move + # ---------------------------------------------------- + sra:Move EXTRA a { + $sra:MoveShape ( + &sra:ActivityShape ; + a [ as:Move ] + // rdfs:comment "Indicates that the actor has moved object from origin to target. If the origin or target are not specified, either can be determined by context." ; + ) ; + } + + # ---------------------------------------------------- + # Travel + # ---------------------------------------------------- + sra:Travel EXTRA a { + $sra:TravelShape ( + &sra:IntransitiveActivityShape ; + a [ as:Travel ] + // rdfs:comment "Indicates that the actor is traveling to target from origin. Travel is an IntransitiveObject whose actor specifies the direct object. If the target or origin are not specified, either can be determined by context." ; + ) ; + } + + # ---------------------------------------------------- + # Announce + # ---------------------------------------------------- + sra:Announce EXTRA a { + $sra:AnnounceShape ( + &sra:ActivityShape ; + a [ as:Announce ] + // rdfs:comment "Indicates that the actor is calling the target's attention the object. The origin typically has no defined meaning." ; + ) ; + } + + # ---------------------------------------------------- + # Block + # ---------------------------------------------------- + sra:Block EXTRA a { + $sra:BlockShape ( + &sra:IgnoreShape ; + a [ as:Block ] + // rdfs:comment "Indicates that the actor is blocking the object. Blocking is a stronger form of Ignore. The typical use is to support social systems that allow one user to block activities or content of other users. The target and origin typically have no defined meaning." ; + ) ; + } + + # ---------------------------------------------------- + # Flag + # ---------------------------------------------------- + sra:Flag EXTRA a { + $sra:FlagShape ( + &sra:ActivityShape ; + a [ as:Flag ] + // rdfs:comment "Indicates that the actor is \\"flagging\\" the object. Flagging is defined in the sense common to many social platforms as reporting content as being inappropriate for any number of reasons." ; + ) ; + } + + # ---------------------------------------------------- + # Dislike + # ---------------------------------------------------- + sra:Dislike EXTRA a { + $sra:DislikeShape ( + &sra:ActivityShape ; + a [ as:Dislike ] + // rdfs:comment "Indicates that the actor dislikes the object." ; + ) ; + } + + # ---------------------------------------------------- + # Question + # ---------------------------------------------------- + sra:Question EXTRA a { + $sra:QuestionShape ( + &sra:IntransitiveActivityShape ; + a [ as:Question ] + // rdfs:comment " Represents a question being asked. Question objects are an extension of IntransitiveActivity. That is, the Question object is an Activity, but the direct object is the question itself and therefore it would not contain an object property. Either of the anyOf and oneOf properties MAY be used to express possible answers, but a Question object MUST NOT have both properties. " ; + + ( + (as:oneOf @sra:ActivityPubObject * ; as:oneOf @sra:Link *) + // rdfs:comment " Identifies an exclusive option for a Question. Use of oneOf implies that the Question can have only a single answer. To indicate that a Question can have multiple answers, use anyOf." | + (as:anyOf @sra:ActivityPubObject * ; as:anyOf @sra:Link *) + // rdfs:comment " Identifies an inclusive option for a Question. Use of anyOf implies that the Question can have multiple answers. To indicate that a Question can have only one answer, use oneOf." + ) ; + + (as:closed @sra:ActivityPubObject * ; as:closed @sra:Link * ; as:closed xsd:dateTime ? ; as:closed xsd:boolean) + // rdfs:comment "Indicates that a question has been closed, and answers are no longer accepted." ; + ) ; + } + + # ---------------------------------------------------- + # Application + # ---------------------------------------------------- + sra:Application EXTRA a { + $sra:ApplicationShape ( + &sra:ObjectShape ; + a [ as:Application ] + // rdfs:comment "Describes a software application." ; + ) ; + } + + # ---------------------------------------------------- + # Group + # ---------------------------------------------------- + sra:Group EXTRA a { + $sra:GroupShape ( + &sra:ObjectShape ; + a [ as:Group ] + // rdfs:comment "Represents a formal or informal collective of Actors." ; + ) ; + } + + # ---------------------------------------------------- + # Organization + # ---------------------------------------------------- + sra:Organization EXTRA a { + $sra:OrganizationShape ( + &sra:ObjectShape ; + a [ as:Organization ] + // rdfs:comment "Represents an organization." ; + ) ; + } + + # ---------------------------------------------------- + # Person + # ---------------------------------------------------- + sra:Person EXTRA a { + $sra:PersonShape ( + &sra:ObjectShape ; + a [ as:Person ] + // rdfs:comment "Represents an individual person." ; + ) ; + } + + # ---------------------------------------------------- + # Service + # ---------------------------------------------------- + sra:Service EXTRA a { + $sra:ServiceShape ( + &sra:ObjectShape ; + a [ as:Service ] + // rdfs:comment "Represents a service of any kind." ; + ) ; + } + + # ---------------------------------------------------- + # Relationship + # ---------------------------------------------------- + sra:Relationship EXTRA a { + $sra:RelationshipShape ( + &sra:ObjectShape ; + a [ as:Relationship ] + // rdfs:comment " Describes a relationship between two individuals. The subject and object properties are used to identify the connected individuals. See 5.2 Representing Relationships Between Entities for additional information. " ; + + (as:subject @sra:ActivityPubObject ? | as:subject @sra:Link ?) + // rdfs:comment "On a Relationship object, the subject property identifies one of the connected individuals. For instance, for a Relationship object describing \\"John is related to Sally\\", subject would refer to John." ; + + (as:object @sra:ActivityPubObject ? | as:object @sra:Link ?) + // rdfs:comment "When used within an Activity, describes the direct object of the activity. For instance, in the activity \\"John added a movie to his wishlist\\", the object of the activity is the movie added. When used within a Relationship describes the entity to which the subject is related." ; + + as:relationship @sra:ActivityPubObject * + // rdfs:comment "On a Relationship object, the relationship property identifies the kind of relationship that exists between subject and object." + ) ; + } + + # ---------------------------------------------------- + # Article + # ---------------------------------------------------- + sra:Article EXTRA a { + $sra:ArticleShape ( + &sra:ObjectShape ; + a [ as:Article ] + // rdfs:comment "Represents any kind of multi-paragraph written work." ; + ) ; + } + + # ---------------------------------------------------- + # Document + # ---------------------------------------------------- + sra:Document EXTRA a { + $sra:DocumentShape ( + &sra:ObjectShape ; + a [ as:Document ] + // rdfs:comment "Represents a document of any kind." ; + ) ; + } + + # ---------------------------------------------------- + # Audio + # ---------------------------------------------------- + sra:Audio EXTRA a { + $sra:AudioShape ( + &sra:DocumentShape ; + a [ as:Audio ] + // rdfs:comment "Represents an audio document of any kind." ; + ) ; + } + + # ---------------------------------------------------- + # Image + # ---------------------------------------------------- + sra:Image EXTRA a { + $sra:ImageShape ( + &sra:DocumentShape ; + a [ as:Image ] + // rdfs:comment "An image document of any kind" ; + ) ; + } + + # ---------------------------------------------------- + # Video + # ---------------------------------------------------- + sra:Video EXTRA a { + $sra:VideoShape ( + &sra:DocumentShape ; + a [ as:Video ] + // rdfs:comment "Represents a video document of any kind. " ; + ) ; + } + + # ---------------------------------------------------- + # Note + # ---------------------------------------------------- + sra:Note EXTRA a { + $sra:NoteShape ( + &sra:ObjectShape ; + a [ as:Note ] + // rdfs:comment "Represents a short written work typically less than a single paragraph in length." ; + ) ; + } + + # ---------------------------------------------------- + # Page + # ---------------------------------------------------- + sra:Page EXTRA a { + $sra:PageShape ( + &sra:DocumentShape ; + a [ as:Page ] + // rdfs:comment "Represents a Web Page." ; + ) ; + } + + # ---------------------------------------------------- + # Event + # ---------------------------------------------------- + sra:Event EXTRA a { + $sra:EventShape ( + &sra:ObjectShape ; + a [ as:Event ] + // rdfs:comment "Represents any kind of event." ; + ) ; + } + + # ---------------------------------------------------- + # Place + # ---------------------------------------------------- + sra:Place EXTRA a { + $sra:PlaceShape ( + &sra:ObjectShape ; + a [ as:Place ] + // rdfs:comment "Represents a logical or physical location. See 5.3 Representing Places for additional information." ; + + as:accuracy xsd:float ? + // rdfs:comment "Indicates the accuracy of position coordinates on a Place objects. Expressed in properties of percentage. e.g. \\"94.0\\" means \\"94.0% accurate\\"." ; + + as:altitude xsd:float ? + // rdfs:comment "Indicates the altitude of a place. The measurement units is indicated using the units property. If units is not specified, the default is assumed to be \\"m\\" indicating meters. " ; + + as:latitude xsd:float ? + // rdfs:comment "The latitude of a place" ; + + as:latitude xsd:float ? + // rdfs:comment "The longitude of a place" ; + + as:radius xsd:float ? + // rdfs:comment "The radius from the given latitude and longitude for a Place. The units is expressed by the units property. If units is not specified, the default is assumed to be \\"m\\" indicating \\"meters\\"." ; + + (as:unit ["cm"^^xsd:string "feet"^^xsd:string "inches"^^xsd:string "km"^^xsd:string "m"^^xsd:string "miles"^^xsd:string ] ? | as:unit xsd:anyURI) + // rdfs:comment "Specifies the measurement units for the radius and altitude properties on a Place object. If not specified, the default is assumed to be \\"m\\" for \\"meters\\"." ; + ) ; + } + + # ---------------------------------------------------- + # Mention + # ---------------------------------------------------- + sra:Mention EXTRA a { + $sra:MentionShape ( + &sra:LinkShape ; + a [ as:Mention ] + // rdfs:comment "A specialized Link that represents an @mention." ; + ) ; + } + + # ---------------------------------------------------- + # Profile + # ---------------------------------------------------- + sra:Profile EXTRA a { + $sra:ProfileShape ( + &sra:ObjectShape ; + a [ as:Profile ] + // rdfs:comment "A Profile is a content object that describes another Object, typically used to describe Actor Type objects. The describes property is used to reference the object being described by the profile." ; + + as:describes @sra:ActivityPubObject ? + // rdfs:comment "On a Profile object, the describes property identifies the object described by the Profile." ; + ) ; + } + + # ---------------------------------------------------- + # Tombstone + # ---------------------------------------------------- + sra:Tombstone EXTRA a { + $sra:TombstoneShape ( + &sra:ObjectShape ; + a [ as:Tombstone ] + // rdfs:comment "A Tombstone represents a content object that has been deleted. It can be used in Collections to signify that there used to be an object at this position, but it has been deleted." ; + + as:formerType @sra:ActivityPubObject * + // rdfs:comment "On a Tombstone object, the formerType property identifies the type of the object that was deleted." ; + + as:deleted xsd:dateTime ? + // rdfs:comment "On a Tombstone object, the deleted property is a timestamp for when the object was deleted." ; + ) ; + } + `, + sampleTurtle: "", + baseNode: "", + successfulContext: { + type: { + "@id": "@type", + "@isCollection": true, + }, + Object: { + "@id": "https://www.w3.org/ns/activitystreams#Object", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + Link: { + "@id": "https://www.w3.org/ns/activitystreams#Link", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + href: { + "@id": "https://www.w3.org/ns/activitystreams#href", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + }, + rel: { + "@id": "https://www.w3.org/ns/activitystreams#rel", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + hreflang: { + "@id": "https://www.w3.org/ns/activitystreams#hreflang", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + height: { + "@id": "https://www.w3.org/ns/activitystreams#height", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + width: { + "@id": "https://www.w3.org/ns/activitystreams#width", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + href: { + "@id": "https://www.w3.org/ns/activitystreams#href", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + }, + rel: { + "@id": "https://www.w3.org/ns/activitystreams#rel", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + hreflang: { + "@id": "https://www.w3.org/ns/activitystreams#hreflang", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + height: { + "@id": "https://www.w3.org/ns/activitystreams#height", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + width: { + "@id": "https://www.w3.org/ns/activitystreams#width", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + Document: { + "@id": "https://www.w3.org/ns/activitystreams#Document", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Image: { + "@id": "https://www.w3.org/ns/activitystreams#Image", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + Collection: { + "@id": "https://www.w3.org/ns/activitystreams#Collection", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + totalItems: { + "@id": "https://www.w3.org/ns/activitystreams#totalItems", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + items: { + "@id": "https://www.w3.org/ns/activitystreams#items", + "@type": "@id", + "@isCollection": true, + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + totalItems: { + "@id": "https://www.w3.org/ns/activitystreams#totalItems", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + current: { + "@id": "https://www.w3.org/ns/activitystreams#current", + "@type": "@id", + }, + CollectionPage: { + "@id": "https://www.w3.org/ns/activitystreams#CollectionPage", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + totalItems: { + "@id": "https://www.w3.org/ns/activitystreams#totalItems", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + items: { + "@id": "https://www.w3.org/ns/activitystreams#items", + "@type": "@id", + "@isCollection": true, + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + partOf: { + "@id": "https://www.w3.org/ns/activitystreams#partOf", + "@type": "@id", + }, + next: { + "@id": "https://www.w3.org/ns/activitystreams#next", + "@type": "@id", + }, + prev: { + "@id": "https://www.w3.org/ns/activitystreams#prev", + "@type": "@id", + }, + first: { + "@id": "https://www.w3.org/ns/activitystreams#first", + "@type": "@id", + }, + last: { + "@id": "https://www.w3.org/ns/activitystreams#last", + "@type": "@id", + }, + items: { + "@id": "https://www.w3.org/ns/activitystreams#items", + "@type": "@id", + "@isCollection": true, + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + Activity: { + "@id": "https://www.w3.org/ns/activitystreams#Activity", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + IntransitiveActivity: { + "@id": "https://www.w3.org/ns/activitystreams#IntransitiveActivity", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + OrderedCollection: { + "@id": "https://www.w3.org/ns/activitystreams#OrderedCollection", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + totalItems: { + "@id": "https://www.w3.org/ns/activitystreams#totalItems", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + items: { + "@id": "https://www.w3.org/ns/activitystreams#items", + "@type": "@id", + "@isCollection": true, + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + OrderedCollectionPage: { + "@id": "https://www.w3.org/ns/activitystreams#OrderedCollectionPage", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + totalItems: { + "@id": "https://www.w3.org/ns/activitystreams#totalItems", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + items: { + "@id": "https://www.w3.org/ns/activitystreams#items", + "@type": "@id", + "@isCollection": true, + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + startIndex: { + "@id": "https://www.w3.org/ns/activitystreams#startIndex", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + }, + }, + startIndex: { + "@id": "https://www.w3.org/ns/activitystreams#startIndex", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + Accept: { + "@id": "https://www.w3.org/ns/activitystreams#Accept", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + TentativeAccept: { + "@id": "https://www.w3.org/ns/activitystreams#TentativeAccept", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Add: { + "@id": "https://www.w3.org/ns/activitystreams#Add", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Arrive: { + "@id": "https://www.w3.org/ns/activitystreams#Arrive", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Create: { + "@id": "https://www.w3.org/ns/activitystreams#Create", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Delete: { + "@id": "https://www.w3.org/ns/activitystreams#Delete", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Follow: { + "@id": "https://www.w3.org/ns/activitystreams#Follow", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Ignore: { + "@id": "https://www.w3.org/ns/activitystreams#Ignore", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Join: { + "@id": "https://www.w3.org/ns/activitystreams#Join", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Leave: { + "@id": "https://www.w3.org/ns/activitystreams#Leave", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Like: { + "@id": "https://www.w3.org/ns/activitystreams#Like", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Offer: { + "@id": "https://www.w3.org/ns/activitystreams#Offer", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Invite: { + "@id": "https://www.w3.org/ns/activitystreams#Invite", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Reject: { + "@id": "https://www.w3.org/ns/activitystreams#Reject", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + TentativeReject: { + "@id": "https://www.w3.org/ns/activitystreams#TentativeReject", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Remove: { + "@id": "https://www.w3.org/ns/activitystreams#Remove", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Undo: { + "@id": "https://www.w3.org/ns/activitystreams#Undo", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Update: { + "@id": "https://www.w3.org/ns/activitystreams#Update", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + View: { + "@id": "https://www.w3.org/ns/activitystreams#View", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Listen: { + "@id": "https://www.w3.org/ns/activitystreams#Listen", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Read: { + "@id": "https://www.w3.org/ns/activitystreams#Read", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Move: { + "@id": "https://www.w3.org/ns/activitystreams#Move", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Travel: { + "@id": "https://www.w3.org/ns/activitystreams#Travel", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Announce: { + "@id": "https://www.w3.org/ns/activitystreams#Announce", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Block: { + "@id": "https://www.w3.org/ns/activitystreams#Block", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Flag: { + "@id": "https://www.w3.org/ns/activitystreams#Flag", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Dislike: { + "@id": "https://www.w3.org/ns/activitystreams#Dislike", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Question: { + "@id": "https://www.w3.org/ns/activitystreams#Question", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + actor: { + "@id": "https://www.w3.org/ns/activitystreams#actor", + "@type": "@id", + "@isCollection": true, + }, + object: { + "@id": "https://www.w3.org/ns/activitystreams#object", + "@type": "@id", + "@isCollection": true, + }, + target: { + "@id": "https://www.w3.org/ns/activitystreams#target", + "@type": "@id", + "@isCollection": true, + }, + result: { + "@id": "https://www.w3.org/ns/activitystreams#result", + "@type": "@id", + "@isCollection": true, + }, + origin: { + "@id": "https://www.w3.org/ns/activitystreams#origin", + "@type": "@id", + "@isCollection": true, + }, + instrument: { + "@id": "https://www.w3.org/ns/activitystreams#instrument", + "@type": "@id", + "@isCollection": true, + }, + closed: { + "@id": "https://www.w3.org/ns/activitystreams#closed", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + oneOf: { + "@id": "https://www.w3.org/ns/activitystreams#oneOf", + "@type": "@id", + "@isCollection": true, + }, + anyOf: { + "@id": "https://www.w3.org/ns/activitystreams#anyOf", + "@type": "@id", + "@isCollection": true, + }, + closed: { + "@id": "https://www.w3.org/ns/activitystreams#closed", + "@type": "@id", + "@isCollection": true, + }, + Application: { + "@id": "https://www.w3.org/ns/activitystreams#Application", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Group: { + "@id": "https://www.w3.org/ns/activitystreams#Group", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Organization: { + "@id": "https://www.w3.org/ns/activitystreams#Organization", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Person: { + "@id": "https://www.w3.org/ns/activitystreams#Person", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Service: { + "@id": "https://www.w3.org/ns/activitystreams#Service", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Relationship: { + "@id": "https://www.w3.org/ns/activitystreams#Relationship", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + relationship: { + "@id": "https://www.w3.org/ns/activitystreams#relationship", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + subject: { + "@id": "https://www.w3.org/ns/activitystreams#subject", + "@type": "@id", + }, + relationship: { + "@id": "https://www.w3.org/ns/activitystreams#relationship", + "@type": "@id", + "@isCollection": true, + }, + Article: { + "@id": "https://www.w3.org/ns/activitystreams#Article", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Audio: { + "@id": "https://www.w3.org/ns/activitystreams#Audio", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Video: { + "@id": "https://www.w3.org/ns/activitystreams#Video", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Note: { + "@id": "https://www.w3.org/ns/activitystreams#Note", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Page: { + "@id": "https://www.w3.org/ns/activitystreams#Page", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Event: { + "@id": "https://www.w3.org/ns/activitystreams#Event", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + }, + }, + Place: { + "@id": "https://www.w3.org/ns/activitystreams#Place", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + accuracy: { + "@id": "https://www.w3.org/ns/activitystreams#accuracy", + "@type": "http://www.w3.org/2001/XMLSchema#float", + }, + altitude: { + "@id": "https://www.w3.org/ns/activitystreams#altitude", + "@type": "http://www.w3.org/2001/XMLSchema#float", + }, + latitude: { + "@id": "https://www.w3.org/ns/activitystreams#latitude", + "@type": "http://www.w3.org/2001/XMLSchema#float", + }, + radius: { + "@id": "https://www.w3.org/ns/activitystreams#radius", + "@type": "http://www.w3.org/2001/XMLSchema#float", + }, + }, + }, + accuracy: { + "@id": "https://www.w3.org/ns/activitystreams#accuracy", + "@type": "http://www.w3.org/2001/XMLSchema#float", + }, + altitude: { + "@id": "https://www.w3.org/ns/activitystreams#altitude", + "@type": "http://www.w3.org/2001/XMLSchema#float", + }, + latitude: { + "@id": "https://www.w3.org/ns/activitystreams#latitude", + "@type": "http://www.w3.org/2001/XMLSchema#float", + }, + radius: { + "@id": "https://www.w3.org/ns/activitystreams#radius", + "@type": "http://www.w3.org/2001/XMLSchema#float", + }, + unit: { + "@id": "https://www.w3.org/ns/activitystreams#unit", + "@isCollection": true, + }, + Mention: { + "@id": "https://www.w3.org/ns/activitystreams#Mention", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + href: { + "@id": "https://www.w3.org/ns/activitystreams#href", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + }, + rel: { + "@id": "https://www.w3.org/ns/activitystreams#rel", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + hreflang: { + "@id": "https://www.w3.org/ns/activitystreams#hreflang", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + height: { + "@id": "https://www.w3.org/ns/activitystreams#height", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + width: { + "@id": "https://www.w3.org/ns/activitystreams#width", + "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + Profile: { + "@id": "https://www.w3.org/ns/activitystreams#Profile", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + describes: { + "@id": "https://www.w3.org/ns/activitystreams#describes", + "@type": "@id", + }, + }, + }, + describes: { + "@id": "https://www.w3.org/ns/activitystreams#describes", + "@type": "@id", + }, + Tombstone: { + "@id": "https://www.w3.org/ns/activitystreams#Tombstone", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + attachment: { + "@id": "https://www.w3.org/ns/activitystreams#attachment", + "@type": "@id", + "@isCollection": true, + }, + attributedTo: { + "@id": "https://www.w3.org/ns/activitystreams#attributedTo", + "@type": "@id", + "@isCollection": true, + }, + audience: { + "@id": "https://www.w3.org/ns/activitystreams#audience", + "@type": "@id", + "@isCollection": true, + }, + content: { + "@id": "https://www.w3.org/ns/activitystreams#content", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + context: { + "@id": "https://www.w3.org/ns/activitystreams#context", + "@type": "@id", + "@isCollection": true, + }, + name: { + "@id": "https://www.w3.org/ns/activitystreams#name", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + endTime: { + "@id": "https://www.w3.org/ns/activitystreams#endTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + generator: { + "@id": "https://www.w3.org/ns/activitystreams#generator", + "@type": "@id", + "@isCollection": true, + }, + icon: { + "@id": "https://www.w3.org/ns/activitystreams#icon", + "@type": "@id", + "@isCollection": true, + }, + image: { + "@id": "https://www.w3.org/ns/activitystreams#image", + "@type": "@id", + "@isCollection": true, + }, + inReplyTo: { + "@id": "https://www.w3.org/ns/activitystreams#inReplyTo", + "@type": "@id", + "@isCollection": true, + }, + location: { + "@id": "https://www.w3.org/ns/activitystreams#location", + "@type": "@id", + "@isCollection": true, + }, + preview: { + "@id": "https://www.w3.org/ns/activitystreams#preview", + "@type": "@id", + "@isCollection": true, + }, + published: { + "@id": "https://www.w3.org/ns/activitystreams#published", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + replies: { + "@id": "https://www.w3.org/ns/activitystreams#replies", + "@type": "@id", + }, + startTime: { + "@id": "https://www.w3.org/ns/activitystreams#startTime", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + summary: { + "@id": "https://www.w3.org/ns/activitystreams#summary", + "@type": "http://www.w3.org/2001/XMLSchema#string", + "@isCollection": true, + }, + tag: { + "@id": "https://www.w3.org/ns/activitystreams#tag", + "@type": "@id", + "@isCollection": true, + }, + updated: { + "@id": "https://www.w3.org/ns/activitystreams#updated", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + url: { + "@id": "https://www.w3.org/ns/activitystreams#url", + "@type": "http://www.w3.org/2001/XMLSchema#anyURI", + "@isCollection": true, + }, + to: { + "@id": "https://www.w3.org/ns/activitystreams#to", + "@type": "@id", + "@isCollection": true, + }, + bto: { + "@id": "https://www.w3.org/ns/activitystreams#bto", + "@type": "@id", + "@isCollection": true, + }, + cc: { + "@id": "https://www.w3.org/ns/activitystreams#cc", + "@type": "@id", + "@isCollection": true, + }, + bcc: { + "@id": "https://www.w3.org/ns/activitystreams#bcc", + "@type": "@id", + "@isCollection": true, + }, + mediaType: { + "@id": "https://www.w3.org/ns/activitystreams#mediaType", + "@type": "http://www.w3.org/2001/XMLSchema#string", + }, + duration: { + "@id": "https://www.w3.org/ns/activitystreams#duration", + "@type": "http://www.w3.org/2001/XMLSchema#duration", + }, + formerType: { + "@id": "https://www.w3.org/ns/activitystreams#formerType", + "@type": "@id", + "@isCollection": true, + }, + deleted: { + "@id": "https://www.w3.org/ns/activitystreams#deleted", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + }, + }, + formerType: { + "@id": "https://www.w3.org/ns/activitystreams#formerType", + "@type": "@id", + "@isCollection": true, + }, + deleted: { + "@id": "https://www.w3.org/ns/activitystreams#deleted", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + }, + }, + successfulTypings: + 'import { LdSet, LdoJsonldContext } from "@ldo/ldo"\n\nexport interface ActivityPubObject {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection.\n */\n type: LdSet<{\n "@id": "Object";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Link {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * A Link is an indirect, qualified reference to a resource identified by a URL. The fundamental model for links is established by [ RFC5988]. Many of the properties defined by the Activity Vocabulary allow values that are either instances of Object or Link. When a Link is used, it establishes a qualified relation connecting the subject (the containing object) to the resource identified by the href. Properties of the Link are properties of the reference as opposed to properties of the resource.\n */\n type: LdSet<{\n "@id": "Link";\n }>;\n /**\n * The target resource pointed to by a Link.\n */\n href?: string;\n /**\n * A link relation associated with a Link. The value MUST conform to both the [HTML5] and [RFC5988] "link relation" definitions. In the [HTML5], any string not containing the "space" U+0020, "tab" (U+0009), "LF" (U+000A), "FF" (U+000C), "CR" (U+000D) or "," (U+002C) characters can be used as a valid link relation.\n */\n rel?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n name?: LdSet;\n /**\n * Hints as to the language used by the target resource. Value MUST be a [BCP47] Language-Tag.\n */\n hreflang?: string;\n /**\n * On a Link, specifies a hint as to the rendering height in device-independent pixels of the linked resource.\n */\n height?: number;\n /**\n * On a Link, specifies a hint as to the rendering width in device-independent pixels of the linked resource.\n */\n width?: number;\n preview?: LdSet;\n}\n\nexport interface Activity {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface InstransitiveActivity {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Instances of IntransitiveActivity are a subtype of Activity representing intransitive actions. The object property is therefore inappropriate for these activities.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "IntransitiveActivity";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Collection {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | A Collection is a subtype of Object that represents ordered or unordered sets of Object or Link instances. Refer to the Activity Streams 2.0 Core specification for a complete description of the Collection type. \n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Collection";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n /**\n * A non-negative integer specifying the total number of objects contained by the logical view of the collection. This number might not reflect the actual number of items serialized within the Collection object instance.\n */\n totalItems?: number;\n items?: LdSet;\n}\n\nexport interface OrderedCollection {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | A Collection is a subtype of Object that represents ordered or unordered sets of Object or Link instances. Refer to the Activity Streams 2.0 Core specification for a complete description of the Collection type. | A subtype of Collection in which members of the logical collection are assumed to always be strictly ordered.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Collection";\n } | {\n "@id": "OrderedCollection";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n /**\n * A non-negative integer specifying the total number of objects contained by the logical view of the collection. This number might not reflect the actual number of items serialized within the Collection object instance.\n */\n totalItems?: number;\n items?: LdSet;\n}\n\nexport interface CollectionPage {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | A Collection is a subtype of Object that represents ordered or unordered sets of Object or Link instances. Refer to the Activity Streams 2.0 Core specification for a complete description of the Collection type. | Used to represent distinct subsets of items from a Collection. Refer to the Activity Streams 2.0 Core for a complete description of the CollectionPage object.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Collection";\n } | {\n "@id": "CollectionPage";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n /**\n * A non-negative integer specifying the total number of objects contained by the logical view of the collection. This number might not reflect the actual number of items serialized within the Collection object instance.\n */\n totalItems?: number;\n items?: LdSet;\n}\n\nexport interface OrderedCollectionPage {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | A Collection is a subtype of Object that represents ordered or unordered sets of Object or Link instances. Refer to the Activity Streams 2.0 Core specification for a complete description of the Collection type. | A subtype of Collection in which members of the logical collection are assumed to always be strictly ordered. | Used to represent ordered subsets of items from an OrderedCollection. Refer to the Activity Streams 2.0 Core for a complete description of the OrderedCollectionPage object.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Collection";\n } | {\n "@id": "OrderedCollection";\n } | {\n "@id": "OrderedCollectionPage";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n /**\n * A non-negative integer specifying the total number of objects contained by the logical view of the collection. This number might not reflect the actual number of items serialized within the Collection object instance.\n */\n totalItems?: number;\n items?: LdSet;\n /**\n * A non-negative integer value identifying the relative position within the logical view of a strictly ordered collection.\n */\n startIndex?: number;\n}\n\nexport interface Accept {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor accepts the object. The target property can be used in certain circumstances to indicate the context into which the object has been accepted.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Accept";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface TentativeAccept {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor accepts the object. The target property can be used in certain circumstances to indicate the context into which the object has been accepted. | A specialization of Accept indicating that the acceptance is tentative.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Accept";\n } | {\n "@id": "TentativeAccept";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Add {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor has added the object to the target. If the target property is not explicitly specified, the target would need to be determined implicitly by context. The origin can be used to identify the context from which the object originated. \n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Add";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Arrive {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Instances of IntransitiveActivity are a subtype of Activity representing intransitive actions. The object property is therefore inappropriate for these activities. | An IntransitiveActivity that indicates that the actor has arrived at the location. The origin can be used to identify the context from which the actor originated. The target typically has no defined meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "IntransitiveActivity";\n } | {\n "@id": "Arrive";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Create {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor has created the object.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Create";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Delete {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor has deleted the object. If specified, the origin indicates the context from which the object was deleted.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Delete";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Follow {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is "following" the object. Following is defined in the sense typically used within Social systems in which the actor is interested in any activity performed by or on the object. The target and origin typically have no defined meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Follow";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Ignore {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is ignoring the object. The target and origin typically have no defined meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Ignore";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Join {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor has joined the object. The target and origin typically have no defined meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Join";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Leave {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor has left the object. The target and origin typically have no meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Leave";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Like {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor likes, recommends or endorses the object. The target and origin typically have no defined meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Like";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Offer {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is offering the object. If specified, the target indicates the entity to which the object is being offered.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Offer";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Invite {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is offering the object. If specified, the target indicates the entity to which the object is being offered. | A specialization of Offer in which the actor is extending an invitation for the object to the target.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Offer";\n } | {\n "@id": "Invite";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Reject {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is rejecting the object. The target and origin typically have no defined meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Reject";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface TentativeReject {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is rejecting the object. The target and origin typically have no defined meaning. | A specialization of Reject in which the rejection is considered tentative.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Reject";\n } | {\n "@id": "TentativeReject";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Remove {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is removing the object. If specified, the origin indicates the context from which the object is being removed.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Remove";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Undo {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is undoing the object. In most cases, the object will be an Activity describing some previously performed action (for instance, a person may have previously "liked" an article but, for whatever reason, might choose to undo that like at some later point in time). The target and origin typically have no defined meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Undo";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Update {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor has updated the object. Note, however, that this vocabulary does not define a mechanism for describing the actual set of modifications made to object. The target and origin typically have no defined meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Update";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface View {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor has viewed the object.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "View";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Listen {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor has listened to the object.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Listen";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Read {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor has read the object.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Read";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Move {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor has moved object from origin to target. If the origin or target are not specified, either can be determined by context.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Move";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Travel {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Instances of IntransitiveActivity are a subtype of Activity representing intransitive actions. The object property is therefore inappropriate for these activities. | Indicates that the actor is traveling to target from origin. Travel is an IntransitiveObject whose actor specifies the direct object. If the target or origin are not specified, either can be determined by context.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "IntransitiveActivity";\n } | {\n "@id": "Travel";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Announce {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is calling the target\'s attention the object. The origin typically has no defined meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Announce";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Block {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is ignoring the object. The target and origin typically have no defined meaning. | Indicates that the actor is blocking the object. Blocking is a stronger form of Ignore. The typical use is to support social systems that allow one user to block activities or content of other users. The target and origin typically have no defined meaning.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Ignore";\n } | {\n "@id": "Block";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Flag {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor is "flagging" the object. Flagging is defined in the sense common to many social platforms as reporting content as being inappropriate for any number of reasons.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Flag";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Dislike {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Indicates that the actor dislikes the object.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "Dislike";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n}\n\nexport interface Question {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | An Activity is a subtype of Object that describes some form of action that may happen, is currently happening, or has already happened. The Activity type itself serves as an abstract base type for all types of activities. It is important to note that the Activity type itself does not carry any specific semantics about the kind of action being taken. | Instances of IntransitiveActivity are a subtype of Activity representing intransitive actions. The object property is therefore inappropriate for these activities. | Represents a question being asked. Question objects are an extension of IntransitiveActivity. That is, the Question object is an Activity, but the direct object is the question itself and therefore it would not contain an object property. Either of the anyOf and oneOf properties MAY be used to express possible answers, but a Question object MUST NOT have both properties. \n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Activity";\n } | {\n "@id": "IntransitiveActivity";\n } | {\n "@id": "Question";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n actor?: LdSet;\n object?: LdSet;\n target?: LdSet;\n result?: LdSet;\n origin?: LdSet;\n instrument?: LdSet;\n closed?: LdSet;\n}\n\nexport interface Application {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Describes a software application.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Application";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Group {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents a formal or informal collective of Actors.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Group";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Organization {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents an organization.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Organization";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Person {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents an individual person.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Person";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Service {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents a service of any kind.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Service";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Relationship {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Describes a relationship between two individuals. The subject and object properties are used to identify the connected individuals. See 5.2 Representing Relationships Between Entities for additional information. \n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Relationship";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n /**\n * On a Relationship object, the relationship property identifies the kind of relationship that exists between subject and object.\n */\n relationship?: LdSet;\n}\n\nexport interface Article {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents any kind of multi-paragraph written work.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Article";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Document {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents a document of any kind.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Document";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Audio {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents a document of any kind. | Represents an audio document of any kind.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Document";\n } | {\n "@id": "Audio";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Image {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents a document of any kind. | An image document of any kind\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Document";\n } | {\n "@id": "Image";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Video {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents a document of any kind. | Represents a video document of any kind. \n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Document";\n } | {\n "@id": "Video";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Note {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents a short written work typically less than a single paragraph in length.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Note";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Page {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents a document of any kind. | Represents a Web Page.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Document";\n } | {\n "@id": "Page";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Event {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents any kind of event.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Event";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n}\n\nexport interface Place {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | Represents a logical or physical location. See 5.3 Representing Places for additional information.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Place";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n /**\n * Indicates the accuracy of position coordinates on a Place objects. Expressed in properties of percentage. e.g. "94.0" means "94.0% accurate".\n */\n accuracy?: number;\n /**\n * Indicates the altitude of a place. The measurement units is indicated using the units property. If units is not specified, the default is assumed to be "m" indicating meters. \n */\n altitude?: number;\n /**\n * The latitude of a place | The longitude of a place\n */\n latitude?: LdSet;\n /**\n * The radius from the given latitude and longitude for a Place. The units is expressed by the units property. If units is not specified, the default is assumed to be "m" indicating "meters".\n */\n radius?: number;\n}\n\nexport interface Mention {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * A Link is an indirect, qualified reference to a resource identified by a URL. The fundamental model for links is established by [ RFC5988]. Many of the properties defined by the Activity Vocabulary allow values that are either instances of Object or Link. When a Link is used, it establishes a qualified relation connecting the subject (the containing object) to the resource identified by the href. Properties of the Link are properties of the reference as opposed to properties of the resource. | A specialized Link that represents an @mention.\n */\n type: LdSet<{\n "@id": "Link";\n } | {\n "@id": "Mention";\n }>;\n /**\n * The target resource pointed to by a Link.\n */\n href?: string;\n /**\n * A link relation associated with a Link. The value MUST conform to both the [HTML5] and [RFC5988] "link relation" definitions. In the [HTML5], any string not containing the "space" U+0020, "tab" (U+0009), "LF" (U+000A), "FF" (U+000C), "CR" (U+000D) or "," (U+002C) characters can be used as a valid link relation.\n */\n rel?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n name?: LdSet;\n /**\n * Hints as to the language used by the target resource. Value MUST be a [BCP47] Language-Tag.\n */\n hreflang?: string;\n /**\n * On a Link, specifies a hint as to the rendering height in device-independent pixels of the linked resource.\n */\n height?: number;\n /**\n * On a Link, specifies a hint as to the rendering width in device-independent pixels of the linked resource.\n */\n width?: number;\n preview?: LdSet;\n}\n\nexport interface Profile {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | A Profile is a content object that describes another Object, typically used to describe Actor Type objects. The describes property is used to reference the object being described by the profile.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Profile";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n /**\n * On a Profile object, the describes property identifies the object described by the Profile.\n */\n describes?: ActivityPubObject;\n}\n\nexport interface Tombstone {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n /**\n * Describes an object of any kind. The Object type serves as the base type for most of the other kinds of objects defined in the Activity Vocabulary, including other Core types such as Activity, IntransitiveActivity, Collection and OrderedCollection. | A Tombstone represents a content object that has been deleted. It can be used in Collections to signify that there used to be an object at this position, but it has been deleted.\n */\n type: LdSet<{\n "@id": "Object";\n } | {\n "@id": "Tombstone";\n }>;\n attachment?: LdSet;\n attributedTo?: LdSet;\n audience?: LdSet;\n content?: LdSet;\n context?: LdSet;\n name?: LdSet;\n /**\n * The date and time describing the actual or expected ending time of the object. When used with an Activity object, for instance, the endTime property specifies the moment the activity concluded or is expected to conclude.\n */\n endTime?: string;\n generator?: LdSet;\n icon?: LdSet;\n image?: LdSet;\n inReplyTo?: LdSet;\n location?: LdSet;\n preview?: LdSet;\n /**\n * The date and time at which the object was published\n */\n published?: string;\n /**\n * Identifies a Collection containing objects considered to be responses to this object.\n */\n replies?: Collection;\n /**\n * The date and time describing the actual or expected starting time of the object. When used with an Activity object, for instance, the startTime property specifies the moment the activity began or is scheduled to begin.\n */\n startTime?: string;\n summary?: LdSet;\n tag?: LdSet;\n /**\n * The date and time at which the object was updated\n */\n updated?: string;\n url?: LdSet;\n to?: LdSet;\n bto?: LdSet;\n cc?: LdSet;\n bcc?: LdSet;\n /**\n * When used on a Link, identifies the MIME media type of the referenced resource. When used on an Object, identifies the MIME media type of the value of the content property. If not specified, the content property is assumed to contain text/html content.\n */\n mediaType?: string;\n /**\n * When the object describes a time-bound resource, such as an audio or video, a meeting, etc, the duration property indicates the object\'s approximate duration. The value MUST be expressed as an xsd:duration as defined by [ xmlschema11-2], section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").\n */\n duration?: string;\n /**\n * On a Tombstone object, the formerType property identifies the type of the object that was deleted.\n */\n formerType?: LdSet;\n /**\n * On a Tombstone object, the deleted property is a timestamp for when the object was deleted.\n */\n deleted?: string;\n}\n\n', +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/andSimple.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/andSimple.ts new file mode 100644 index 0000000..0840b73 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/andSimple.ts @@ -0,0 +1,69 @@ +import type { TestData } from "./testData.js"; + +/** + * AND SIMPLE + */ +export const andSimple: TestData = { + name: "andSimple", + shexc: ` + PREFIX ex: + + ex:MediaContainerShape { + a [ ex:MediaContainer ]; + ex:videoImage (@ex:VideoShape AND @ex:ImageShape) ; + } + + ex:VideoShape { + a [ ex:Video ]; + } + + ex:ImageShape { + a [ ex:Image ]; + } + `, + sampleTurtle: "", + baseNode: "", + successfulContext: { + type: { + "@id": "@type", + "@isCollection": true, + }, + MediaContainer: { + "@id": "https://example.com/MediaContainer", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + videoImage: { + "@id": "https://example.com/videoImage", + "@type": "@id", + }, + }, + }, + videoImage: { + "@id": "https://example.com/videoImage", + "@type": "@id", + }, + Video: { + "@id": "https://example.com/Video", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + }, + }, + Image: { + "@id": "https://example.com/Image", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + }, + }, + }, + successfulTypings: + 'import { LdSet, LdoJsonldContext } from "@ldo/ldo"\n\nexport interface MediaContainer {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "MediaContainer";\n }>;\n videoImage: Video & Image;\n}\n\nexport interface Video {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "Video";\n }>;\n}\n\nexport interface Image {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "Image";\n }>;\n}\n\n', +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/circular.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/circular.ts new file mode 100644 index 0000000..21d1b3a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/circular.ts @@ -0,0 +1,76 @@ +import type { TestData } from "./testData.js"; + +/** + * Circular + */ +export const circular: TestData = { + name: "circular", + shexc: ` + PREFIX example: + + example:ParentShape { + a [ example:Parent ]? ; + example:hasChild @example:ChildShape ; + } + + example:ChildShape { + a [ example:Child ]? ; + example:hasParent @example:ParentShape ; + } + `, + sampleTurtle: ` + @prefix example: . + + example:SampleParent + a example:Parent ; + example:hasChild example:SampleChild . + + example:SampleChild + a example:Child ; + example:hasParent example:SampleParent . + `, + baseNode: "http://example.com/SampleParent", + successfulContext: { + type: { + "@id": "@type", + "@isCollection": true, + }, + Parent: { + "@id": "http://example.com/Parent", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + hasChild: { + "@id": "http://example.com/hasChild", + "@type": "@id", + }, + }, + }, + hasChild: { + "@id": "http://example.com/hasChild", + "@type": "@id", + }, + Child: { + "@id": "http://example.com/Child", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + hasParent: { + "@id": "http://example.com/hasParent", + "@type": "@id", + }, + }, + }, + hasParent: { + "@id": "http://example.com/hasParent", + "@type": "@id", + }, + }, + successfulTypings: + 'import { LdSet, LdoJsonldContext } from "@ldo/ldo"\n\nexport interface Parent {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type?: LdSet<{\n "@id": "Parent";\n }>;\n hasChild: Child;\n}\n\nexport interface Child {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type?: LdSet<{\n "@id": "Child";\n }>;\n hasParent: Parent;\n}\n\n', + successfulCompactTypings: `export type IRI = string;\n\nexport interface Parent {\n id: IRI;\n /**\n * Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type\n */\n type?: "http://example.com/Parent";\n /**\n * Original IRI: http://example.com/hasChild\n */\n hasChild: Child;\n}\n\nexport interface Child {\n id: IRI;\n /**\n * Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type\n */\n type?: "http://example.com/Child";\n /**\n * Original IRI: http://example.com/hasParent\n */\n hasParent: Parent;\n}\n\n`, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/eachOfAndSimple.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/eachOfAndSimple.ts new file mode 100644 index 0000000..d4983dc --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/eachOfAndSimple.ts @@ -0,0 +1,60 @@ +import type { TestData } from "./testData.js"; + +/** + * EACH OF AND SIMPLE + */ +export const eachOfAndSimple: TestData = { + name: "eachOfAndSimple", + shexc: ` + PREFIX ex: + + ex:MediaContainerShape { + a [ ex:MediaContainer ]; + } + + ex:VideoShape { + a [ ex:Video ]; + } + + ex:ImageShape { + a [ ex:Image ]; + } + `, + sampleTurtle: "", + baseNode: "", + successfulContext: { + type: { + "@id": "@type", + "@isCollection": true, + }, + MediaContainer: { + "@id": "https://example.com/MediaContainer", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + }, + }, + Video: { + "@id": "https://example.com/Video", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + }, + }, + Image: { + "@id": "https://example.com/Image", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + }, + }, + }, + successfulTypings: + 'import { LdSet, LdoJsonldContext } from "@ldo/ldo"\n\nexport interface MediaContainer {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "MediaContainer";\n }>;\n}\n\nexport interface Video {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "Video";\n }>;\n}\n\nexport interface Image {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "Image";\n }>;\n}\n\n', +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/extendsSimple.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/extendsSimple.ts new file mode 100644 index 0000000..315e34f --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/extendsSimple.ts @@ -0,0 +1,84 @@ +import type { TestData } from "./testData.js"; + +/** + * Circular + */ +export const extendsSimple: TestData = { + name: "extends simple", + shexc: ` + PREFIX ex: + PREFIX foaf: + + ex:EntityShape { + a [ ex:Entity ] ; + ex:entityId . + } + + ex:PersonShape EXTENDS @ex:EntityShape { + a [ ex:Person ] ; + foaf:name . + } + + ex:EmployeeShape EXTENDS @ex:PersonShape { + a [ ex:Employee ] ; + ex:employeeNumber . + } + `, + sampleTurtle: ` + @prefix example: . + + example:SampleParent + a example:Parent ; + example:hasChild example:SampleChild . + + example:SampleChild + a example:Child ; + example:hasParent example:SampleParent . + `, + baseNode: "http://example.com/SampleParent", + successfulContext: { + type: { + "@id": "@type", + "@isCollection": true, + }, + Entity: { + "@id": "https://example.com/Entity", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + entityId: "https://example.com/entityId", + }, + }, + entityId: "https://example.com/entityId", + Person: { + "@id": "https://example.com/Person", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + entityId: "https://example.com/entityId", + name: "http://xmlns.com/foaf/0.1/name", + }, + }, + name: "http://xmlns.com/foaf/0.1/name", + Employee: { + "@id": "https://example.com/Employee", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + entityId: "https://example.com/entityId", + name: "http://xmlns.com/foaf/0.1/name", + employeeNumber: "https://example.com/employeeNumber", + }, + }, + employeeNumber: "https://example.com/employeeNumber", + }, + successfulTypings: + 'import { LdSet, LdoJsonldContext } from "@ldo/ldo"\n\nexport interface Entity {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "Entity";\n }>;\n entityId: any;\n}\n\nexport interface Person {\n "@id"?: LdSet;\n "@context"?: LdSet;\n type: LdSet<{\n "@id": "Entity";\n } | {\n "@id": "Person";\n }>;\n entityId: any;\n name: any;\n}\n\nexport interface Employee {\n "@id"?: LdSet;\n "@context"?: LdSet;\n type: LdSet<{\n "@id": "Entity";\n } | {\n "@id": "Person";\n } | {\n "@id": "Employee";\n }>;\n entityId: any;\n name: any;\n employeeNumber: any;\n}\n\n', + successfulCompactTypings: `export type IRI = string;\n\nexport interface Entity {\n id: IRI;\n /**\n * Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type\n */\n type: "https://example.com/Entity";\n /**\n * Original IRI: https://example.com/entityId\n */\n entityId: any;\n}\n\nexport interface Person {\n /**\n * Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type | Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type\n */\n type: "https://example.com/Entity" | "https://example.com/Person";\n /**\n * Original IRI: https://example.com/entityId\n */\n entityId: any;\n id: IRI;\n /**\n * Original IRI: http://xmlns.com/foaf/0.1/name\n */\n name: any;\n}\n\nexport interface Employee {\n /**\n * Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type | Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type | Original IRI: http://www.w3.org/1999/02/22-rdf-syntax-ns#type\n */\n type: "https://example.com/Entity" | "https://example.com/Person" | "https://example.com/Employee";\n /**\n * Original IRI: https://example.com/entityId\n */\n entityId: any;\n /**\n * Original IRI: http://xmlns.com/foaf/0.1/name\n */\n name: any;\n id: IRI;\n /**\n * Original IRI: https://example.com/employeeNumber\n */\n employeeNumber: any;\n}\n\n`, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/mixedPluralUnionError.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/mixedPluralUnionError.ts new file mode 100644 index 0000000..6c23f53 --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/mixedPluralUnionError.ts @@ -0,0 +1,17 @@ +import type { TestData } from "./testData.js"; + +export const mixedPluralUnionError: TestData = { + name: "mixed plural union error", + shexc: ` + PREFIX ex: + PREFIX xsd: + ex:FooShape { ex:mixed ( @ex:BarShape OR @ex:BazShape )* } + ex:BarShape { ex:label . } + ex:BazShape { ex:other . } + `, + sampleTurtle: ``, + baseNode: "http://ex/foo2", + successfulContext: {}, + successfulTypings: "", + successfulCompactTypings: `export type IRI = string;\n\nexport interface Foo {\n id: IRI;\n /**\n * Original IRI: http://ex/mixed\n */\n mixed?: Record;\n}\n\nexport interface Bar {\n id: IRI;\n /**\n * Original IRI: http://ex/label\n */\n label: any;\n}\n\nexport interface Baz {\n id: IRI;\n /**\n * Original IRI: http://ex/other\n */\n other: any;\n}\n\n`, +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/multipleSharedPredicates.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/multipleSharedPredicates.ts new file mode 100644 index 0000000..ebb1c5a --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/multipleSharedPredicates.ts @@ -0,0 +1,60 @@ +import type { TestData } from "./testData.js"; + +/** + * MULTIPLE CONSTRAINTS + */ +export const multipleSharedPredicates: TestData = { + name: "multipleSharedPredicates", + shexc: ` + PREFIX ex: + + ex:MediaContainerShape { + a [ ex:Media ]; + a [ ex:Video ]; + ex:something [ ex:OtherThing ]; + ex:something [ ex:Thing3 ]; + } + `, + sampleTurtle: "", + baseNode: "", + successfulContext: { + type: { + "@id": "@type", + "@isCollection": true, + }, + Media: { + "@id": "https://example.com/Media", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + something: { + "@id": "https://example.com/something", + "@isCollection": true, + }, + }, + }, + Video: { + "@id": "https://example.com/Video", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + something: { + "@id": "https://example.com/something", + "@isCollection": true, + }, + }, + }, + something: { + "@id": "https://example.com/something", + "@isCollection": true, + }, + OtherThing: "https://example.com/OtherThing", + Thing3: "https://example.com/Thing3", + }, + successfulTypings: + 'import { LdSet, LdoJsonldContext } from "@ldo/ldo"\n\nexport interface MediaContainer {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "Media";\n } | {\n "@id": "Video";\n }>;\n something: LdSet<{\n "@id": "OtherThing";\n } | {\n "@id": "Thing3";\n }>;\n}\n\n', +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/oldExtends.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/oldExtends.ts new file mode 100644 index 0000000..08bd89b --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/oldExtends.ts @@ -0,0 +1,88 @@ +import type { TestData } from "./testData.js"; + +/** + * Old Extends + */ +export const oldExtends: TestData = { + name: "old extends", + shexc: ` + PREFIX ex: + PREFIX foaf: + + ex:EntityShape EXTRA a { + $ex:EntityRef ( + a [ ex:Entity ] ; + ex:entityId . + ) + } + + ex:PersonShape EXTRA a { + $ex:PersonRef ( + &ex:EntityRef ; + a [ ex:Person ] ; + foaf:name . + ) + } + + ex:EmployeeShape EXTRA a { + &ex:PersonRef ; + a [ ex:Employee ] ; + ex:employeeNumber . + } + `, + sampleTurtle: ` + @prefix ex: . + @prefix xsd: . + @prefix foaf: . + + ex:SampleEmployee + ex:entityId "123"^^xsd:integer ; + foaf:name "Jacko" ; + ex:employeeNumber "456"^^xsd:integer ; + `, + baseNode: "http://example.com/SampleParent", + successfulContext: { + type: { + "@id": "@type", + "@isCollection": true, + }, + Entity: { + "@id": "https://example.com/Entity", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + entityId: "https://example.com/entityId", + }, + }, + entityId: "https://example.com/entityId", + Person: { + "@id": "https://example.com/Person", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + entityId: "https://example.com/entityId", + name: "http://xmlns.com/foaf/0.1/name", + }, + }, + name: "http://xmlns.com/foaf/0.1/name", + Employee: { + "@id": "https://example.com/Employee", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + entityId: "https://example.com/entityId", + name: "http://xmlns.com/foaf/0.1/name", + employeeNumber: "https://example.com/employeeNumber", + }, + }, + employeeNumber: "https://example.com/employeeNumber", + }, + successfulTypings: + 'import { LdSet, LdoJsonldContext } from "@ldo/ldo"\n\nexport interface Entity {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "Entity";\n }>;\n entityId: any;\n}\n\nexport interface Person {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "Entity";\n } | {\n "@id": "Person";\n }>;\n entityId: any;\n name: any;\n}\n\nexport interface Employee {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "Entity";\n } | {\n "@id": "Person";\n } | {\n "@id": "Employee";\n }>;\n entityId: any;\n name: any;\n employeeNumber: any;\n}\n\n', +}; diff --git a/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/orSimple.ts b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/orSimple.ts new file mode 100644 index 0000000..55dadcf --- /dev/null +++ b/sdk/ng-sdk-js/ng-ldo-compact/packages/schema-converter-shex/test/testData/orSimple.ts @@ -0,0 +1,80 @@ +import type { TestData } from "./testData.js"; + +/** + * OR SIMPLE + */ +export const orSimple: TestData = { + name: "orSimple", + shexc: ` + PREFIX ex: + + ex:MediaContainerShape { + a [ ex:MediaContainer ]; + ex:primaryMedia (@ex:VideoShape OR @ex:ImageShape) ; + ex:media (@ex:VideoShape OR @ex:ImageShape) * ; + } + + ex:VideoShape { + a [ ex:Video ]; + } + + ex:ImageShape { + a [ ex:Image ]; + } + `, + sampleTurtle: "", + baseNode: "", + successfulContext: { + type: { + "@id": "@type", + "@isCollection": true, + }, + MediaContainer: { + "@id": "https://example.com/MediaContainer", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + primaryMedia: { + "@id": "https://example.com/primaryMedia", + "@type": "@id", + }, + media: { + "@id": "https://example.com/media", + "@type": "@id", + "@isCollection": true, + }, + }, + }, + primaryMedia: { + "@id": "https://example.com/primaryMedia", + "@type": "@id", + }, + Video: { + "@id": "https://example.com/Video", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + }, + }, + Image: { + "@id": "https://example.com/Image", + "@context": { + type: { + "@id": "@type", + "@isCollection": true, + }, + }, + }, + media: { + "@id": "https://example.com/media", + "@type": "@id", + "@isCollection": true, + }, + }, + successfulTypings: + 'import { LdSet, LdoJsonldContext } from "@ldo/ldo"\n\nexport interface MediaContainer {\n "@id"?: string;\n "@context"?: LdoJsonldContext;\n type: LdSet<{\n "@id": "MediaContainer";\n }>;\n primaryMedia: Video | Image;\n media?: LdSet