diff --git a/.changeset/brown-deers-report.md b/.changeset/brown-deers-report.md new file mode 100644 index 0000000000..dc3d665434 --- /dev/null +++ b/.changeset/brown-deers-report.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/core-components': patch +--- + +Right align metric labels in dimension grid diff --git a/.changeset/cold-bats-smash.md b/.changeset/cold-bats-smash.md new file mode 100644 index 0000000000..77ef5ac630 --- /dev/null +++ b/.changeset/cold-bats-smash.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/core-components': patch +--- + +Adjust default margin on input components diff --git a/.changeset/large-shirts-sing.md b/.changeset/large-shirts-sing.md new file mode 100644 index 0000000000..791ae01657 --- /dev/null +++ b/.changeset/large-shirts-sing.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/core-components': minor +--- + +add `Fullscreen` component and use it in `DataTable` diff --git a/.changeset/late-mails-grin.md b/.changeset/late-mails-grin.md new file mode 100644 index 0000000000..1ee996007f --- /dev/null +++ b/.changeset/late-mails-grin.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/evidence': patch +--- + +Reduces the amount of data returned in the pages manifest diff --git a/.changeset/proud-apes-rhyme.md b/.changeset/proud-apes-rhyme.md new file mode 100644 index 0000000000..d07ef4f30f --- /dev/null +++ b/.changeset/proud-apes-rhyme.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/component-utilities': patch +--- + +fix regression to resize behavior in echarts diff --git a/.changeset/red-beans-cheat.md b/.changeset/red-beans-cheat.md new file mode 100644 index 0000000000..91359ebe0e --- /dev/null +++ b/.changeset/red-beans-cheat.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/core-components': minor +--- + +adds `default` prop to `ButtonGroupItem`s allowing for a default selected item diff --git a/.changeset/shy-beers-knock.md b/.changeset/shy-beers-knock.md new file mode 100644 index 0000000000..edd29dcedc --- /dev/null +++ b/.changeset/shy-beers-knock.md @@ -0,0 +1,13 @@ +--- +'@evidence-dev/component-utilities': minor +'@evidence-dev/core-components': minor +'@evidence-dev/evidence': minor +'@evidence-dev/faker-datasource': minor +'@evidence-dev/plugin-connector': minor +'@evidence-dev/preprocess': minor +'@evidence-dev/query-store': minor +'@evidence-dev/tailwind': minor +'@evidence-dev/universal-sql': minor +--- + +- Updated major dependencies (Svelte, SvelteKit, Vite) to improve memory usage when building diff --git a/.changeset/soft-candles-trade.md b/.changeset/soft-candles-trade.md new file mode 100644 index 0000000000..4ab90b30b1 --- /dev/null +++ b/.changeset/soft-candles-trade.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/core-components': patch +--- + +fix single row `Value` and `BigValue` regressions diff --git a/.changeset/sour-pugs-applaud.md b/.changeset/sour-pugs-applaud.md new file mode 100644 index 0000000000..e480186da4 --- /dev/null +++ b/.changeset/sour-pugs-applaud.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/core-components': patch +--- + +remove `Fuse` from running on the server and `convertColumnToDate` from running on date columns diff --git a/.changeset/tall-coins-complain.md b/.changeset/tall-coins-complain.md new file mode 100644 index 0000000000..ae6ef0686f --- /dev/null +++ b/.changeset/tall-coins-complain.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/core-components': patch +--- + +Make query error messages copyable diff --git a/.changeset/tall-goats-turn.md b/.changeset/tall-goats-turn.md new file mode 100644 index 0000000000..f1274fbc96 --- /dev/null +++ b/.changeset/tall-goats-turn.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/component-utilities': patch +--- + +fixes null columns erroring when formatting diff --git a/.changeset/twelve-kings-admire.md b/.changeset/twelve-kings-admire.md new file mode 100644 index 0000000000..4a875050ea --- /dev/null +++ b/.changeset/twelve-kings-admire.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/query-store': patch +--- + +use unresolvable promise is `noResolve` is true diff --git a/.changeset/warm-pigs-develop.md b/.changeset/warm-pigs-develop.md new file mode 100644 index 0000000000..6ed3b618c2 --- /dev/null +++ b/.changeset/warm-pigs-develop.md @@ -0,0 +1,5 @@ +--- +'@evidence-dev/core-components': patch +--- + +Remove right margin on header diff --git a/.eslintignore b/.eslintignore index 2db9fc1f38..be42723138 100644 --- a/.eslintignore +++ b/.eslintignore @@ -26,3 +26,5 @@ yarn.lock # Ignore this file because it uses top-level await and ESLint can't parse that. packages/evidence/scripts/svelte.config.js +**/node_modules +**/**/node_modules \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 6ff76ecdcb..2a75e0eae3 100644 --- a/.prettierignore +++ b/.prettierignore @@ -26,3 +26,7 @@ yarn.lock **/sites/example-project/src/pages/**/+page.md **/sites/test-env/pages/**/* **/static/data/* + +**/node_modules +**/**/node_modules +packages/lib/sdk/types \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index a77fddea90..3f7802c372 100644 --- a/.prettierrc +++ b/.prettierrc @@ -4,6 +4,12 @@ "trailingComma": "none", "printWidth": 100, "plugins": ["prettier-plugin-svelte"], - "pluginSearchDirs": ["."], - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] } diff --git a/package.json b/package.json index e99dcfdf56..100a466f19 100644 --- a/package.json +++ b/package.json @@ -2,20 +2,21 @@ "devDependencies": { "@changesets/cli": "2.21.0", "@duckdb/duckdb-wasm": "1.28.0", - "@evidence-dev/component-utilities": "link:packages/component-utilities", - "@evidence-dev/core-components": "link:packages/core-components", - "@evidence-dev/db-orchestrator": "link:packages/db-orchestrator", + "@evidence-dev/component-utilities": "link:packages/lib/component-utilities", + "@evidence-dev/core-components": "link:packages/ui/core-components", + "@evidence-dev/db-orchestrator": "link:packages/lib/db-orchestrator", "@evidence-dev/evidence": "link:packages/evidence", - "@evidence-dev/plugin-connector": "link:packages/plugin-connector", - "@evidence-dev/preprocess": "link:packages/preprocess", - "@evidence-dev/query-store": "link:packages/query-store", - "@evidence-dev/tailwind": "link:packages/tailwind", - "@evidence-dev/telemetry": "link:packages/telemetry", - "@evidence-dev/universal-sql": "link:packages/universal-sql", + "@evidence-dev/plugin-connector": "link:packages/lib/plugin-connector", + "@evidence-dev/preprocess": "link:packages/lib/preprocess", + "@evidence-dev/query-store": "link:packages/lib/query-store", + "@evidence-dev/tailwind": "link:packages/ui/tailwind", + "@evidence-dev/telemetry": "link:packages/lib/telemetry", + "@evidence-dev/universal-sql": "link:packages/lib/universal-sql", "@parcel/packager-ts": "2.12.0", "@parcel/transformer-typescript-types": "2.9.3", - "@sveltejs/adapter-static": "2.0.2", - "@sveltejs/kit": "1.22.3", + "@sveltejs/adapter-static": "3.0.1", + "@sveltejs/kit": "2.5.4", + "@sveltejs/vite-plugin-svelte": "3.0.2", "@tidyjs/tidy": "2.5.2", "blueimp-md5": "2.19.0", "chroma-js": "^2.4.2", @@ -27,25 +28,25 @@ "echarts-stat": "1.2.0", "eslint": "8.45.0", "eslint-config-prettier": "^8.10.0", - "eslint-plugin-svelte3": "^4.0.0", + "eslint-plugin-svelte": "2.35.1", "export-to-csv": "0.2.1", "fs-extra": "11.2.0", "git-remote-origin-url": "4.0.0", "npm-run-all": "^4.1.5", - "prettier": "^2.8.8", - "prettier-plugin-svelte": "^2.10.1", + "prettier": "^3.1.0", + "prettier-plugin-svelte": "^3.1.2", "prismjs": "1.29.0", "remark-parse": "8.0.2", "ssf": "^0.11.2", - "svelte": "3.59.2", + "svelte": "4.2.12", "svelte-icons": "2.1.0", "svelte-preprocess": "5.1.3", - "svelte2tsx": "0.6.0", - "typescript": "4.9.5", + "svelte2tsx": "0.7.4", + "typescript": "5.4.2", "unified": "9.1.0", "unist-util-visit": "4.1.2", "uvu": "0.5.2", - "vite": "4.3.9", + "vite": "5.1.6", "express": "^4.18.3", "get-port": "^7.0.0", "http-proxy": "^1.18.1", @@ -67,21 +68,21 @@ "docs": "pnpm --filter ./sites/docs start", "lint": "prettier --plugin-search-dir . --check . && eslint .", "format": "prettier --plugin-search-dir . --write .", - "package:core-components": "pnpm --filter ./packages/core-components package", + "package:core-components": "pnpm --filter ./packages/ui/core-components package", "package:evidence": "pnpm --filter ./packages/evidence package", "build:evidence": "pnpm --filter ./packages/evidence build", - "build:preprocess": "pnpm --filter ./packages/preprocess build", - "build:plugin-connector": "pnpm --filter ./packages/plugin-connector build", + "build:preprocess": "pnpm --filter ./packages/lib/preprocess build", + "build:plugin-connector": "pnpm --filter ./packages/lib/plugin-connector build", "build:example-project": "pnpm --filter ./sites/example-project build", - "build:tailwind": "pnpm --filter ./packages/tailwind build", - "build:query-store": "pnpm --filter ./packages/query-store build", + "build:tailwind": "pnpm --filter ./packages/ui/tailwind build", + "build:query-store": "pnpm --filter ./packages/lib/query-store build", "dev:example-project": "pnpm --filter ./sites/example-project dev", "dev:test-env": "pnpm --filter ./sites/test-env dev", - "dev:core-components": "pnpm --filter ./packages/core-components package:watch", + "dev:core-components": "pnpm --filter ./packages/ui/core-components package:watch", "sources:example-project": "pnpm --filter ./sites/example-project sources", "sources:test-env": "pnpm --filter ./sites/test-env sources", "preview:test-env": "pnpm --filter ./sites/test-env preview", - "test:component-utilities:watch": "pnpm --filter ./packages/component-utilities test:watch" + "test:component-utilities:watch": "pnpm --filter ./packages/lib/component-utilities test:watch" }, "pnpm": { "overrides": { diff --git a/packages/bigquery/.gitignore b/packages/datasources/bigquery/.gitignore similarity index 100% rename from packages/bigquery/.gitignore rename to packages/datasources/bigquery/.gitignore diff --git a/packages/bigquery/CHANGELOG.md b/packages/datasources/bigquery/CHANGELOG.md similarity index 100% rename from packages/bigquery/CHANGELOG.md rename to packages/datasources/bigquery/CHANGELOG.md diff --git a/packages/bigquery/README.md b/packages/datasources/bigquery/README.md similarity index 100% rename from packages/bigquery/README.md rename to packages/datasources/bigquery/README.md diff --git a/packages/bigquery/index.cjs b/packages/datasources/bigquery/index.cjs similarity index 100% rename from packages/bigquery/index.cjs rename to packages/datasources/bigquery/index.cjs diff --git a/packages/bigquery/package.json b/packages/datasources/bigquery/package.json similarity index 100% rename from packages/bigquery/package.json rename to packages/datasources/bigquery/package.json diff --git a/packages/bigquery/test/test.js b/packages/datasources/bigquery/test/test.js similarity index 100% rename from packages/bigquery/test/test.js rename to packages/datasources/bigquery/test/test.js diff --git a/packages/csv/.gitignore b/packages/datasources/csv/.gitignore similarity index 100% rename from packages/csv/.gitignore rename to packages/datasources/csv/.gitignore diff --git a/packages/csv/CHANGELOG.md b/packages/datasources/csv/CHANGELOG.md similarity index 100% rename from packages/csv/CHANGELOG.md rename to packages/datasources/csv/CHANGELOG.md diff --git a/packages/csv/README.md b/packages/datasources/csv/README.md similarity index 100% rename from packages/csv/README.md rename to packages/datasources/csv/README.md diff --git a/packages/csv/index.cjs b/packages/datasources/csv/index.cjs similarity index 100% rename from packages/csv/index.cjs rename to packages/datasources/csv/index.cjs diff --git a/packages/csv/package.json b/packages/datasources/csv/package.json similarity index 100% rename from packages/csv/package.json rename to packages/datasources/csv/package.json diff --git a/packages/csv/test/test.js b/packages/datasources/csv/test/test.js similarity index 100% rename from packages/csv/test/test.js rename to packages/datasources/csv/test/test.js diff --git a/packages/databricks/CHANGELOG.md b/packages/datasources/databricks/CHANGELOG.md similarity index 100% rename from packages/databricks/CHANGELOG.md rename to packages/datasources/databricks/CHANGELOG.md diff --git a/packages/databricks/README.md b/packages/datasources/databricks/README.md similarity index 100% rename from packages/databricks/README.md rename to packages/datasources/databricks/README.md diff --git a/packages/databricks/index.cjs b/packages/datasources/databricks/index.cjs similarity index 100% rename from packages/databricks/index.cjs rename to packages/datasources/databricks/index.cjs diff --git a/packages/databricks/package.json b/packages/datasources/databricks/package.json similarity index 100% rename from packages/databricks/package.json rename to packages/datasources/databricks/package.json diff --git a/packages/databricks/test/test.js b/packages/datasources/databricks/test/test.js similarity index 100% rename from packages/databricks/test/test.js rename to packages/datasources/databricks/test/test.js diff --git a/packages/duckdb/.gitignore b/packages/datasources/duckdb/.gitignore similarity index 100% rename from packages/duckdb/.gitignore rename to packages/datasources/duckdb/.gitignore diff --git a/packages/duckdb/CHANGELOG.md b/packages/datasources/duckdb/CHANGELOG.md similarity index 100% rename from packages/duckdb/CHANGELOG.md rename to packages/datasources/duckdb/CHANGELOG.md diff --git a/packages/duckdb/README.md b/packages/datasources/duckdb/README.md similarity index 100% rename from packages/duckdb/README.md rename to packages/datasources/duckdb/README.md diff --git a/packages/duckdb/index.cjs b/packages/datasources/duckdb/index.cjs similarity index 100% rename from packages/duckdb/index.cjs rename to packages/datasources/duckdb/index.cjs diff --git a/packages/duckdb/package.json b/packages/datasources/duckdb/package.json similarity index 100% rename from packages/duckdb/package.json rename to packages/datasources/duckdb/package.json diff --git a/packages/duckdb/test/test.js b/packages/datasources/duckdb/test/test.js similarity index 100% rename from packages/duckdb/test/test.js rename to packages/datasources/duckdb/test/test.js diff --git a/packages/faker-datasource/CHANGELOG.md b/packages/datasources/faker/CHANGELOG.md similarity index 100% rename from packages/faker-datasource/CHANGELOG.md rename to packages/datasources/faker/CHANGELOG.md diff --git a/packages/faker-datasource/bin.mjs b/packages/datasources/faker/bin.mjs similarity index 100% rename from packages/faker-datasource/bin.mjs rename to packages/datasources/faker/bin.mjs diff --git a/packages/faker-datasource/filter.mjs b/packages/datasources/faker/filter.mjs similarity index 100% rename from packages/faker-datasource/filter.mjs rename to packages/datasources/faker/filter.mjs diff --git a/packages/faker-datasource/index.mjs b/packages/datasources/faker/index.mjs similarity index 100% rename from packages/faker-datasource/index.mjs rename to packages/datasources/faker/index.mjs diff --git a/packages/faker-datasource/lib.mjs b/packages/datasources/faker/lib.mjs similarity index 100% rename from packages/faker-datasource/lib.mjs rename to packages/datasources/faker/lib.mjs diff --git a/packages/faker-datasource/package.json b/packages/datasources/faker/package.json similarity index 96% rename from packages/faker-datasource/package.json rename to packages/datasources/faker/package.json index 3a347a4dd5..dc571155af 100644 --- a/packages/faker-datasource/package.json +++ b/packages/datasources/faker/package.json @@ -26,7 +26,7 @@ "zod": "^3.21.4" }, "devDependencies": { - "typescript": "4.9.5" + "typescript": "5.4.2" }, "evidence": { "datasources": [ diff --git a/packages/faker-datasource/schemas/base.schema.mjs b/packages/datasources/faker/schemas/base.schema.mjs similarity index 100% rename from packages/faker-datasource/schemas/base.schema.mjs rename to packages/datasources/faker/schemas/base.schema.mjs diff --git a/packages/faker-datasource/schemas/faker.schema.mjs b/packages/datasources/faker/schemas/faker.schema.mjs similarity index 100% rename from packages/faker-datasource/schemas/faker.schema.mjs rename to packages/datasources/faker/schemas/faker.schema.mjs diff --git a/packages/faker-datasource/schemas/index.mjs b/packages/datasources/faker/schemas/index.mjs similarity index 100% rename from packages/faker-datasource/schemas/index.mjs rename to packages/datasources/faker/schemas/index.mjs diff --git a/packages/faker-datasource/schemas/literal.schema.mjs b/packages/datasources/faker/schemas/literal.schema.mjs similarity index 100% rename from packages/faker-datasource/schemas/literal.schema.mjs rename to packages/datasources/faker/schemas/literal.schema.mjs diff --git a/packages/faker-datasource/schemas/series.schema.mjs b/packages/datasources/faker/schemas/series.schema.mjs similarity index 100% rename from packages/faker-datasource/schemas/series.schema.mjs rename to packages/datasources/faker/schemas/series.schema.mjs diff --git a/packages/faker-datasource/series/buildSeriesSource.mjs b/packages/datasources/faker/series/buildSeriesSource.mjs similarity index 100% rename from packages/faker-datasource/series/buildSeriesSource.mjs rename to packages/datasources/faker/series/buildSeriesSource.mjs diff --git a/packages/faker-datasource/series/categorical.series.mjs b/packages/datasources/faker/series/categorical.series.mjs similarity index 100% rename from packages/faker-datasource/series/categorical.series.mjs rename to packages/datasources/faker/series/categorical.series.mjs diff --git a/packages/faker-datasource/series/numeric.series.mjs b/packages/datasources/faker/series/numeric.series.mjs similarity index 100% rename from packages/faker-datasource/series/numeric.series.mjs rename to packages/datasources/faker/series/numeric.series.mjs diff --git a/packages/faker-datasource/series/types.d.ts b/packages/datasources/faker/series/types.d.ts similarity index 100% rename from packages/faker-datasource/series/types.d.ts rename to packages/datasources/faker/series/types.d.ts diff --git a/packages/faker-datasource/social-media/build-social-media.mjs b/packages/datasources/faker/social-media/build-social-media.mjs similarity index 100% rename from packages/faker-datasource/social-media/build-social-media.mjs rename to packages/datasources/faker/social-media/build-social-media.mjs diff --git a/packages/faker-datasource/social-media/tables.mjs b/packages/datasources/faker/social-media/tables.mjs similarity index 100% rename from packages/faker-datasource/social-media/tables.mjs rename to packages/datasources/faker/social-media/tables.mjs diff --git a/packages/faker-datasource/source-generator.mjs b/packages/datasources/faker/source-generator.mjs similarity index 100% rename from packages/faker-datasource/source-generator.mjs rename to packages/datasources/faker/source-generator.mjs diff --git a/packages/faker-datasource/tsconfig.json b/packages/datasources/faker/tsconfig.json similarity index 100% rename from packages/faker-datasource/tsconfig.json rename to packages/datasources/faker/tsconfig.json diff --git a/packages/db-orchestrator/.gitignore b/packages/datasources/mssql/.gitignore old mode 100644 new mode 100755 similarity index 100% rename from packages/db-orchestrator/.gitignore rename to packages/datasources/mssql/.gitignore diff --git a/packages/mssql/CHANGELOG.md b/packages/datasources/mssql/CHANGELOG.md similarity index 100% rename from packages/mssql/CHANGELOG.md rename to packages/datasources/mssql/CHANGELOG.md diff --git a/packages/mssql/README.md b/packages/datasources/mssql/README.md similarity index 100% rename from packages/mssql/README.md rename to packages/datasources/mssql/README.md diff --git a/packages/mssql/index.cjs b/packages/datasources/mssql/index.cjs similarity index 100% rename from packages/mssql/index.cjs rename to packages/datasources/mssql/index.cjs diff --git a/packages/mssql/package.json b/packages/datasources/mssql/package.json similarity index 100% rename from packages/mssql/package.json rename to packages/datasources/mssql/package.json diff --git a/packages/mssql/test/test.js b/packages/datasources/mssql/test/test.js similarity index 100% rename from packages/mssql/test/test.js rename to packages/datasources/mssql/test/test.js diff --git a/packages/mssql/.gitignore b/packages/datasources/mysql/.gitignore similarity index 100% rename from packages/mssql/.gitignore rename to packages/datasources/mysql/.gitignore diff --git a/packages/mysql/CHANGELOG.md b/packages/datasources/mysql/CHANGELOG.md similarity index 100% rename from packages/mysql/CHANGELOG.md rename to packages/datasources/mysql/CHANGELOG.md diff --git a/packages/mysql/README.md b/packages/datasources/mysql/README.md similarity index 100% rename from packages/mysql/README.md rename to packages/datasources/mysql/README.md diff --git a/packages/mysql/index.cjs b/packages/datasources/mysql/index.cjs similarity index 100% rename from packages/mysql/index.cjs rename to packages/datasources/mysql/index.cjs diff --git a/packages/mysql/package.json b/packages/datasources/mysql/package.json similarity index 100% rename from packages/mysql/package.json rename to packages/datasources/mysql/package.json diff --git a/packages/mysql/test/test.js b/packages/datasources/mysql/test/test.js similarity index 100% rename from packages/mysql/test/test.js rename to packages/datasources/mysql/test/test.js diff --git a/packages/mysql/.gitignore b/packages/datasources/postgres/.gitignore old mode 100755 new mode 100644 similarity index 100% rename from packages/mysql/.gitignore rename to packages/datasources/postgres/.gitignore diff --git a/packages/postgres/CHANGELOG.md b/packages/datasources/postgres/CHANGELOG.md similarity index 100% rename from packages/postgres/CHANGELOG.md rename to packages/datasources/postgres/CHANGELOG.md diff --git a/packages/postgres/README.md b/packages/datasources/postgres/README.md similarity index 100% rename from packages/postgres/README.md rename to packages/datasources/postgres/README.md diff --git a/packages/postgres/index.cjs b/packages/datasources/postgres/index.cjs similarity index 100% rename from packages/postgres/index.cjs rename to packages/datasources/postgres/index.cjs diff --git a/packages/postgres/package.json b/packages/datasources/postgres/package.json similarity index 100% rename from packages/postgres/package.json rename to packages/datasources/postgres/package.json diff --git a/packages/postgres/test/test.js b/packages/datasources/postgres/test/test.js similarity index 100% rename from packages/postgres/test/test.js rename to packages/datasources/postgres/test/test.js diff --git a/packages/postgres/.gitignore b/packages/datasources/redshift/.gitignore similarity index 100% rename from packages/postgres/.gitignore rename to packages/datasources/redshift/.gitignore diff --git a/packages/redshift/CHANGELOG.md b/packages/datasources/redshift/CHANGELOG.md similarity index 100% rename from packages/redshift/CHANGELOG.md rename to packages/datasources/redshift/CHANGELOG.md diff --git a/packages/redshift/README.md b/packages/datasources/redshift/README.md similarity index 100% rename from packages/redshift/README.md rename to packages/datasources/redshift/README.md diff --git a/packages/redshift/index.cjs b/packages/datasources/redshift/index.cjs similarity index 100% rename from packages/redshift/index.cjs rename to packages/datasources/redshift/index.cjs diff --git a/packages/redshift/package.json b/packages/datasources/redshift/package.json similarity index 100% rename from packages/redshift/package.json rename to packages/datasources/redshift/package.json diff --git a/packages/preprocess/.gitignore b/packages/datasources/snowflake/.gitignore similarity index 100% rename from packages/preprocess/.gitignore rename to packages/datasources/snowflake/.gitignore diff --git a/packages/snowflake/CHANGELOG.md b/packages/datasources/snowflake/CHANGELOG.md similarity index 100% rename from packages/snowflake/CHANGELOG.md rename to packages/datasources/snowflake/CHANGELOG.md diff --git a/packages/snowflake/README.md b/packages/datasources/snowflake/README.md similarity index 100% rename from packages/snowflake/README.md rename to packages/datasources/snowflake/README.md diff --git a/packages/snowflake/index.cjs b/packages/datasources/snowflake/index.cjs similarity index 100% rename from packages/snowflake/index.cjs rename to packages/datasources/snowflake/index.cjs diff --git a/packages/snowflake/package.json b/packages/datasources/snowflake/package.json similarity index 100% rename from packages/snowflake/package.json rename to packages/datasources/snowflake/package.json diff --git a/packages/snowflake/test/test.js b/packages/datasources/snowflake/test/test.js similarity index 100% rename from packages/snowflake/test/test.js rename to packages/datasources/snowflake/test/test.js diff --git a/packages/sqlite/.gitignore b/packages/datasources/sqlite/.gitignore similarity index 100% rename from packages/sqlite/.gitignore rename to packages/datasources/sqlite/.gitignore diff --git a/packages/sqlite/CHANGELOG.md b/packages/datasources/sqlite/CHANGELOG.md similarity index 100% rename from packages/sqlite/CHANGELOG.md rename to packages/datasources/sqlite/CHANGELOG.md diff --git a/packages/sqlite/README.md b/packages/datasources/sqlite/README.md similarity index 100% rename from packages/sqlite/README.md rename to packages/datasources/sqlite/README.md diff --git a/packages/sqlite/index.cjs b/packages/datasources/sqlite/index.cjs similarity index 100% rename from packages/sqlite/index.cjs rename to packages/datasources/sqlite/index.cjs diff --git a/packages/sqlite/package.json b/packages/datasources/sqlite/package.json similarity index 100% rename from packages/sqlite/package.json rename to packages/datasources/sqlite/package.json diff --git a/packages/sqlite/test/test.js b/packages/datasources/sqlite/test/test.js similarity index 100% rename from packages/sqlite/test/test.js rename to packages/datasources/sqlite/test/test.js diff --git a/packages/redshift/.gitignore b/packages/datasources/trino/.gitignore similarity index 100% rename from packages/redshift/.gitignore rename to packages/datasources/trino/.gitignore diff --git a/packages/trino/CHANGELOG.md b/packages/datasources/trino/CHANGELOG.md similarity index 100% rename from packages/trino/CHANGELOG.md rename to packages/datasources/trino/CHANGELOG.md diff --git a/packages/trino/README.md b/packages/datasources/trino/README.md similarity index 100% rename from packages/trino/README.md rename to packages/datasources/trino/README.md diff --git a/packages/trino/index.cjs b/packages/datasources/trino/index.cjs similarity index 100% rename from packages/trino/index.cjs rename to packages/datasources/trino/index.cjs diff --git a/packages/trino/package.json b/packages/datasources/trino/package.json similarity index 100% rename from packages/trino/package.json rename to packages/datasources/trino/package.json diff --git a/packages/trino/test/test.js b/packages/datasources/trino/test/test.js similarity index 100% rename from packages/trino/test/test.js rename to packages/datasources/trino/test/test.js diff --git a/packages/evidence/cli.js b/packages/evidence/cli.js index 868a1df1a4..ab8129419d 100755 --- a/packages/evidence/cli.js +++ b/packages/evidence/cli.js @@ -208,8 +208,8 @@ prog ${chalk.bold('[!] Unable to load source manifest')} This likely means you have no source data, and need to generate it. Running ${chalk.bold('npm run sources')} will generate the needed data. See ${chalk.bold( - 'npm run sources --help' - )} for more usage information + 'npm run sources --help' + )} for more usage information Documentation: https://docs.evidence.dev/core-concepts/data-sources/ `.trim() ) diff --git a/packages/evidence/package.json b/packages/evidence/package.json index 53a2e23665..1c4e0c0640 100644 --- a/packages/evidence/package.json +++ b/packages/evidence/package.json @@ -34,9 +34,9 @@ "@evidence-dev/core-components": "workspace:*", "@evidence-dev/db-orchestrator": "workspace:*", "@evidence-dev/tailwind": "workspace:*", - "@sveltejs/kit": "1.22.3", - "svelte": "3.55.0", - "vite": "4.3.9" + "@sveltejs/kit": "2.5.4", + "svelte": "4.2.12", + "vite": "5.1.6" }, "dependencies": { "@evidence-dev/plugin-connector": "workspace:*", @@ -44,9 +44,9 @@ "@evidence-dev/query-store": "workspace:*", "@evidence-dev/telemetry": "workspace:*", "@evidence-dev/universal-sql": "workspace:*", - "@sveltejs/adapter-static": "2.0.2", + "@sveltejs/adapter-static": "3.0.1", "chalk": "^5.3.0", - "chokidar": "3.5.3", + "chokidar": "3.6.0", "fs-extra": "11.2.0", "sade": "^1.8.1" }, @@ -56,19 +56,19 @@ "@evidence-dev/db-orchestrator": "workspace:*", "@evidence-dev/query-store": "workspace:*", "@evidence-dev/tailwind": "workspace:*", - "@sveltejs/kit": "1.22.3", + "@sveltejs/kit": "2.5.4", "autoprefixer": "^10.4.7", "debounce": "^1.2.1", "git-remote-origin-url": "4.0.0", "postcss": "^8.4.14", "postcss-load-config": "^4.0.1", - "svelte": "3.59.2", + "svelte": "4.2.12", "svelte-preprocess": "5.1.3", - "svelte2tsx": "0.6.0", + "svelte2tsx": "0.7.4", "tailwindcss": "^3.3.1", - "typescript": "4.9.5", + "typescript": "5.4.2", "unist-util-visit": "4.1.2", - "vite": "4.3.9" + "vite": "5.1.6" }, "engines": { "node": "^16.14 || >=18" diff --git a/packages/component-utilities/CHANGELOG.md b/packages/lib/component-utilities/CHANGELOG.md similarity index 100% rename from packages/component-utilities/CHANGELOG.md rename to packages/lib/component-utilities/CHANGELOG.md diff --git a/packages/component-utilities/package.json b/packages/lib/component-utilities/package.json similarity index 81% rename from packages/component-utilities/package.json rename to packages/lib/component-utilities/package.json index d15d075686..bdb38a516b 100644 --- a/packages/component-utilities/package.json +++ b/packages/lib/component-utilities/package.json @@ -20,15 +20,15 @@ "type": "module", "dependencies": { "@evidence-dev/query-store": "workspace:*", - "@steeze-ui/simple-icons": "^1.5.0", - "@steeze-ui/svelte-icon": "^1.4.1", - "@steeze-ui/tabler-icons": "^2.1.0", + "@steeze-ui/simple-icons": "^1.7.1", + "@steeze-ui/svelte-icon": "1.5.0", + "@steeze-ui/tabler-icons": "2.1.1", "@tidyjs/tidy": "2.5.2", "@uwdata/mosaic-sql": "^0.3.2", "debounce": "^1.2.1", "downloadjs": "1.4.7", "echarts": "5.4.3", "ssf": "^0.11.2", - "svelte": "3.55.0" + "svelte": "4.2.12" } } diff --git a/packages/component-utilities/src/autoFormatting.js b/packages/lib/component-utilities/src/autoFormatting.js similarity index 98% rename from packages/component-utilities/src/autoFormatting.js rename to packages/lib/component-utilities/src/autoFormatting.js index de1d140b3f..323b6476c6 100644 --- a/packages/component-utilities/src/autoFormatting.js +++ b/packages/lib/component-utilities/src/autoFormatting.js @@ -183,7 +183,7 @@ export const findImplicitAutoFormat = (columnName, evidenceTypeDescriptor, colum if (matched) { return matched.format; } else { - if (columnUnitSummary?.unitType === 'number' && columnUnitSummary?.median !== undefined) { + if (columnUnitSummary?.unitType === 'number') { return generateImplicitNumberFormat(columnUnitSummary); } } diff --git a/packages/component-utilities/src/buildQuery.js b/packages/lib/component-utilities/src/buildQuery.js similarity index 100% rename from packages/component-utilities/src/buildQuery.js rename to packages/lib/component-utilities/src/buildQuery.js diff --git a/packages/component-utilities/src/builtInFormats.js b/packages/lib/component-utilities/src/builtInFormats.js similarity index 100% rename from packages/component-utilities/src/builtInFormats.js rename to packages/lib/component-utilities/src/builtInFormats.js diff --git a/packages/component-utilities/src/chartContext.js b/packages/lib/component-utilities/src/chartContext.js similarity index 100% rename from packages/component-utilities/src/chartContext.js rename to packages/lib/component-utilities/src/chartContext.js diff --git a/packages/component-utilities/src/checkInputs.js b/packages/lib/component-utilities/src/checkInputs.js similarity index 100% rename from packages/component-utilities/src/checkInputs.js rename to packages/lib/component-utilities/src/checkInputs.js diff --git a/packages/component-utilities/src/clickOutside.js b/packages/lib/component-utilities/src/clickOutside.js similarity index 100% rename from packages/component-utilities/src/clickOutside.js rename to packages/lib/component-utilities/src/clickOutside.js diff --git a/packages/component-utilities/src/colours.js b/packages/lib/component-utilities/src/colours.js similarity index 100% rename from packages/component-utilities/src/colours.js rename to packages/lib/component-utilities/src/colours.js diff --git a/packages/component-utilities/src/dateParsing.js b/packages/lib/component-utilities/src/dateParsing.js similarity index 100% rename from packages/component-utilities/src/dateParsing.js rename to packages/lib/component-utilities/src/dateParsing.js diff --git a/packages/component-utilities/src/echarts.js b/packages/lib/component-utilities/src/echarts.js similarity index 95% rename from packages/component-utilities/src/echarts.js rename to packages/lib/component-utilities/src/echarts.js index 3672a7a726..9318df32b1 100644 --- a/packages/component-utilities/src/echarts.js +++ b/packages/lib/component-utilities/src/echarts.js @@ -108,8 +108,9 @@ export default (node, option) => { }); // Resize logic: - let resizeObserver; - const containerElement = document.querySelector('div.content > article'); + const containerElement = document.getElementById('evidence-main-article'); + // watching parent element is necessary for charts within `Fullscreen` components + const parentElement = node.parentElement; const onWindowResize = debounce(() => { chart.resize({ animation: { @@ -119,6 +120,15 @@ export default (node, option) => { updateLabelWidths(); }, 100); + let resizeObserver; + if (window.ResizeObserver && containerElement) { + resizeObserver = new ResizeObserver(onWindowResize); + resizeObserver.observe(containerElement); + resizeObserver.observe(parentElement); + } else { + window.addEventListener('resize', onWindowResize); + } + // Label width setting: const updateLabelWidths = () => { if (option.showAllXAxisLabels) { @@ -153,13 +163,6 @@ export default (node, option) => { } }; - if (window.ResizeObserver && containerElement) { - resizeObserver = new ResizeObserver(onWindowResize); - resizeObserver.observe(containerElement); - } else { - window.addEventListener('resize', onWindowResize); - } - const updateChart = (option) => { chart.setOption( { @@ -189,6 +192,7 @@ export default (node, option) => { destroy() { if (resizeObserver) { resizeObserver.unobserve(containerElement); + resizeObserver.unobserve(parentElement); } else { window.removeEventListener('resize', onWindowResize); } diff --git a/packages/component-utilities/src/echartsCanvasDownload.js b/packages/lib/component-utilities/src/echartsCanvasDownload.js similarity index 100% rename from packages/component-utilities/src/echartsCanvasDownload.js rename to packages/lib/component-utilities/src/echartsCanvasDownload.js diff --git a/packages/component-utilities/src/echartsCopy.js b/packages/lib/component-utilities/src/echartsCopy.js similarity index 100% rename from packages/component-utilities/src/echartsCopy.js rename to packages/lib/component-utilities/src/echartsCopy.js diff --git a/packages/component-utilities/src/echartsMap.js b/packages/lib/component-utilities/src/echartsMap.js similarity index 100% rename from packages/component-utilities/src/echartsMap.js rename to packages/lib/component-utilities/src/echartsMap.js diff --git a/packages/component-utilities/src/echartsThemes.js b/packages/lib/component-utilities/src/echartsThemes.js similarity index 100% rename from packages/component-utilities/src/echartsThemes.js rename to packages/lib/component-utilities/src/echartsThemes.js diff --git a/packages/component-utilities/src/formatTitle.js b/packages/lib/component-utilities/src/formatTitle.js similarity index 100% rename from packages/component-utilities/src/formatTitle.js rename to packages/lib/component-utilities/src/formatTitle.js diff --git a/packages/component-utilities/src/formatting.js b/packages/lib/component-utilities/src/formatting.js similarity index 100% rename from packages/component-utilities/src/formatting.js rename to packages/lib/component-utilities/src/formatting.js diff --git a/packages/component-utilities/src/generateBoxPlotData.js b/packages/lib/component-utilities/src/generateBoxPlotData.js similarity index 81% rename from packages/component-utilities/src/generateBoxPlotData.js rename to packages/lib/component-utilities/src/generateBoxPlotData.js index ebc1ae266f..4491f80114 100644 --- a/packages/component-utilities/src/generateBoxPlotData.js +++ b/packages/lib/component-utilities/src/generateBoxPlotData.js @@ -20,16 +20,16 @@ export default function generateBoxPlotData( min ? data[i][min] : confidenceInterval - ? data[i][midpoint] - data[i][confidenceInterval] - : data[i][minInterval], + ? data[i][midpoint] - data[i][confidenceInterval] + : data[i][minInterval], confidenceInterval ? data[i][midpoint] - data[i][confidenceInterval] : data[i][minInterval], data[i][midpoint], confidenceInterval ? data[i][midpoint] + data[i][confidenceInterval] : data[i][maxInterval], max ? data[i][max] : confidenceInterval - ? data[i][midpoint] + data[i][confidenceInterval] - : data[i][maxInterval] + ? data[i][midpoint] + data[i][confidenceInterval] + : data[i][maxInterval] ]); boxData.names.push(data[i][name]); diff --git a/packages/component-utilities/src/getColumnExtents.js b/packages/lib/component-utilities/src/getColumnExtents.js similarity index 99% rename from packages/component-utilities/src/getColumnExtents.js rename to packages/lib/component-utilities/src/getColumnExtents.js index 31b7972485..468c1af128 100644 --- a/packages/component-utilities/src/getColumnExtents.js +++ b/packages/lib/component-utilities/src/getColumnExtents.js @@ -19,7 +19,7 @@ export function getColumnUnitSummary(data, columnName, isNumeric = true) { median: median(columnName), mean: mean(columnName), sum: sum(columnName) - }) + }) : summarize({ count: n(columnName), countDistinct: nDistinct(columnName) }) )[0]; diff --git a/packages/component-utilities/src/getColumnSummary.js b/packages/lib/component-utilities/src/getColumnSummary.js similarity index 98% rename from packages/component-utilities/src/getColumnSummary.js rename to packages/lib/component-utilities/src/getColumnSummary.js index bd8a372688..5d75925763 100644 --- a/packages/component-utilities/src/getColumnSummary.js +++ b/packages/lib/component-utilities/src/getColumnSummary.js @@ -31,7 +31,7 @@ export default function getColumnSummary(data, returnType = 'object') { (item) => item.name?.toLowerCase() === colName?.toLowerCase() ) ?? { name: colName, - evidenceType: EvidenceType.STRING, + evidenceType: EvidenceType.NUMBER, typeFidelity: TypeFidelity.INFERRED }; const type = evidenceColumnType.evidenceType; diff --git a/packages/component-utilities/src/getCompletedData.js b/packages/lib/component-utilities/src/getCompletedData.js similarity index 100% rename from packages/component-utilities/src/getCompletedData.js rename to packages/lib/component-utilities/src/getCompletedData.js diff --git a/packages/component-utilities/src/getDistinctCount.js b/packages/lib/component-utilities/src/getDistinctCount.js similarity index 100% rename from packages/component-utilities/src/getDistinctCount.js rename to packages/lib/component-utilities/src/getDistinctCount.js diff --git a/packages/component-utilities/src/getDistinctValues.js b/packages/lib/component-utilities/src/getDistinctValues.js similarity index 100% rename from packages/component-utilities/src/getDistinctValues.js rename to packages/lib/component-utilities/src/getDistinctValues.js diff --git a/packages/component-utilities/src/getSeriesConfig.js b/packages/lib/component-utilities/src/getSeriesConfig.js similarity index 100% rename from packages/component-utilities/src/getSeriesConfig.js rename to packages/lib/component-utilities/src/getSeriesConfig.js diff --git a/packages/component-utilities/src/getSortedData.js b/packages/lib/component-utilities/src/getSortedData.js similarity index 100% rename from packages/component-utilities/src/getSortedData.js rename to packages/lib/component-utilities/src/getSortedData.js diff --git a/packages/component-utilities/src/getSortedDistinctValues.js b/packages/lib/component-utilities/src/getSortedDistinctValues.js similarity index 100% rename from packages/component-utilities/src/getSortedDistinctValues.js rename to packages/lib/component-utilities/src/getSortedDistinctValues.js diff --git a/packages/component-utilities/src/getStackPercentages.js b/packages/lib/component-utilities/src/getStackPercentages.js similarity index 100% rename from packages/component-utilities/src/getStackPercentages.js rename to packages/lib/component-utilities/src/getStackPercentages.js diff --git a/packages/component-utilities/src/getStackedData.js b/packages/lib/component-utilities/src/getStackedData.js similarity index 100% rename from packages/component-utilities/src/getStackedData.js rename to packages/lib/component-utilities/src/getStackedData.js diff --git a/packages/component-utilities/src/getYAxisIndex.js b/packages/lib/component-utilities/src/getYAxisIndex.js similarity index 100% rename from packages/component-utilities/src/getYAxisIndex.js rename to packages/lib/component-utilities/src/getYAxisIndex.js diff --git a/packages/component-utilities/src/globalContexts.js b/packages/lib/component-utilities/src/globalContexts.js similarity index 100% rename from packages/component-utilities/src/globalContexts.js rename to packages/lib/component-utilities/src/globalContexts.js diff --git a/packages/component-utilities/src/helpers/getCompletedData.helpers.js b/packages/lib/component-utilities/src/helpers/getCompletedData.helpers.js similarity index 100% rename from packages/component-utilities/src/helpers/getCompletedData.helpers.js rename to packages/lib/component-utilities/src/helpers/getCompletedData.helpers.js diff --git a/packages/component-utilities/src/hmrErrorHandling.js b/packages/lib/component-utilities/src/hmrErrorHandling.js similarity index 100% rename from packages/component-utilities/src/hmrErrorHandling.js rename to packages/lib/component-utilities/src/hmrErrorHandling.js diff --git a/packages/component-utilities/src/icons.js b/packages/lib/component-utilities/src/icons.js similarity index 100% rename from packages/component-utilities/src/icons.js rename to packages/lib/component-utilities/src/icons.js diff --git a/packages/component-utilities/src/inferColumnTypes.js b/packages/lib/component-utilities/src/inferColumnTypes.js similarity index 94% rename from packages/component-utilities/src/inferColumnTypes.js rename to packages/lib/component-utilities/src/inferColumnTypes.js index 3996a94cfb..82e3fdb2b2 100644 --- a/packages/component-utilities/src/inferColumnTypes.js +++ b/packages/lib/component-utilities/src/inferColumnTypes.js @@ -1,7 +1,5 @@ // To-do, replace with import from db-commons -import { QueryStore } from '@evidence-dev/query-store'; - export var EvidenceType; (function (EvidenceType) { EvidenceType['BOOLEAN'] = 'boolean'; @@ -29,7 +27,7 @@ export const inferValueType = function (columnValue) { }; export default function inferColumnTypes(rows) { - if (rows instanceof QueryStore) { + if (rows?._evidenceColumnTypes) { return rows._evidenceColumnTypes; } if (rows && rows.length > 0) { diff --git a/packages/component-utilities/src/isEmptyDataset.js b/packages/lib/component-utilities/src/isEmptyDataset.js similarity index 100% rename from packages/component-utilities/src/isEmptyDataset.js rename to packages/lib/component-utilities/src/isEmptyDataset.js diff --git a/packages/component-utilities/src/profile.js b/packages/lib/component-utilities/src/profile.js similarity index 100% rename from packages/component-utilities/src/profile.js rename to packages/lib/component-utilities/src/profile.js diff --git a/packages/component-utilities/src/replaceNulls.js b/packages/lib/component-utilities/src/replaceNulls.js similarity index 100% rename from packages/component-utilities/src/replaceNulls.js rename to packages/lib/component-utilities/src/replaceNulls.js diff --git a/packages/component-utilities/src/stores.js b/packages/lib/component-utilities/src/stores.js similarity index 100% rename from packages/component-utilities/src/stores.js rename to packages/lib/component-utilities/src/stores.js diff --git a/packages/component-utilities/src/tests/autoFormatting.spec.js b/packages/lib/component-utilities/src/tests/autoFormatting.spec.js similarity index 100% rename from packages/component-utilities/src/tests/autoFormatting.spec.js rename to packages/lib/component-utilities/src/tests/autoFormatting.spec.js diff --git a/packages/component-utilities/src/tests/columnUnitSummary.spec.js b/packages/lib/component-utilities/src/tests/columnUnitSummary.spec.js similarity index 100% rename from packages/component-utilities/src/tests/columnUnitSummary.spec.js rename to packages/lib/component-utilities/src/tests/columnUnitSummary.spec.js diff --git a/packages/component-utilities/src/tests/formatting.spec.js b/packages/lib/component-utilities/src/tests/formatting.spec.js similarity index 100% rename from packages/component-utilities/src/tests/formatting.spec.js rename to packages/lib/component-utilities/src/tests/formatting.spec.js diff --git a/packages/component-utilities/src/tests/getCompletedData.fixture.js b/packages/lib/component-utilities/src/tests/getCompletedData.fixture.js similarity index 100% rename from packages/component-utilities/src/tests/getCompletedData.fixture.js rename to packages/lib/component-utilities/src/tests/getCompletedData.fixture.js diff --git a/packages/component-utilities/src/tests/getCompletedData.fixture.manual.js b/packages/lib/component-utilities/src/tests/getCompletedData.fixture.manual.js similarity index 100% rename from packages/component-utilities/src/tests/getCompletedData.fixture.manual.js rename to packages/lib/component-utilities/src/tests/getCompletedData.fixture.manual.js diff --git a/packages/component-utilities/src/tests/getCompletedData.helpers.spec.js b/packages/lib/component-utilities/src/tests/getCompletedData.helpers.spec.js similarity index 100% rename from packages/component-utilities/src/tests/getCompletedData.helpers.spec.js rename to packages/lib/component-utilities/src/tests/getCompletedData.helpers.spec.js diff --git a/packages/component-utilities/src/tests/getCompletedData.spec.js b/packages/lib/component-utilities/src/tests/getCompletedData.spec.js similarity index 100% rename from packages/component-utilities/src/tests/getCompletedData.spec.js rename to packages/lib/component-utilities/src/tests/getCompletedData.spec.js diff --git a/packages/component-utilities/src/usStateMap.json b/packages/lib/component-utilities/src/usStateMap.json similarity index 100% rename from packages/component-utilities/src/usStateMap.json rename to packages/lib/component-utilities/src/usStateMap.json diff --git a/packages/db-commons/CHANGELOG.md b/packages/lib/db-commons/CHANGELOG.md similarity index 100% rename from packages/db-commons/CHANGELOG.md rename to packages/lib/db-commons/CHANGELOG.md diff --git a/packages/db-commons/index.cjs b/packages/lib/db-commons/index.cjs similarity index 100% rename from packages/db-commons/index.cjs rename to packages/lib/db-commons/index.cjs diff --git a/packages/db-commons/index.d.ts b/packages/lib/db-commons/index.d.ts similarity index 100% rename from packages/db-commons/index.d.ts rename to packages/lib/db-commons/index.d.ts diff --git a/packages/db-commons/jest.config.mjs b/packages/lib/db-commons/jest.config.mjs similarity index 100% rename from packages/db-commons/jest.config.mjs rename to packages/lib/db-commons/jest.config.mjs diff --git a/packages/db-commons/package.json b/packages/lib/db-commons/package.json similarity index 100% rename from packages/db-commons/package.json rename to packages/lib/db-commons/package.json diff --git a/packages/db-commons/src/getEnv.cjs b/packages/lib/db-commons/src/getEnv.cjs similarity index 100% rename from packages/db-commons/src/getEnv.cjs rename to packages/lib/db-commons/src/getEnv.cjs diff --git a/packages/db-commons/src/getEnv.spec.cjs b/packages/lib/db-commons/src/getEnv.spec.cjs similarity index 100% rename from packages/db-commons/src/getEnv.spec.cjs rename to packages/lib/db-commons/src/getEnv.spec.cjs diff --git a/packages/snowflake/.gitignore b/packages/lib/db-orchestrator/.gitignore similarity index 100% rename from packages/snowflake/.gitignore rename to packages/lib/db-orchestrator/.gitignore diff --git a/packages/db-orchestrator/CHANGELOG.md b/packages/lib/db-orchestrator/CHANGELOG.md similarity index 100% rename from packages/db-orchestrator/CHANGELOG.md rename to packages/lib/db-orchestrator/CHANGELOG.md diff --git a/packages/db-orchestrator/index.cjs b/packages/lib/db-orchestrator/index.cjs similarity index 100% rename from packages/db-orchestrator/index.cjs rename to packages/lib/db-orchestrator/index.cjs diff --git a/packages/db-orchestrator/package.json b/packages/lib/db-orchestrator/package.json similarity index 100% rename from packages/db-orchestrator/package.json rename to packages/lib/db-orchestrator/package.json diff --git a/packages/db-orchestrator/test.json b/packages/lib/db-orchestrator/test.json similarity index 100% rename from packages/db-orchestrator/test.json rename to packages/lib/db-orchestrator/test.json diff --git a/packages/plugin-connector/CHANGELOG.md b/packages/lib/plugin-connector/CHANGELOG.md similarity index 100% rename from packages/plugin-connector/CHANGELOG.md rename to packages/lib/plugin-connector/CHANGELOG.md diff --git a/packages/plugin-connector/package.json b/packages/lib/plugin-connector/package.json similarity index 83% rename from packages/plugin-connector/package.json rename to packages/lib/plugin-connector/package.json index ac6975c53e..1a0c700da0 100644 --- a/packages/plugin-connector/package.json +++ b/packages/lib/plugin-connector/package.json @@ -18,36 +18,37 @@ "license": "MIT", "dependencies": { "@evidence-dev/db-commons": "workspace:*", - "@evidence-dev/universal-sql": "workspace:*", "@evidence-dev/telemetry": "workspace:*", + "@evidence-dev/universal-sql": "workspace:*", "@types/estree": "^1.0.1", "@types/lodash.debounce": "^4.0.9", "@types/lodash.merge": "^4.6.8", "chalk": "^5.2.0", - "chokidar": "^3.5.3", + "chokidar": "3.6.0", "listr2": "^7.0.2", "lodash.debounce": "^4.0.8", "lodash.merge": "^4.6.2", "ora": "^7.0.1", - "svelte": "3.55.0", + "svelte": "4.2.12", "svelte-preprocess": "^5.1.3", - "sveltekit-autoimport": "^1.7.0", - "vite": "4.3.9", + "sveltekit-autoimport": "1.8.0", + "vite": "5.1.6", "yaml": "^2.3.4", "zod": "^3.21.4" }, "devDependencies": { "@evidence-dev/component-utilities": "workspace:*", - "@parcel/core": "^2.8.3", - "@parcel/packager-ts": "^2.12.0", - "@parcel/transformer-inline-string": "^2.8.3", - "@parcel/transformer-typescript-types": "^2.8.3", + "@parcel/core": "2.12.0", + "@parcel/packager-ts": "2.12.0", + "@parcel/transformer-inline-string": "2.12.0", + "@parcel/transformer-typescript-types": "2.12.0", "@types/mock-fs": "^4.13.1", - "@types/node": "20.8.5", + "@types/node": "20.11.28", "commander": "^11.0.0", "mock-fs": "^5.2.0", - "parcel": "^2.8.3", - "typescript": "^5.0.4", + "parcel": "2.12.0", + "rollup": "^4.13.0", + "typescript": "5.4.2", "vitest": "^0.34.1" }, "targets": { diff --git a/packages/plugin-connector/src/build-plugins/preprocess.js b/packages/lib/plugin-connector/src/build-plugins/preprocess.js similarity index 100% rename from packages/plugin-connector/src/build-plugins/preprocess.js rename to packages/lib/plugin-connector/src/build-plugins/preprocess.js diff --git a/packages/plugin-connector/src/build-plugins/query-directory-hmr.js b/packages/lib/plugin-connector/src/build-plugins/query-directory-hmr.js similarity index 93% rename from packages/plugin-connector/src/build-plugins/query-directory-hmr.js rename to packages/lib/plugin-connector/src/build-plugins/query-directory-hmr.js index c3b205dbd4..9b6ce0275f 100644 --- a/packages/plugin-connector/src/build-plugins/query-directory-hmr.js +++ b/packages/lib/plugin-connector/src/build-plugins/query-directory-hmr.js @@ -28,8 +28,5 @@ export const queryDirectoryHmr = { }); } ); - }, - watchChange(f, opts) { - console.log({ f, opts }); } }; diff --git a/packages/plugin-connector/src/build-plugins/rollup.js b/packages/lib/plugin-connector/src/build-plugins/rollup.js similarity index 100% rename from packages/plugin-connector/src/build-plugins/rollup.js rename to packages/lib/plugin-connector/src/build-plugins/rollup.js diff --git a/packages/plugin-connector/src/build-plugins/source-query-hmr.js b/packages/lib/plugin-connector/src/build-plugins/source-query-hmr.js similarity index 100% rename from packages/plugin-connector/src/build-plugins/source-query-hmr.js rename to packages/lib/plugin-connector/src/build-plugins/source-query-hmr.js diff --git a/packages/plugin-connector/src/build-plugins/vite.js b/packages/lib/plugin-connector/src/build-plugins/vite.js similarity index 100% rename from packages/plugin-connector/src/build-plugins/vite.js rename to packages/lib/plugin-connector/src/build-plugins/vite.js diff --git a/packages/plugin-connector/src/cli.js b/packages/lib/plugin-connector/src/cli.js similarity index 100% rename from packages/plugin-connector/src/cli.js rename to packages/lib/plugin-connector/src/cli.js diff --git a/packages/plugin-connector/src/component-resolution/get-components-for-package.js b/packages/lib/plugin-connector/src/component-resolution/get-components-for-package.js similarity index 95% rename from packages/plugin-connector/src/component-resolution/get-components-for-package.js rename to packages/lib/plugin-connector/src/component-resolution/get-components-for-package.js index 79a8b46970..9ea871342c 100644 --- a/packages/plugin-connector/src/component-resolution/get-components-for-package.js +++ b/packages/lib/plugin-connector/src/component-resolution/get-components-for-package.js @@ -62,8 +62,8 @@ export const getComponentsForPackage = async (rootDir, packagePath, config) => { 'main' in validEvidencePackage ? path.resolve(packagePath, validEvidencePackage.main) : 'svelte' in validEvidencePackage - ? path.resolve(packagePath, validEvidencePackage.svelte) - : path.resolve(packagePath, validEvidencePackage.exports['.']) + ? path.resolve(packagePath, validEvidencePackage.svelte) + : path.resolve(packagePath, validEvidencePackage.exports['.']) ).dir; const fileComponents = await fileLoader(mainFilePath); diff --git a/packages/plugin-connector/src/component-resolution/get-plugin-components.js b/packages/lib/plugin-connector/src/component-resolution/get-plugin-components.js similarity index 100% rename from packages/plugin-connector/src/component-resolution/get-plugin-components.js rename to packages/lib/plugin-connector/src/component-resolution/get-plugin-components.js diff --git a/packages/plugin-connector/src/component-resolution/loaders/file-loader.js b/packages/lib/plugin-connector/src/component-resolution/loaders/file-loader.js similarity index 100% rename from packages/plugin-connector/src/component-resolution/loaders/file-loader.js rename to packages/lib/plugin-connector/src/component-resolution/loaders/file-loader.js diff --git a/packages/plugin-connector/src/component-resolution/loaders/manifest-loader.js b/packages/lib/plugin-connector/src/component-resolution/loaders/manifest-loader.js similarity index 100% rename from packages/plugin-connector/src/component-resolution/loaders/manifest-loader.js rename to packages/lib/plugin-connector/src/component-resolution/loaders/manifest-loader.js diff --git a/packages/plugin-connector/src/component-resolution/schemas/component-manifest.schema.js b/packages/lib/plugin-connector/src/component-resolution/schemas/component-manifest.schema.js similarity index 100% rename from packages/plugin-connector/src/component-resolution/schemas/component-manifest.schema.js rename to packages/lib/plugin-connector/src/component-resolution/schemas/component-manifest.schema.js diff --git a/packages/plugin-connector/src/component-resolution/types.d.ts b/packages/lib/plugin-connector/src/component-resolution/types.d.ts similarity index 100% rename from packages/plugin-connector/src/component-resolution/types.d.ts rename to packages/lib/plugin-connector/src/component-resolution/types.d.ts diff --git a/packages/plugin-connector/src/data-sources/TODO.md b/packages/lib/plugin-connector/src/data-sources/TODO.md similarity index 100% rename from packages/plugin-connector/src/data-sources/TODO.md rename to packages/lib/plugin-connector/src/data-sources/TODO.md diff --git a/packages/plugin-connector/src/data-sources/build-connector.js b/packages/lib/plugin-connector/src/data-sources/build-connector.js similarity index 100% rename from packages/plugin-connector/src/data-sources/build-connector.js rename to packages/lib/plugin-connector/src/data-sources/build-connector.js diff --git a/packages/plugin-connector/src/data-sources/build-sources.js b/packages/lib/plugin-connector/src/data-sources/build-sources.js similarity index 100% rename from packages/plugin-connector/src/data-sources/build-sources.js rename to packages/lib/plugin-connector/src/data-sources/build-sources.js diff --git a/packages/plugin-connector/src/data-sources/get-datasource-plugins.js b/packages/lib/plugin-connector/src/data-sources/get-datasource-plugins.js similarity index 100% rename from packages/plugin-connector/src/data-sources/get-datasource-plugins.js rename to packages/lib/plugin-connector/src/data-sources/get-datasource-plugins.js diff --git a/packages/plugin-connector/src/data-sources/get-sources.js b/packages/lib/plugin-connector/src/data-sources/get-sources.js similarity index 100% rename from packages/plugin-connector/src/data-sources/get-sources.js rename to packages/lib/plugin-connector/src/data-sources/get-sources.js diff --git a/packages/plugin-connector/src/data-sources/get-sources.spec.js b/packages/lib/plugin-connector/src/data-sources/get-sources.spec.js similarity index 100% rename from packages/plugin-connector/src/data-sources/get-sources.spec.js rename to packages/lib/plugin-connector/src/data-sources/get-sources.spec.js diff --git a/packages/plugin-connector/src/data-sources/index.js b/packages/lib/plugin-connector/src/data-sources/index.js similarity index 100% rename from packages/plugin-connector/src/data-sources/index.js rename to packages/lib/plugin-connector/src/data-sources/index.js diff --git a/packages/plugin-connector/src/data-sources/schemas/datasource-spec.schema.js b/packages/lib/plugin-connector/src/data-sources/schemas/datasource-spec.schema.js similarity index 100% rename from packages/plugin-connector/src/data-sources/schemas/datasource-spec.schema.js rename to packages/lib/plugin-connector/src/data-sources/schemas/datasource-spec.schema.js diff --git a/packages/plugin-connector/src/data-sources/schemas/query-runner.schema.js b/packages/lib/plugin-connector/src/data-sources/schemas/query-runner.schema.js similarity index 100% rename from packages/plugin-connector/src/data-sources/schemas/query-runner.schema.js rename to packages/lib/plugin-connector/src/data-sources/schemas/query-runner.schema.js diff --git a/packages/plugin-connector/src/data-sources/schemas/query-runner.schema.spec.js b/packages/lib/plugin-connector/src/data-sources/schemas/query-runner.schema.spec.js similarity index 100% rename from packages/plugin-connector/src/data-sources/schemas/query-runner.schema.spec.js rename to packages/lib/plugin-connector/src/data-sources/schemas/query-runner.schema.spec.js diff --git a/packages/plugin-connector/src/data-sources/sub-source-vars.js b/packages/lib/plugin-connector/src/data-sources/sub-source-vars.js similarity index 100% rename from packages/plugin-connector/src/data-sources/sub-source-vars.js rename to packages/lib/plugin-connector/src/data-sources/sub-source-vars.js diff --git a/packages/plugin-connector/src/data-sources/sub-source-vars.spec.js b/packages/lib/plugin-connector/src/data-sources/sub-source-vars.spec.js similarity index 100% rename from packages/plugin-connector/src/data-sources/sub-source-vars.spec.js rename to packages/lib/plugin-connector/src/data-sources/sub-source-vars.spec.js diff --git a/packages/plugin-connector/src/data-sources/update-datasource-options.fixture.js b/packages/lib/plugin-connector/src/data-sources/update-datasource-options.fixture.js similarity index 100% rename from packages/plugin-connector/src/data-sources/update-datasource-options.fixture.js rename to packages/lib/plugin-connector/src/data-sources/update-datasource-options.fixture.js diff --git a/packages/plugin-connector/src/data-sources/update-datasource-options.js b/packages/lib/plugin-connector/src/data-sources/update-datasource-options.js similarity index 100% rename from packages/plugin-connector/src/data-sources/update-datasource-options.js rename to packages/lib/plugin-connector/src/data-sources/update-datasource-options.js diff --git a/packages/plugin-connector/src/index.js b/packages/lib/plugin-connector/src/index.js similarity index 84% rename from packages/plugin-connector/src/index.js rename to packages/lib/plugin-connector/src/index.js index cfb89cc319..bef5670def 100644 --- a/packages/plugin-connector/src/index.js +++ b/packages/lib/plugin-connector/src/index.js @@ -1,3 +1,5 @@ +/// + export * from './build-plugins/preprocess'; export * from './build-plugins/rollup'; export * from './build-plugins/vite'; diff --git a/packages/plugin-connector/src/lib/b64-deep.js b/packages/lib/plugin-connector/src/lib/b64-deep.js similarity index 100% rename from packages/plugin-connector/src/lib/b64-deep.js rename to packages/lib/plugin-connector/src/lib/b64-deep.js diff --git a/packages/plugin-connector/src/lib/clean-zod-errors.js b/packages/lib/plugin-connector/src/lib/clean-zod-errors.js similarity index 100% rename from packages/plugin-connector/src/lib/clean-zod-errors.js rename to packages/lib/plugin-connector/src/lib/clean-zod-errors.js diff --git a/packages/plugin-connector/src/lib/processing-queue.js b/packages/lib/plugin-connector/src/lib/processing-queue.js similarity index 100% rename from packages/plugin-connector/src/lib/processing-queue.js rename to packages/lib/plugin-connector/src/lib/processing-queue.js diff --git a/packages/plugin-connector/src/lib/processing-queue.spec.js b/packages/lib/plugin-connector/src/lib/processing-queue.spec.js similarity index 100% rename from packages/plugin-connector/src/lib/processing-queue.spec.js rename to packages/lib/plugin-connector/src/lib/processing-queue.spec.js diff --git a/packages/plugin-connector/src/plugin-discovery/get-root-modules.js b/packages/lib/plugin-connector/src/plugin-discovery/get-root-modules.js similarity index 100% rename from packages/plugin-connector/src/plugin-discovery/get-root-modules.js rename to packages/lib/plugin-connector/src/plugin-discovery/get-root-modules.js diff --git a/packages/plugin-connector/src/plugin-discovery/index.js b/packages/lib/plugin-connector/src/plugin-discovery/index.js similarity index 100% rename from packages/plugin-connector/src/plugin-discovery/index.js rename to packages/lib/plugin-connector/src/plugin-discovery/index.js diff --git a/packages/plugin-connector/src/plugin-discovery/is-valid-package.js b/packages/lib/plugin-connector/src/plugin-discovery/is-valid-package.js similarity index 100% rename from packages/plugin-connector/src/plugin-discovery/is-valid-package.js rename to packages/lib/plugin-connector/src/plugin-discovery/is-valid-package.js diff --git a/packages/plugin-connector/src/plugin-discovery/load-config.fixture.js b/packages/lib/plugin-connector/src/plugin-discovery/load-config.fixture.js similarity index 100% rename from packages/plugin-connector/src/plugin-discovery/load-config.fixture.js rename to packages/lib/plugin-connector/src/plugin-discovery/load-config.fixture.js diff --git a/packages/plugin-connector/src/plugin-discovery/load-config.js b/packages/lib/plugin-connector/src/plugin-discovery/load-config.js similarity index 100% rename from packages/plugin-connector/src/plugin-discovery/load-config.js rename to packages/lib/plugin-connector/src/plugin-discovery/load-config.js diff --git a/packages/plugin-connector/src/plugin-discovery/load-config.spec.js b/packages/lib/plugin-connector/src/plugin-discovery/load-config.spec.js similarity index 100% rename from packages/plugin-connector/src/plugin-discovery/load-config.spec.js rename to packages/lib/plugin-connector/src/plugin-discovery/load-config.spec.js diff --git a/packages/plugin-connector/src/plugin-discovery/resolve-evidence-config.js b/packages/lib/plugin-connector/src/plugin-discovery/resolve-evidence-config.js similarity index 100% rename from packages/plugin-connector/src/plugin-discovery/resolve-evidence-config.js rename to packages/lib/plugin-connector/src/plugin-discovery/resolve-evidence-config.js diff --git a/packages/plugin-connector/src/plugin-discovery/schemas/evidence-config.schema.js b/packages/lib/plugin-connector/src/plugin-discovery/schemas/evidence-config.schema.js similarity index 100% rename from packages/plugin-connector/src/plugin-discovery/schemas/evidence-config.schema.js rename to packages/lib/plugin-connector/src/plugin-discovery/schemas/evidence-config.schema.js diff --git a/packages/plugin-connector/src/plugin-discovery/schemas/evidence-package.schema.js b/packages/lib/plugin-connector/src/plugin-discovery/schemas/evidence-package.schema.js similarity index 100% rename from packages/plugin-connector/src/plugin-discovery/schemas/evidence-package.schema.js rename to packages/lib/plugin-connector/src/plugin-discovery/schemas/evidence-package.schema.js diff --git a/packages/plugin-connector/tsconfig.json b/packages/lib/plugin-connector/tsconfig.json similarity index 96% rename from packages/plugin-connector/tsconfig.json rename to packages/lib/plugin-connector/tsconfig.json index cfaeb954d9..2d881793a7 100644 --- a/packages/plugin-connector/tsconfig.json +++ b/packages/lib/plugin-connector/tsconfig.json @@ -26,16 +26,16 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, + "module": "esnext" /* Specify what module code is generated. */, // "rootDir": "./src", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + "moduleResolution": "Node" /* Specify how TypeScript looks up a file from a given module specifier. */, // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - "typeRoots": [ - "types", - "node_modules/@types" - ] /* Specify multiple folders that act like './node_modules/@types'. */, + // "typeRoots": [ + // "types", + // "node_modules/@types" + // ] /* Specify multiple folders that act like './node_modules/@types'. */, // "types": [], /* Specify type package names to be included without being referenced in a source file. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ @@ -108,6 +108,6 @@ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": false /* Skip type checking all .d.ts files. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ } } diff --git a/packages/plugin-connector/types/index.d.ts b/packages/lib/plugin-connector/types/index.d.ts similarity index 78% rename from packages/plugin-connector/types/index.d.ts rename to packages/lib/plugin-connector/types/index.d.ts index 419ddafe08..ed5c3b2d81 100644 --- a/packages/plugin-connector/types/index.d.ts +++ b/packages/lib/plugin-connector/types/index.d.ts @@ -1,4 +1,5 @@ export * from './types'; export * from '../src'; +import './sveltekit-autoimport/index'; import '../src/component-resolution/types.d.ts'; import '../src/data-sources/types.d.ts'; diff --git a/packages/lib/plugin-connector/types/sveltekit-autoimport/index.d.ts b/packages/lib/plugin-connector/types/sveltekit-autoimport/index.d.ts new file mode 100644 index 0000000000..fd480a702b --- /dev/null +++ b/packages/lib/plugin-connector/types/sveltekit-autoimport/index.d.ts @@ -0,0 +1,13 @@ +declare module 'sveltekit-autoimport' { + import { MarkupPreprocessor } from 'svelte/compiler'; + + type AutoImportArgs = { + include?: string[]; + exclude?: string[]; + module?: Record; + mapping?: unknown; + components?: (string | { directory: string; flat?: boolean; prefix?: string })[]; + }; + + export default function (args: AutoImportArgs): { markup: MarkupPreprocessor }; +} diff --git a/packages/plugin-connector/types/types.d.ts b/packages/lib/plugin-connector/types/types.d.ts similarity index 100% rename from packages/plugin-connector/types/types.d.ts rename to packages/lib/plugin-connector/types/types.d.ts diff --git a/packages/plugin-connector/vitest.config.ts b/packages/lib/plugin-connector/vitest.config.ts similarity index 100% rename from packages/plugin-connector/vitest.config.ts rename to packages/lib/plugin-connector/vitest.config.ts diff --git a/packages/trino/.gitignore b/packages/lib/preprocess/.gitignore similarity index 100% rename from packages/trino/.gitignore rename to packages/lib/preprocess/.gitignore diff --git a/packages/preprocess/CHANGELOG.md b/packages/lib/preprocess/CHANGELOG.md similarity index 100% rename from packages/preprocess/CHANGELOG.md rename to packages/lib/preprocess/CHANGELOG.md diff --git a/packages/preprocess/README.md b/packages/lib/preprocess/README.md similarity index 100% rename from packages/preprocess/README.md rename to packages/lib/preprocess/README.md diff --git a/packages/preprocess/index.cjs b/packages/lib/preprocess/index.cjs similarity index 99% rename from packages/preprocess/index.cjs rename to packages/lib/preprocess/index.cjs index 11d4f820ca..f41d866554 100644 --- a/packages/preprocess/index.cjs +++ b/packages/lib/preprocess/index.cjs @@ -10,6 +10,7 @@ const injectPartials = require('./src/partials/inject-partials.cjs'); module.exports = function evidencePreprocess(componentDevelopmentMode = false) { return [ injectPartials, + addScriptTags, processQueries(componentDevelopmentMode), mdsvex.mdsvex({ extensions: ['.md'], @@ -31,8 +32,8 @@ module.exports = function evidencePreprocess(componentDevelopmentMode = false) { ] ] }), + // Add both script tags to all markdown files, if they are missing - addScriptTags, processFrontmatter() ]; }; diff --git a/packages/preprocess/jest.config.js b/packages/lib/preprocess/jest.config.js similarity index 100% rename from packages/preprocess/jest.config.js rename to packages/lib/preprocess/jest.config.js diff --git a/packages/preprocess/package.json b/packages/lib/preprocess/package.json similarity index 94% rename from packages/preprocess/package.json rename to packages/lib/preprocess/package.json index 23e94c96a9..2945ad0e7d 100644 --- a/packages/preprocess/package.json +++ b/packages/lib/preprocess/package.json @@ -20,10 +20,10 @@ "chalk": "4.1.0", "fs-extra": "^11.2.0", "hast-util-select": "^5.0.5", - "mdsvex": "^0.10.6", + "mdsvex": "0.11.0", "prismjs": "^1.29.0", "remark-parse": "8.0.2", - "svelte": "3.55.0", + "svelte": "4.2.12", "svelte-preprocess": "5.1.3", "unified": "^9.1.0", "unist-util-visit": "^2.0.3", @@ -34,7 +34,7 @@ "@types/mock-fs": "^4.13.1", "mock-fs": "^5.2.0", "parcel": "^2.8.3", - "typescript": "^5.1.6", + "typescript": "5.4.2", "vitest": "^0.34.2" }, "main": "dist/index.cjs", diff --git a/packages/preprocess/src/add-classes.cjs b/packages/lib/preprocess/src/add-classes.cjs similarity index 100% rename from packages/preprocess/src/add-classes.cjs rename to packages/lib/preprocess/src/add-classes.cjs diff --git a/packages/preprocess/src/add-script-tags.cjs b/packages/lib/preprocess/src/add-script-tags.cjs similarity index 53% rename from packages/preprocess/src/add-script-tags.cjs rename to packages/lib/preprocess/src/add-script-tags.cjs index 73abe650b0..b8be7bfc20 100644 --- a/packages/preprocess/src/add-script-tags.cjs +++ b/packages/lib/preprocess/src/add-script-tags.cjs @@ -5,13 +5,17 @@ const addScriptTags = { markup({ content, filename }) { if (filename.endsWith('.md')) { if (!content.match(/\/)) { - return { code: '' + '' + content }; + const result = + content + '\n\n\n\n\n\n'; + return { code: result }; } if (!content.match(/\/)) { - return { code: '' + content }; + const result = content + '\n\n\n\n'; + return { code: result }; } if (!content.match(/\/)) { - return { code: '' + content }; + const result = content + '\n\n\n\n'; + return { code: result }; } } } diff --git a/packages/preprocess/src/extract-queries/extract-queries.cjs b/packages/lib/preprocess/src/extract-queries/extract-queries.cjs similarity index 100% rename from packages/preprocess/src/extract-queries/extract-queries.cjs rename to packages/lib/preprocess/src/extract-queries/extract-queries.cjs diff --git a/packages/preprocess/src/extract-queries/get-query-ids.fixture.cjs b/packages/lib/preprocess/src/extract-queries/get-query-ids.fixture.cjs similarity index 100% rename from packages/preprocess/src/extract-queries/get-query-ids.fixture.cjs rename to packages/lib/preprocess/src/extract-queries/get-query-ids.fixture.cjs diff --git a/packages/preprocess/src/extract-queries/get-query-ids.spec.cjs b/packages/lib/preprocess/src/extract-queries/get-query-ids.spec.cjs similarity index 100% rename from packages/preprocess/src/extract-queries/get-query-ids.spec.cjs rename to packages/lib/preprocess/src/extract-queries/get-query-ids.spec.cjs diff --git a/packages/preprocess/src/frontmatter/frontmatter.regex.cjs b/packages/lib/preprocess/src/frontmatter/frontmatter.regex.cjs similarity index 100% rename from packages/preprocess/src/frontmatter/frontmatter.regex.cjs rename to packages/lib/preprocess/src/frontmatter/frontmatter.regex.cjs diff --git a/packages/preprocess/src/frontmatter/handle-og.cjs b/packages/lib/preprocess/src/frontmatter/handle-og.cjs similarity index 100% rename from packages/preprocess/src/frontmatter/handle-og.cjs rename to packages/lib/preprocess/src/frontmatter/handle-og.cjs diff --git a/packages/preprocess/src/frontmatter/parse-frontmatter.cjs b/packages/lib/preprocess/src/frontmatter/parse-frontmatter.cjs similarity index 100% rename from packages/preprocess/src/frontmatter/parse-frontmatter.cjs rename to packages/lib/preprocess/src/frontmatter/parse-frontmatter.cjs diff --git a/packages/preprocess/src/frontmatter/parse-frontmatter.fixture.cjs b/packages/lib/preprocess/src/frontmatter/parse-frontmatter.fixture.cjs similarity index 100% rename from packages/preprocess/src/frontmatter/parse-frontmatter.fixture.cjs rename to packages/lib/preprocess/src/frontmatter/parse-frontmatter.fixture.cjs diff --git a/packages/preprocess/src/frontmatter/parse-frontmatter.spec.cjs b/packages/lib/preprocess/src/frontmatter/parse-frontmatter.spec.cjs similarity index 100% rename from packages/preprocess/src/frontmatter/parse-frontmatter.spec.cjs rename to packages/lib/preprocess/src/frontmatter/parse-frontmatter.spec.cjs diff --git a/packages/preprocess/src/frontmatter/process-frontmatter.cjs b/packages/lib/preprocess/src/frontmatter/process-frontmatter.cjs similarity index 91% rename from packages/preprocess/src/frontmatter/process-frontmatter.cjs rename to packages/lib/preprocess/src/frontmatter/process-frontmatter.cjs index a74a3232e1..817d565049 100644 --- a/packages/preprocess/src/frontmatter/process-frontmatter.cjs +++ b/packages/lib/preprocess/src/frontmatter/process-frontmatter.cjs @@ -17,9 +17,8 @@ module.exports = () => { }; }, script: ({ content, filename, attributes }) => { - if (typeof filename === 'undefined') return; + if (!filename?.endsWith('+page.md')) return; if (attributes.context !== 'module') return; - if (!filename.endsWith('+page.md')) return; if (!content.includes('export const metadata =')) { // There is no frontmatter, and we want to make sure that it as at least defined. diff --git a/packages/preprocess/src/partials/inject-partials.cjs b/packages/lib/preprocess/src/partials/inject-partials.cjs similarity index 100% rename from packages/preprocess/src/partials/inject-partials.cjs rename to packages/lib/preprocess/src/partials/inject-partials.cjs diff --git a/packages/preprocess/src/partials/inject-partials.spec.js b/packages/lib/preprocess/src/partials/inject-partials.spec.js similarity index 100% rename from packages/preprocess/src/partials/inject-partials.spec.js rename to packages/lib/preprocess/src/partials/inject-partials.spec.js diff --git a/packages/preprocess/src/process-queries.cjs b/packages/lib/preprocess/src/process-queries.cjs similarity index 99% rename from packages/preprocess/src/process-queries.cjs rename to packages/lib/preprocess/src/process-queries.cjs index c5842b8867..1e1cfdc5df 100644 --- a/packages/preprocess/src/process-queries.cjs +++ b/packages/lib/preprocess/src/process-queries.cjs @@ -344,6 +344,7 @@ const processQueries = (componentDevelopmentMode) => { markup({ content, filename }) { if (filename.endsWith('.md')) { let fileQueries = extractQueries(content); + dynamicQueries[getRouteHash(filename)] = fileQueries.reduce((acc, q) => { acc[q.id] = q; return acc; @@ -362,6 +363,7 @@ const processQueries = (componentDevelopmentMode) => { const frontmatter = containsFrontmatter(content); if (frontmatter) { const contentWithoutFrontmatter = content.substring(frontmatter.length + 6); + const output = `---\n${frontmatter}\n---` + externalQueryViews + contentWithoutFrontmatter; return { @@ -376,8 +378,9 @@ const processQueries = (componentDevelopmentMode) => { }, script({ content, filename, attributes }) { if (filename.endsWith('.md')) { - if (attributes.context != 'module') { + if (attributes.context !== 'module') { const duckdbQueries = dynamicQueries[getRouteHash(filename)]; + return { code: createDefaultProps(filename, componentDevelopmentMode, duckdbQueries) + content }; diff --git a/packages/preprocess/src/utils/get-prism-langs.cjs b/packages/lib/preprocess/src/utils/get-prism-langs.cjs similarity index 100% rename from packages/preprocess/src/utils/get-prism-langs.cjs rename to packages/lib/preprocess/src/utils/get-prism-langs.cjs diff --git a/packages/preprocess/src/utils/get-route-hash.cjs b/packages/lib/preprocess/src/utils/get-route-hash.cjs similarity index 100% rename from packages/preprocess/src/utils/get-route-hash.cjs rename to packages/lib/preprocess/src/utils/get-route-hash.cjs diff --git a/packages/preprocess/src/utils/get-route-hash.spec.cjs b/packages/lib/preprocess/src/utils/get-route-hash.spec.cjs similarity index 100% rename from packages/preprocess/src/utils/get-route-hash.spec.cjs rename to packages/lib/preprocess/src/utils/get-route-hash.spec.cjs diff --git a/packages/preprocess/src/utils/highlighter.cjs b/packages/lib/preprocess/src/utils/highlighter.cjs similarity index 100% rename from packages/preprocess/src/utils/highlighter.cjs rename to packages/lib/preprocess/src/utils/highlighter.cjs diff --git a/packages/preprocess/src/utils/higlighter.spec.js b/packages/lib/preprocess/src/utils/higlighter.spec.js similarity index 100% rename from packages/preprocess/src/utils/higlighter.spec.js rename to packages/lib/preprocess/src/utils/higlighter.spec.js diff --git a/packages/preprocess/src/utils/supportedLanguages.cjs b/packages/lib/preprocess/src/utils/supportedLanguages.cjs similarity index 100% rename from packages/preprocess/src/utils/supportedLanguages.cjs rename to packages/lib/preprocess/src/utils/supportedLanguages.cjs diff --git a/packages/preprocess/tsconfig.json b/packages/lib/preprocess/tsconfig.json similarity index 100% rename from packages/preprocess/tsconfig.json rename to packages/lib/preprocess/tsconfig.json diff --git a/packages/query-store/.eslintrc.mjs b/packages/lib/query-store/.eslintrc.mjs similarity index 100% rename from packages/query-store/.eslintrc.mjs rename to packages/lib/query-store/.eslintrc.mjs diff --git a/packages/query-store/CHANGELOG.md b/packages/lib/query-store/CHANGELOG.md similarity index 100% rename from packages/query-store/CHANGELOG.md rename to packages/lib/query-store/CHANGELOG.md diff --git a/packages/query-store/package.json b/packages/lib/query-store/package.json similarity index 96% rename from packages/query-store/package.json rename to packages/lib/query-store/package.json index 6cb3971aa5..c85ff0e6f7 100644 --- a/packages/query-store/package.json +++ b/packages/lib/query-store/package.json @@ -16,7 +16,7 @@ "author": "The Evidence Engineering Team", "license": "MIT", "devDependencies": { - "typescript": "^5.2.2", + "typescript": "5.4.2", "vitest": "^0.34.1" }, "dependencies": { diff --git a/packages/query-store/src/QueryStore.spec.ts b/packages/lib/query-store/src/QueryStore.spec.ts similarity index 100% rename from packages/query-store/src/QueryStore.spec.ts rename to packages/lib/query-store/src/QueryStore.spec.ts diff --git a/packages/query-store/src/QueryStore.ts b/packages/lib/query-store/src/QueryStore.ts similarity index 99% rename from packages/query-store/src/QueryStore.ts rename to packages/lib/query-store/src/QueryStore.ts index 5573d75fd1..8b623984c1 100644 --- a/packages/query-store/src/QueryStore.ts +++ b/packages/lib/query-store/src/QueryStore.ts @@ -55,7 +55,7 @@ export class QueryStore extends AbstractStore { typeof window === 'undefined' ? process.env.VITE_EVIDENCE_DEBUG : // @ts-expect-error - import.meta?.env?.VITE_EVIDENCE_DEBUG + import.meta?.env?.VITE_EVIDENCE_DEBUG ); /** @@ -332,6 +332,8 @@ export class QueryStore extends AbstractStore { this.#dataLoaded = false; this.#metaLoaded = false; this.#lengthLoaded = false; + // unresolvable promise + this.#dataFetchPromise = new Promise(() => {}); this.publish(); } else { handleMaybePromise( diff --git a/packages/query-store/src/abstract.store.ts b/packages/lib/query-store/src/abstract.store.ts similarity index 100% rename from packages/query-store/src/abstract.store.ts rename to packages/lib/query-store/src/abstract.store.ts diff --git a/packages/query-store/src/index.ts b/packages/lib/query-store/src/index.ts similarity index 100% rename from packages/query-store/src/index.ts rename to packages/lib/query-store/src/index.ts diff --git a/packages/query-store/src/mutations/agg.ts b/packages/lib/query-store/src/mutations/agg.ts similarity index 100% rename from packages/query-store/src/mutations/agg.ts rename to packages/lib/query-store/src/mutations/agg.ts diff --git a/packages/query-store/src/mutations/group.ts b/packages/lib/query-store/src/mutations/group.ts similarity index 100% rename from packages/query-store/src/mutations/group.ts rename to packages/lib/query-store/src/mutations/group.ts diff --git a/packages/query-store/src/mutations/index.ts b/packages/lib/query-store/src/mutations/index.ts similarity index 100% rename from packages/query-store/src/mutations/index.ts rename to packages/lib/query-store/src/mutations/index.ts diff --git a/packages/query-store/src/mutations/order.ts b/packages/lib/query-store/src/mutations/order.ts similarity index 100% rename from packages/query-store/src/mutations/order.ts rename to packages/lib/query-store/src/mutations/order.ts diff --git a/packages/query-store/src/mutations/pagination.ts b/packages/lib/query-store/src/mutations/pagination.ts similarity index 100% rename from packages/query-store/src/mutations/pagination.ts rename to packages/lib/query-store/src/mutations/pagination.ts diff --git a/packages/query-store/src/mutations/where.ts b/packages/lib/query-store/src/mutations/where.ts similarity index 100% rename from packages/query-store/src/mutations/where.ts rename to packages/lib/query-store/src/mutations/where.ts diff --git a/packages/query-store/src/types.ts b/packages/lib/query-store/src/types.ts similarity index 100% rename from packages/query-store/src/types.ts rename to packages/lib/query-store/src/types.ts diff --git a/packages/query-store/src/types/mosaic-sql.d.ts b/packages/lib/query-store/src/types/mosaic-sql.d.ts similarity index 100% rename from packages/query-store/src/types/mosaic-sql.d.ts rename to packages/lib/query-store/src/types/mosaic-sql.d.ts diff --git a/packages/query-store/src/utils/buildId.ts b/packages/lib/query-store/src/utils/buildId.ts similarity index 100% rename from packages/query-store/src/utils/buildId.ts rename to packages/lib/query-store/src/utils/buildId.ts diff --git a/packages/query-store/src/utils/forceArray.ts b/packages/lib/query-store/src/utils/forceArray.ts similarity index 100% rename from packages/query-store/src/utils/forceArray.ts rename to packages/lib/query-store/src/utils/forceArray.ts diff --git a/packages/query-store/src/utils/handleMaybePromise.ts b/packages/lib/query-store/src/utils/handleMaybePromise.ts similarity index 100% rename from packages/query-store/src/utils/handleMaybePromise.ts rename to packages/lib/query-store/src/utils/handleMaybePromise.ts diff --git a/packages/query-store/src/utils/stringifyQuery.js b/packages/lib/query-store/src/utils/stringifyQuery.js similarity index 100% rename from packages/query-store/src/utils/stringifyQuery.js rename to packages/lib/query-store/src/utils/stringifyQuery.js diff --git a/packages/query-store/tsconfig.json b/packages/lib/query-store/tsconfig.json similarity index 100% rename from packages/query-store/tsconfig.json rename to packages/lib/query-store/tsconfig.json diff --git a/packages/core-components/.eslintignore b/packages/lib/sdk/.eslintignore similarity index 100% rename from packages/core-components/.eslintignore rename to packages/lib/sdk/.eslintignore diff --git a/packages/lib/sdk/.eslintrc.cjs b/packages/lib/sdk/.eslintrc.cjs new file mode 100644 index 0000000000..a8f242ec3d --- /dev/null +++ b/packages/lib/sdk/.eslintrc.cjs @@ -0,0 +1,15 @@ +/** @type { import("eslint").Linter.Config } */ +module.exports = { + root: true, + extends: ['eslint:recommended', 'plugin:svelte/recommended', 'prettier'], + parserOptions: { + sourceType: 'module', + ecmaVersion: 13, + extraFileExtensions: ['.svelte'] + }, + env: { + browser: true, + es2017: true, + node: true + } +}; diff --git a/packages/lib/sdk/.gitignore b/packages/lib/sdk/.gitignore new file mode 100644 index 0000000000..b5671c2eb0 --- /dev/null +++ b/packages/lib/sdk/.gitignore @@ -0,0 +1,2 @@ +coverage +types diff --git a/packages/lib/sdk/.npmignore b/packages/lib/sdk/.npmignore new file mode 100644 index 0000000000..e912c92b96 --- /dev/null +++ b/packages/lib/sdk/.npmignore @@ -0,0 +1,7 @@ +coverage/ +.changeset +.eslintignore +.eslintrc.cjs +.prettierignore +.prettierrc +result.xml diff --git a/packages/lib/sdk/.prettierignore b/packages/lib/sdk/.prettierignore new file mode 100644 index 0000000000..85aee5a570 --- /dev/null +++ b/packages/lib/sdk/.prettierignore @@ -0,0 +1,5 @@ +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock +types \ No newline at end of file diff --git a/packages/lib/sdk/.prettierrc b/packages/lib/sdk/.prettierrc new file mode 100644 index 0000000000..3f7802c372 --- /dev/null +++ b/packages/lib/sdk/.prettierrc @@ -0,0 +1,15 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/packages/lib/sdk/CHANGELOG.md b/packages/lib/sdk/CHANGELOG.md new file mode 100644 index 0000000000..d8b5486aff --- /dev/null +++ b/packages/lib/sdk/CHANGELOG.md @@ -0,0 +1,144 @@ +# @evidence-dev/sdk + +## 0.0.1 + +### Patch Changes + +- 6338875: Adjusted types and tsconfig +- 02752bd: Implement evidence-sdk connections edit +- b55d8e2: Add $evidence/build with BUILD_ID and BUILD_DATE exports +- 76c9332: Ensure directory recursion works properly for wrapped simple connectors +- ab01260: Enter edit mode for freshly created sources +- eda12cb: - Add file watcher for static assets +- 4192323: Remove svelte-preprocess dep +- 1dfaf71: Added basic support for layout plugins +- 1dfaf71: Refreshed the add cli command +- d036482: Internalized @evidence-dev/query-store +- ec88e75: - Don't die when app.d.ts does not exist in a headless project + - Check dev deps for sdk package to avoid overwriting the version + - Svelte compatibility (no sveltekit) + - Do not ignore files not prefixed with + + - Add new copy style + - Better error messaging + - Copy ./components into template + - Layouts can also specify where components should be placed + - Try to handle paths better + - This still needs improvements, .evidence vs \_evidence, headless vs regular projects, adapter-node vs adapter-static all can cause problems. + - Added a slide deck example layout + project +- 4bdbb48: Update log output for add command +- 956686c: Create $evidence/config virtual export for accessing the current project's configuration +- 94bad8b: Initial Preview version +- 20fc555: Implemented Build command for evidence projects +- 6b69c23: Lost track +- 74d88ad: Remove expect error directive +- 41da2c3: Allow datasource connectors to return a table with url instead of rows to point to remote parquet file +- 76c9332: Remove unused $evidence/queries/\* types +- 76c9332: Ensure that caching and filtering rules are respected when evaluating queries +- 76c9332: Handle uncaught exceptions / unhandled promise rejections +- 1dfaf71: Added a plugin installation command +- 76c9332: Remove filter field from layout plugin specification, needs re-evaluation and more planning +- c8319d8: Change projectRoot to attempt to auto-detect if we are running in a template +- 13800a3: Include a static directory when copying to template +- 76c9332: Remove the template directory before re-copying from the template package +- 76c9332: Improve error messages for a malformed component manifest +- a8f6aab: - No longer uses fork to create a child process + - Can accept projects w/o a components directory now + +## 0.0.1-preview.11 + +### Patch Changes + +- b55d8e2: Add $evidence/build with BUILD_ID and BUILD_DATE exports +- d036482: Internalized @evidence-dev/query-store +- 956686c: Create $evidence/config virtual export for accessing the current project's configuration +- 20fc555: Implemented Build command for evidence projects +- 41da2c3: Allow datasource connectors to return a table with url instead of rows to point to remote parquet file + +## 0.0.1-preview.10 + +### Patch Changes + +- eda12cb: - Add file watcher for static assets +- 74d88ad: Remove expect error directive + +## 0.0.1-preview.9 + +### Patch Changes + +- 4bdbb48: Update log output for add command +- c8319d8: Change projectRoot to attempt to auto-detect if we are running in a template +- 13800a3: Include a static directory when copying to template + +## 0.0.1-preview.8 + +### Patch Changes + +- a8f6aab: - No longer uses fork to create a child process + - Can accept projects w/o a components directory now + +## 0.0.1-preview.7 + +### Patch Changes + +- 76c9332: Ensure directory recursion works properly for wrapped simple connectors +- ec88e75: - Don't die when app.d.ts does not exist in a headless project + - Check dev deps for sdk package to avoid overwriting the version + - Svelte compatibility (no sveltekit) + - Do not ignore files not prefixed with + + - Add new copy style + - Better error messaging + - Copy ./components into template + - Layouts can also specify where components should be placed + - Try to handle paths better + - This still needs improvements, .evidence vs \_evidence, headless vs regular projects, adapter-node vs adapter-static all can cause problems. + - Added a slide deck example layout + project +- 76c9332: Remove unused $evidence/queries/\* types +- 76c9332: Ensure that caching and filtering rules are respected when evaluating queries +- 76c9332: Handle uncaught exceptions / unhandled promise rejections +- 76c9332: Remove filter field from layout plugin specification, needs re-evaluation and more planning +- 76c9332: Remove the template directory before re-copying from the template package +- 76c9332: Improve error messages for a malformed component manifest + +## 0.0.1-preview.6 + +### Patch Changes + +- Lost track + +## 0.0.1-preview.5 + +### Patch Changes + +- Added basic support for layout plugins +- Refreshed the add cli command +- Added a plugin installation command + +## 0.0.1-preview.4 + +### Patch Changes + +- ab01260: Enter edit mode for freshly created sources + +## 0.0.1-preview.3 + +### Patch Changes + +- 4192323: Remove svelte-preprocess dep + +## 0.0.1-preview.2 + +### Patch Changes + +- 02752bd: Implement evidence-sdk connections edit + +## 0.0.1-preview.1 + +### Patch Changes + +- 6338875: Adjusted types and tsconfig + +## 0.0.1-preview.0 + +### Patch Changes + +- Initial Preview version diff --git a/packages/lib/sdk/README.md b/packages/lib/sdk/README.md new file mode 100644 index 0000000000..3adbc31e1a --- /dev/null +++ b/packages/lib/sdk/README.md @@ -0,0 +1,236 @@ +evidence-logo + +
+ +

Evidence SDK

+The fastest way to build highly interactive data apps + +![GitHub Repo stars](https://img.shields.io/github/stars/evidence-dev/evidence?style=social) +![NPM](https://img.shields.io/npm/l/%40evidence-dev%2Fsdk) +![NPM Version (with dist tag)](https://img.shields.io/npm/v/%40evidence-dev%2Fsdk/preview?label=Version) +[![Join Slack](https://img.shields.io/badge/slack-join-blue?logo=slack&)](https://slack.evidence.dev) + +
+ +## How it works + +The Evidence SDK contains all the tools needed to build interactive data apps, all the way from the database to the browser. + +- **Datasource Connectors** - Plugins to connect to a variety of datasoures, including Databases, APIs, Flat files, and more +- **Run queries in the browser** - Universal SQL is the fastest way to use DuckDB WASM with your databases + +## Installation + +1. (If needed), create your SvelteKit project (e.g. `npm create svelte`) +2. Install the SDK `npm i @evidence-dev/sdk@preview` +3. Add the SDK to your project using `npx evidence-sdk add` +4. Use `npx evidence-sdk plugins install` if you did not install a plugin during `add` + 5. If the data source you want to use is not listed, and there is an Evidence plugin for it, you can install the package and add it to `evidence.config.yaml` manually. +5. Create a new connection with `npx evidence-sdk connections edit` + 1. Once the connection is created, there will be a new `sources/[connection]` directory, for most connectors, you will need to create some source queries. +6. Populate the data with `npx evidence-sdk sources` + +## Usage + +See [the wiki](https://github.com/evidence-dev/sdk/wiki) + +There are 2 methods for executing queries using the Evidence SDK; using `` elements, and calling `runQuery` directly. +`` elements automatically make their results available to child components (or pages, if used in a layout), while +`runQuery` keeps the query scoped to the current page. + +### Using `` + +#### Writing Queries + +To add a query to your page, use a `` element with an `evidence-query-name` attribute (`lang=sql` is optional but recommended). + +Wrapping this in a `
` tag will prevent formatters from changing your SQL.
+
+Example:
+
+```svelte
+

+SELECT * FROM my_first_table
+
+``` + +When using ``, you can interpolate variables from the page using _template string syntax_, Svelte syntax is not supported. + +Working Example: + +```svelte +

+SELECT * FROM my_first_table WHERE user_id = '${selectedUserId}'
+
+``` + +Broken Example: + +```svelte +

+SELECT * FROM my_first_table WHERE user_id = '{selectedUserId}'
+
+``` + +#### Accessing Queries + +To load queries that are placed on the page, create a reference to the queries store from `$evidence/queries` + +```svelte + +``` + +`$queries` is a set of [`QueryStore`](https://github.com/evidence-dev/evidence/tree/main/packages/query-store) based on what is provided on the page. + +#### Full Example + +```svelte + + +

+SELECT * FROM my_first_table
+
+ +{#if !$myFirstQuery.loaded} + + Loading... +{:else if $myFirstQuery.error} + + Error: {$myFirstQuery.error.message} +{:else} + + {#each $myFirstQuery as row (row.id)} + Row ID: {row.id} + {:else} + No resuls available + {/each} +{/if} +``` + +### Using `runQuery` + +#### Full Example + +```svelte + + + +{#if !$myFirstQuery.loaded} + + Loading... +{:else if $myFirstQuery.error} + + Error: {$myFirstQuery.error.message} +{:else} + + {#each $myFirstQuery as row (row.id)} + Row ID: {row.id} + {:else} + No resuls available + {/each} +{/if} +``` + +### Enabling SSR + +If you are using the [``](#using-code) method, all you need to do is make sure the server hook is installed. + +If you are using the [`runQuery`](#using-runquery) method, you will need to use the `` component. + +#### Configuring SSR Hook + +1. Ensure that you have a `./src/hooks.server.[js|ts]` file +2. Create or update the `handle` function to match: + + - To create: + + ```javascript + import { ssrHook } from '$evidence/ssrHook.svelte.js'; + + /** @type {import('@sveltejs/kit').Handle} */ + export async function handle({ event, resolve }) { + /** @type {{ name: string, queryString: string}[]} */ + const presentQueries = []; + const response = await resolve(event, { + transformPageChunk: ssrHook(presentQueries) + }); + return response; + } + ``` + + - If you already use `resolve` and `transformPageChunk`, you can chain the functions like so: + + ```javascript + import { ssrHook } from '$evidence/ssrHook.svelte.js'; + + /** @type {import('@sveltejs/kit').Handle} */ + export async function handle({ event, resolve }) { + /** @type {{ name: string, queryString: string}[]} */ + const presentQueries = [] + const evidenceChunkTransform = ssrHook(presentQueries) + + const response = await resolve(event, { + transformPageChunk: ({html, done}) => { + // ... Do something to html + html = await evidenceChunkTransform({ html, done }) + // ... Do other things to html + return html + }); + return response; + } + ``` + +#### Using `` + +`` registers your queries with the Evidence Preprocessor, which enables correct rehydration of your queries. + +```svelte + + + +``` diff --git a/packages/lib/sdk/package.json b/packages/lib/sdk/package.json new file mode 100644 index 0000000000..972b9a9864 --- /dev/null +++ b/packages/lib/sdk/package.json @@ -0,0 +1,96 @@ +{ + "name": "@evidence-dev/sdk", + "version": "0.0.1", + "description": "", + "bin": { + "evidence-sdk": "./src/cli.js", + "evidence": "./src/cli.js" + }, + "exports": { + ".": { + "default": "./src/index.js", + "import": "./src/index.js", + "require": null, + "types": "./types/index.d.ts" + }, + "./ambient": { + "default": null, + "import": null, + "node": null, + "require": null, + "types": "./src/types/virtuals.d.ts" + }, + "./query-store": { + "default": "./src/query-store/index.js", + "import": "./src/query-store/index.js", + "require": null, + "types": "./src/query-store/index.d.ts" + } + }, + "scripts": { + "prepack": "npm run check && npm run build", + "postinstall": "npm run build", + "test": "vitest", + "check:types": "tsc -p tsconfig.json --noEmit", + "check": "tsc -p tsconfig.json --noEmit && eslint src", + "build:types": "tsc -p tsconfig.json --emitDeclarationOnly", + "build": "tsc -p tsconfig.json --emitDeclarationOnly", + "format": "prettier src -w", + "lint": "eslint src --fix", + "cli": "node ./src/cli.js" + }, + "keywords": [], + "author": "", + "license": "MIT", + "type": "module", + "dependencies": { + "@brianmd/citty": "^0.0.1", + "@clack/prompts": "^0.7.0", + "@evidence-dev/universal-sql": "^2.0.3", + "@steeze-ui/simple-icons": "^1.7.1", + "@steeze-ui/tabler-icons": "^2.1.1", + "@types/estree": "^1.0.5", + "@types/express": "^4.17.21", + "@types/jsdom": "^21.1.6", + "@types/lodash.merge": "^4.6.9", + "@types/node": "^20.11.0", + "@typescript-eslint/typescript-estree": "^6.18.1", + "@uwdata/mosaic-sql": "^0.4.0", + "@vitest/coverage-v8": "^1.2.0", + "chalk": "^5.3.0", + "chokidar": "^3.5.3", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-svelte": "^2.35.1", + "estree-walker": "^3.0.3", + "express": "^4.18.2", + "highlight.js": "^11.9.0", + "jsdom": "^23.2.0", + "lodash.merge": "^4.6.2", + "mdsvex": "^0.11.0", + "nanoid": "^5.0.4", + "ora": "^8.0.1", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.0.3", + "prettier": "^3.1.1", + "prettier-plugin-svelte": "^3.1.2", + "recast": "^0.23.4", + "svelte-sequential-preprocessor": "^2.0.1", + "sveltekit-autoimport": "^1.7.1", + "vite": "^5.0.11", + "vitest": "^1.1.3", + "yaml": "^2.3.4", + "zod": "^3.22.4" + }, + "devDependencies": { + "@changesets/cli": "^2.27.1", + "memfs": "^4.6.0", + "svelte": "^4.2.8", + "typescript": "^5.3.3" + }, + "peerDependencies": { + "@evidence-dev/universal-sql": "^2.0.1", + "nanoid": "^5.0.4", + "perfect-debounce": "^1.0.0" + } +} diff --git a/packages/lib/sdk/pnpm-lock.yaml b/packages/lib/sdk/pnpm-lock.yaml new file mode 100644 index 0000000000..1f575f3f3d --- /dev/null +++ b/packages/lib/sdk/pnpm-lock.yaml @@ -0,0 +1,5835 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@brianmd/citty': + specifier: ^0.0.1 + version: 0.0.1 + '@clack/prompts': + specifier: ^0.7.0 + version: 0.7.0 + '@evidence-dev/universal-sql': + specifier: ^2.0.3 + version: 2.0.3 + '@steeze-ui/simple-icons': + specifier: ^1.7.1 + version: 1.7.1 + '@steeze-ui/tabler-icons': + specifier: ^2.1.1 + version: 2.1.1 + '@types/estree': + specifier: ^1.0.5 + version: 1.0.5 + '@types/express': + specifier: ^4.17.21 + version: 4.17.21 + '@types/jsdom': + specifier: ^21.1.6 + version: 21.1.6 + '@types/lodash.merge': + specifier: ^4.6.9 + version: 4.6.9 + '@types/node': + specifier: ^20.11.2 + version: 20.11.2 + '@typescript-eslint/typescript-estree': + specifier: ^6.18.1 + version: 6.18.1(typescript@5.3.3) + '@uwdata/mosaic-sql': + specifier: ^0.4.0 + version: 0.4.0 + '@vitest/coverage-v8': + specifier: ^1.2.0 + version: 1.2.0(vitest@1.2.0) + chalk: + specifier: ^5.3.0 + version: 5.3.0 + chokidar: + specifier: ^3.5.3 + version: 3.5.3 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.56.0) + eslint-plugin-svelte: + specifier: ^2.35.1 + version: 2.35.1(eslint@8.56.0)(svelte@4.2.8) + estree-walker: + specifier: ^3.0.3 + version: 3.0.3 + express: + specifier: ^4.18.2 + version: 4.18.2 + highlight.js: + specifier: ^11.9.0 + version: 11.9.0 + jsdom: + specifier: ^23.2.0 + version: 23.2.0 + lodash.merge: + specifier: ^4.6.2 + version: 4.6.2 + mdsvex: + specifier: ^0.11.0 + version: 0.11.0(svelte@4.2.8) + nanoid: + specifier: ^5.0.4 + version: 5.0.4 + ora: + specifier: ^8.0.1 + version: 8.0.1 + perfect-debounce: + specifier: ^1.0.0 + version: 1.0.0 + pkg-types: + specifier: ^1.0.3 + version: 1.0.3 + prettier: + specifier: ^3.1.1 + version: 3.2.2 + prettier-plugin-svelte: + specifier: ^3.1.2 + version: 3.1.2(prettier@3.2.2)(svelte@4.2.8) + prettier-plugin-tailwindcss: + specifier: ^0.5.11 + version: 0.5.11(prettier-plugin-svelte@3.1.2)(prettier@3.2.2) + recast: + specifier: ^0.23.4 + version: 0.23.4 + svelte-sequential-preprocessor: + specifier: ^2.0.1 + version: 2.0.1 + sveltekit-autoimport: + specifier: ^1.7.1 + version: 1.7.1(@sveltejs/kit@1.30.3) + vite: + specifier: ^5.0.11 + version: 5.0.12(@types/node@20.11.2) + vitest: + specifier: ^1.1.3 + version: 1.2.0(@types/node@20.11.2)(jsdom@23.2.0) + yaml: + specifier: ^2.3.4 + version: 2.3.4 + zod: + specifier: ^3.22.4 + version: 3.22.4 + +devDependencies: + '@changesets/cli': + specifier: ^2.27.1 + version: 2.27.1 + memfs: + specifier: ^4.6.0 + version: 4.6.0(quill-delta@5.1.0)(rxjs@7.8.1)(tslib@2.6.2) + svelte: + specifier: ^4.2.8 + version: 4.2.8 + typescript: + specifier: ^5.3.3 + version: 5.3.3 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: false + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.21 + + /@asamuzakjp/dom-selector@2.0.2: + resolution: {integrity: sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==} + dependencies: + bidi-js: 1.0.3 + css-tree: 2.3.1 + is-potential-custom-element-name: 1.0.1 + dev: false + + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + dev: false + + /@babel/runtime@7.23.8: + resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: true + + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: false + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: false + + /@brianmd/citty@0.0.1: + resolution: {integrity: sha512-GIw4FjBrNMqXVACK6UAIr2zDiRdxm+t2k9IpR04e2OGZ8zHy1HPVEGoofqoaHCfqeJtn3tRR5uQM6DgGuKZHmw==} + dependencies: + consola: 3.2.3 + dev: false + + /@changesets/apply-release-plan@7.0.0: + resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} + dependencies: + '@babel/runtime': 7.23.8 + '@changesets/config': 3.0.0 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.5.4 + dev: true + + /@changesets/assemble-release-plan@6.0.0: + resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} + dependencies: + '@babel/runtime': 7.23.8 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.5.4 + dev: true + + /@changesets/changelog-git@0.2.0: + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + dependencies: + '@changesets/types': 6.0.0 + dev: true + + /@changesets/cli@2.27.1: + resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} + hasBin: true + dependencies: + '@babel/runtime': 7.23.8 + '@changesets/apply-release-plan': 7.0.0 + '@changesets/assemble-release-plan': 6.0.0 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.0 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/get-release-plan': 4.0.0 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 + '@changesets/write': 0.3.0 + '@manypkg/get-packages': 1.1.3 + '@types/semver': 7.5.6 + ansi-colors: 4.1.3 + chalk: 2.4.2 + ci-info: 3.9.0 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + meow: 6.1.1 + outdent: 0.5.0 + p-limit: 2.3.0 + preferred-pm: 3.1.2 + resolve-from: 5.0.0 + semver: 7.5.4 + spawndamnit: 2.0.0 + term-size: 2.2.1 + tty-table: 4.2.3 + dev: true + + /@changesets/config@3.0.0: + resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/logger': 0.1.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.5 + dev: true + + /@changesets/errors@0.2.0: + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + dependencies: + extendable-error: 0.1.7 + dev: true + + /@changesets/get-dependents-graph@2.0.0: + resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + chalk: 2.4.2 + fs-extra: 7.0.1 + semver: 7.5.4 + dev: true + + /@changesets/get-release-plan@4.0.0: + resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} + dependencies: + '@babel/runtime': 7.23.8 + '@changesets/assemble-release-plan': 6.0.0 + '@changesets/config': 3.0.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + dev: true + + /@changesets/get-version-range-type@0.4.0: + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + dev: true + + /@changesets/git@3.0.0: + resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + dependencies: + '@babel/runtime': 7.23.8 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.5 + spawndamnit: 2.0.0 + dev: true + + /@changesets/logger@0.1.0: + resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + dependencies: + chalk: 2.4.2 + dev: true + + /@changesets/parse@0.4.0: + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + dependencies: + '@changesets/types': 6.0.0 + js-yaml: 3.14.1 + dev: true + + /@changesets/pre@2.0.0: + resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + dependencies: + '@babel/runtime': 7.23.8 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + dev: true + + /@changesets/read@0.6.0: + resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + dependencies: + '@babel/runtime': 7.23.8 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 + chalk: 2.4.2 + fs-extra: 7.0.1 + p-filter: 2.1.0 + dev: true + + /@changesets/types@4.1.0: + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + dev: true + + /@changesets/types@6.0.0: + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + dev: true + + /@changesets/write@0.3.0: + resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} + dependencies: + '@babel/runtime': 7.23.8 + '@changesets/types': 6.0.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + prettier: 2.8.8 + dev: true + + /@clack/core@0.3.3: + resolution: {integrity: sha512-5ZGyb75BUBjlll6eOa1m/IZBxwk91dooBWhPSL67sWcLS0zt9SnswRL0l26TVdBhb0wnWORRxUn//uH6n4z7+A==} + dependencies: + picocolors: 1.0.0 + sisteransi: 1.0.5 + dev: false + + /@clack/prompts@0.7.0: + resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} + dependencies: + '@clack/core': 0.3.3 + picocolors: 1.0.0 + sisteransi: 1.0.5 + dev: false + bundledDependencies: + - is-unicode-supported + + /@duckdb/duckdb-wasm@1.27.0: + resolution: {integrity: sha512-qx0OjbS1NWAWZSU6hJb6bbyhN48LQn5kO54XsGeBdXbtJYDpPWGfTksP6meWsH8DKCUJIwAXLLImuGvIcY0l0A==} + dependencies: + apache-arrow: 11.0.0 + dev: false + + /@esbuild/aix-ppc64@0.19.11: + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm64@0.19.11: + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm@0.19.11: + resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-x64@0.19.11: + resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-arm64@0.19.11: + resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-x64@0.19.11: + resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-arm64@0.19.11: + resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-x64@0.19.11: + resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm64@0.19.11: + resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm@0.19.11: + resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ia32@0.19.11: + resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-loong64@0.19.11: + resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-mips64el@0.19.11: + resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ppc64@0.19.11: + resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-riscv64@0.19.11: + resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-s390x@0.19.11: + resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-x64@0.19.11: + resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/netbsd-x64@0.19.11: + resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/openbsd-x64@0.19.11: + resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/sunos-x64@0.19.11: + resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-arm64@0.19.11: + resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-ia32@0.19.11: + resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-x64@0.19.11: + resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + dev: false + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: false + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /@evidence-dev/universal-sql@2.0.3: + resolution: {integrity: sha512-/NiX5LQX0KUCyhaYLtvO23BbyQtWIHOGhlzgi0Ze6TXY7tQuR2RZ3vDKYEItAZF+r64JpSDkefRkMAsjPuTo6A==} + dependencies: + '@duckdb/duckdb-wasm': 1.27.0 + '@types/lodash.chunk': 4.2.9 + '@types/node': 20.11.2 + apache-arrow: 11.0.0 + chalk: 5.3.0 + cli-progress: 3.12.0 + duckdb: 0.9.2 + lodash.chunk: 4.2.0 + parquet-wasm: 0.5.0 + web-worker: 1.3.0 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + dev: false + + /@fastify/busboy@2.1.0: + resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} + engines: {node: '>=14'} + dev: false + + /@gar/promisify@1.1.3: + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + dev: false + + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: false + + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + dev: false + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: false + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: false + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.21 + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.21: + resolution: {integrity: sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@manypkg/find-root@1.1.0: + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + dependencies: + '@babel/runtime': 7.23.8 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + dev: true + + /@manypkg/get-packages@1.1.3: + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + dependencies: + '@babel/runtime': 7.23.8 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + dev: true + + /@mapbox/node-pre-gyp@1.0.11: + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + dependencies: + detect-libc: 2.0.2 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.5.4 + tar: 6.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.16.0 + + /@npmcli/fs@2.1.2: + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.5.4 + dev: false + + /@npmcli/move-file@2.0.1: + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + dev: false + + /@polka/url@1.0.0-next.24: + resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} + dev: false + + /@rollup/pluginutils@4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: false + + /@rollup/rollup-android-arm-eabi@4.9.5: + resolution: {integrity: sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-android-arm64@4.9.5: + resolution: {integrity: sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-darwin-arm64@4.9.5: + resolution: {integrity: sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-darwin-x64@4.9.5: + resolution: {integrity: sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.9.5: + resolution: {integrity: sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.9.5: + resolution: {integrity: sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-arm64-musl@4.9.5: + resolution: {integrity: sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.9.5: + resolution: {integrity: sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-x64-gnu@4.9.5: + resolution: {integrity: sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-x64-musl@4.9.5: + resolution: {integrity: sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.9.5: + resolution: {integrity: sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.9.5: + resolution: {integrity: sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-win32-x64-msvc@4.9.5: + resolution: {integrity: sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: false + + /@steeze-ui/simple-icons@1.7.1: + resolution: {integrity: sha512-vIsurZBiP6ksg/6zvE6wQVKVludu3UFtePmIAWAbmfjlA6LcjGx+IpX0xNOhVfUs8dC8cMOVn2yLbDhQm5dLYA==} + dev: false + + /@steeze-ui/tabler-icons@2.1.1: + resolution: {integrity: sha512-cWnORbuPwXhsrH3hebxZ0gSF/zMZEuLz014XoGcxXhU+GPYixqXjyBbTfJiGjbexRjkj7A2/1ocx6AcWEwN1Pw==} + dev: false + + /@sveltejs/kit@1.30.3(svelte@4.2.8)(vite@5.0.12): + resolution: {integrity: sha512-0DzVXfU4h+tChFvoc8C61IqErCyskD4ydSIDjpKS2lYlEzIYrtYrY7juSqACFxqcvZAnOEXvSY+zZ8br0+ZMMg==} + engines: {node: ^16.14 || >=18} + hasBin: true + requiresBuild: true + peerDependencies: + svelte: ^3.54.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@5.0.12) + '@types/cookie': 0.5.4 + cookie: 0.5.0 + devalue: 4.3.2 + esm-env: 1.0.0 + kleur: 4.1.5 + magic-string: 0.30.7 + mrmime: 1.0.1 + sade: 1.8.1 + set-cookie-parser: 2.6.0 + sirv: 2.0.4 + svelte: 4.2.8 + tiny-glob: 0.2.9 + undici: 5.26.5 + vite: 5.0.12(@types/node@20.11.2) + transitivePeerDependencies: + - supports-color + dev: false + + /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@5.0.12): + resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} + 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 + dependencies: + '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@5.0.12) + debug: 4.3.4 + svelte: 4.2.8 + vite: 5.0.12(@types/node@20.11.2) + transitivePeerDependencies: + - supports-color + dev: false + + /@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.8)(vite@5.0.12): + resolution: {integrity: sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==} + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@5.0.12) + debug: 4.3.4 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.7 + svelte: 4.2.8 + svelte-hmr: 0.15.3(svelte@4.2.8) + vite: 5.0.12(@types/node@20.11.2) + vitefu: 0.2.5(vite@5.0.12) + transitivePeerDependencies: + - supports-color + dev: false + + /@tootallnate/once@2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + dev: false + + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.11.2 + dev: false + + /@types/command-line-args@5.2.0: + resolution: {integrity: sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==} + dev: false + + /@types/command-line-usage@5.0.2: + resolution: {integrity: sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==} + dev: false + + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 20.11.2 + dev: false + + /@types/cookie@0.5.4: + resolution: {integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==} + dev: false + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + /@types/express-serve-static-core@4.17.41: + resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} + dependencies: + '@types/node': 20.11.2 + '@types/qs': 6.9.11 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: false + + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.17.41 + '@types/qs': 6.9.11 + '@types/serve-static': 1.15.5 + dev: false + + /@types/flatbuffers@1.10.3: + resolution: {integrity: sha512-kwJQsAROanCiMXSLjcTLmYVBIJ9Qyuqs92SaDIcj2EII2KnDgZbiU7it1Z/JfZd1gmxw/lAahMysQ6ZM+j3Ryw==} + dev: false + + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: false + + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: false + + /@types/jsdom@21.1.6: + resolution: {integrity: sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==} + dependencies: + '@types/node': 20.11.2 + '@types/tough-cookie': 4.0.5 + parse5: 7.1.2 + dev: false + + /@types/lodash.chunk@4.2.9: + resolution: {integrity: sha512-Z9VtFUSnmT0No/QymqfG9AGbfOA4O5qB/uyP89xeZBqDAsKsB4gQFTqt7d0pHjbsTwtQ4yZObQVHuKlSOhIJ5Q==} + dependencies: + '@types/lodash': 4.14.202 + dev: false + + /@types/lodash.merge@4.6.9: + resolution: {integrity: sha512-23sHDPmzd59kUgWyKGiOMO2Qb9YtqRO/x4IhkgNUiPQ1+5MUVqi6bCZeq9nBJ17msjIMbEIO5u+XW4Kz6aGUhQ==} + dependencies: + '@types/lodash': 4.14.202 + dev: false + + /@types/lodash@4.14.202: + resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + dev: false + + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: false + + /@types/mime@3.0.4: + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + dev: false + + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + dev: true + + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true + + /@types/node@18.7.23: + resolution: {integrity: sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==} + dev: false + + /@types/node@20.11.2: + resolution: {integrity: sha512-cZShBaVa+UO1LjWWBPmWRR4+/eY/JR/UIEcDlVsw3okjWEu+rB7/mH6X3B/L+qJVHDLjk9QW/y2upp9wp1yDXA==} + dependencies: + undici-types: 5.26.5 + dev: false + + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true + + /@types/pad-left@2.1.1: + resolution: {integrity: sha512-Xd22WCRBydkGSApl5Bw0PhAOHKSVjNL3E3AwzKaps96IMraPqy5BvZIsBVK6JLwdybUzjHnuWVwpDd0JjTfHXA==} + dev: false + + /@types/qs@6.9.11: + resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} + dev: false + + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: false + + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + dev: true + + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.11.2 + dev: false + + /@types/serve-static@1.15.5: + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/mime': 3.0.4 + '@types/node': 20.11.2 + dev: false + + /@types/tough-cookie@4.0.5: + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + dev: false + + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + dev: false + + /@typescript-eslint/types@6.18.1: + resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: false + + /@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3): + resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/visitor-keys': 6.18.1 + 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.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/visitor-keys@6.18.1: + resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.18.1 + eslint-visitor-keys: 3.4.3 + dev: false + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: false + + /@uwdata/mosaic-sql@0.4.0: + resolution: {integrity: sha512-QpjG6jrKJ4bH0eud4h719IaCgUOCYX6acyd5/HalFbDdjGHmFIPfcm8SYEnzvg+Jxz1jBfuH/2tpgOHahOK8xA==} + dev: false + + /@vitest/coverage-v8@1.2.0(vitest@1.2.0): + resolution: {integrity: sha512-YvX8ULTUm1+zkvkl14IqXYGxE1h13OXKPoDsxazARKlp4YLrP28hHEBdplaU7ZTN/Yn6zy6Z3JadWNRJwcmyrQ==} + peerDependencies: + vitest: ^1.0.0 + dependencies: + '@ampproject/remapping': 2.2.1 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + magic-string: 0.30.5 + magicast: 0.3.3 + picocolors: 1.0.0 + std-env: 3.7.0 + test-exclude: 6.0.0 + v8-to-istanbul: 9.2.0 + vitest: 1.2.0(@types/node@20.11.2)(jsdom@23.2.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@vitest/expect@1.2.0: + resolution: {integrity: sha512-H+2bHzhyvgp32o7Pgj2h9RTHN0pgYaoi26Oo3mE+dCi1PAqV31kIIVfTbqMO3Bvshd5mIrJLc73EwSRrbol9Lw==} + dependencies: + '@vitest/spy': 1.2.0 + '@vitest/utils': 1.2.0 + chai: 4.4.1 + dev: false + + /@vitest/runner@1.2.0: + resolution: {integrity: sha512-vaJkDoQaNUTroT70OhM0NPznP7H3WyRwt4LvGwCVYs/llLaqhoSLnlIhUClZpbF5RgAee29KRcNz0FEhYcgxqA==} + dependencies: + '@vitest/utils': 1.2.0 + p-limit: 5.0.0 + pathe: 1.1.2 + dev: false + + /@vitest/snapshot@1.2.0: + resolution: {integrity: sha512-P33EE7TrVgB3HDLllrjK/GG6WSnmUtWohbwcQqmm7TAk9AVHpdgf7M3F3qRHKm6vhr7x3eGIln7VH052Smo6Kw==} + dependencies: + magic-string: 0.30.5 + pathe: 1.1.2 + pretty-format: 29.7.0 + dev: false + + /@vitest/spy@1.2.0: + resolution: {integrity: sha512-MNxSAfxUaCeowqyyGwC293yZgk7cECZU9wGb8N1pYQ0yOn/SIr8t0l9XnGRdQZvNV/ZHBYu6GO/W3tj5K3VN1Q==} + dependencies: + tinyspy: 2.2.0 + dev: false + + /@vitest/utils@1.2.0: + resolution: {integrity: sha512-FyD5bpugsXlwVpTcGLDf3wSPYy8g541fQt14qtzo8mJ4LdEpDKZ9mQy2+qdJm2TZRpjY5JLXihXCgIxiRJgi5g==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: false + + /abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + dev: false + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: false + + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + dev: false + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + dev: false + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: false + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: false + + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: false + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: false + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /apache-arrow@11.0.0: + resolution: {integrity: sha512-M8J4y+DimIyS44w2KOmVfzNHbTroR1oDpBKK6BYnlu8xVB41lxTz0yLmapo8/WJVAt5XcinAxMm14M771dm/rA==} + hasBin: true + dependencies: + '@types/command-line-args': 5.2.0 + '@types/command-line-usage': 5.0.2 + '@types/flatbuffers': 1.10.3 + '@types/node': 18.7.23 + '@types/pad-left': 2.1.1 + command-line-args: 5.2.1 + command-line-usage: 6.1.3 + flatbuffers: 2.0.4 + json-bignum: 0.0.3 + pad-left: 2.1.0 + tslib: 2.6.2 + dev: false + + /aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + dev: false + + /are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: false + + /are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: false + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: false + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + + /array-back@3.1.0: + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} + dev: false + + /array-back@4.0.2: + resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} + engines: {node: '>=8'} + dev: false + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + + /assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + dependencies: + call-bind: 1.0.5 + is-nan: 1.3.2 + object-is: 1.1.5 + object.assign: 4.1.5 + util: 0.12.5 + dev: false + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: false + + /ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.2 + dev: false + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: false + + /better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + dependencies: + is-windows: 1.0.2 + dev: true + + /bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + dependencies: + require-from-string: 2.0.2 + dev: false + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false + + /body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: false + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: false + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /breakword@1.0.6: + resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + dependencies: + wcwidth: 1.0.1 + dev: true + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: false + + /cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + '@npmcli/fs': 2.1.2 + '@npmcli/move-file': 2.0.1 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 8.1.0 + infer-owner: 1.0.4 + lru-cache: 7.18.3 + minipass: 3.3.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.1 + tar: 6.2.0 + unique-filename: 2.0.1 + transitivePeerDependencies: + - bluebird + dev: false + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.2.0 + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: false + + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: false + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: false + + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: false + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: false + + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: false + + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: false + + /cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + dependencies: + string-width: 4.2.3 + dev: false + + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: false + + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + + /code-red@1.0.4: + resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + '@types/estree': 1.0.5 + acorn: 8.11.3 + estree-walker: 3.0.3 + periscopic: 3.1.0 + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + dev: false + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /command-line-args@5.2.1: + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} + dependencies: + array-back: 3.1.0 + find-replace: 3.0.0 + lodash.camelcase: 4.3.0 + typical: 4.0.0 + dev: false + + /command-line-usage@6.1.3: + resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} + engines: {node: '>=8.0.0'} + dependencies: + array-back: 4.0.2 + chalk: 2.4.2 + table-layout: 1.0.2 + typical: 5.2.0 + dev: false + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: false + + /consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + dev: false + + /console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + dev: false + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: false + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: false + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /cssstyle@4.0.1: + resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} + engines: {node: '>=18'} + dependencies: + rrweb-cssom: 0.6.0 + dev: false + + /csv-generate@3.4.3: + resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + dev: true + + /csv-parse@4.16.3: + resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + dev: true + + /csv-stringify@5.6.5: + resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + dev: true + + /csv@5.5.3: + resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} + engines: {node: '>= 0.1.90'} + dependencies: + csv-generate: 3.4.3 + csv-parse: 4.16.3 + csv-stringify: 5.6.5 + stream-transform: 2.1.3 + dev: true + + /data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + dev: false + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: false + + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: false + + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: false + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: false + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: false + + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: false + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + dev: false + + /devalue@4.3.2: + resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} + dev: false + + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: false + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: false + + /duckdb@0.9.2: + resolution: {integrity: sha512-POZ37Vf5cHVmk4W8z0PsdGi67VeQsr9HRrBbmivDt9AQ8C1XLESVE79facydbroNiqm7+n7fx6jqjyxyrBFYlQ==} + requiresBuild: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + node-addon-api: 7.0.0 + node-gyp: 9.4.1 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + dev: false + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + requiresBuild: true + dependencies: + iconv-lite: 0.6.3 + dev: false + optional: true + + /enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + dev: true + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: false + + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + dev: false + + /err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + dev: false + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.1.0 + safe-regex-test: 1.0.2 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.13 + dev: true + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /esbuild@0.19.11: + resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.11 + '@esbuild/android-arm': 0.19.11 + '@esbuild/android-arm64': 0.19.11 + '@esbuild/android-x64': 0.19.11 + '@esbuild/darwin-arm64': 0.19.11 + '@esbuild/darwin-x64': 0.19.11 + '@esbuild/freebsd-arm64': 0.19.11 + '@esbuild/freebsd-x64': 0.19.11 + '@esbuild/linux-arm': 0.19.11 + '@esbuild/linux-arm64': 0.19.11 + '@esbuild/linux-ia32': 0.19.11 + '@esbuild/linux-loong64': 0.19.11 + '@esbuild/linux-mips64el': 0.19.11 + '@esbuild/linux-ppc64': 0.19.11 + '@esbuild/linux-riscv64': 0.19.11 + '@esbuild/linux-s390x': 0.19.11 + '@esbuild/linux-x64': 0.19.11 + '@esbuild/netbsd-x64': 0.19.11 + '@esbuild/openbsd-x64': 0.19.11 + '@esbuild/sunos-x64': 0.19.11 + '@esbuild/win32-arm64': 0.19.11 + '@esbuild/win32-ia32': 0.19.11 + '@esbuild/win32-x64': 0.19.11 + dev: false + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: false + + /eslint-compat-utils@0.1.2(eslint@8.56.0): + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.56.0 + dev: false + + /eslint-config-prettier@9.1.0(eslint@8.56.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.56.0 + dev: false + + /eslint-plugin-svelte@2.35.1(eslint@8.56.0)(svelte@4.2.8): + resolution: {integrity: sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0-0 + svelte: ^3.37.0 || ^4.0.0 + peerDependenciesMeta: + svelte: + optional: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@jridgewell/sourcemap-codec': 1.4.15 + debug: 4.3.4 + eslint: 8.56.0 + eslint-compat-utils: 0.1.2(eslint@8.56.0) + esutils: 2.0.3 + known-css-properties: 0.29.0 + postcss: 8.4.33 + postcss-load-config: 3.1.4(postcss@8.4.33) + postcss-safe-parser: 6.0.0(postcss@8.4.33) + postcss-selector-parser: 6.0.15 + semver: 7.5.4 + svelte: 4.2.8 + svelte-eslint-parser: 0.33.1(svelte@4.2.8) + transitivePeerDependencies: + - supports-color + - ts-node + dev: false + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: false + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + 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.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + 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 + transitivePeerDependencies: + - supports-color + dev: false + + /esm-env@1.0.0: + resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} + dev: false + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + dev: false + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: false + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: false + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: false + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: false + + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: false + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.2.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: false + + /exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + dev: false + + /express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + dev: true + + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: false + + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: false + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: false + + /fastq@1.16.0: + resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} + dependencies: + reusify: 1.0.4 + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: false + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-replace@3.0.0: + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} + dependencies: + array-back: 3.1.0 + dev: false + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + /find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + dependencies: + micromatch: 4.0.5 + pkg-dir: 4.2.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: false + + /flatbuffers@2.0.4: + resolution: {integrity: sha512-4rUFVDPjSoP0tOII34oQf+72NKU7E088U5oX7kwICahft0UB2kOQ9wUzzCp+OHxByERIfxRDCgX5mP8Pjkfl0g==} + dev: false + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + + /fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: false + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: false + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: false + + /gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + aproba: 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 + dev: false + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + dev: false + + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: false + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: false + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: false + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: false + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: false + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + dev: false + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 3.0.0 + + /globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: false + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: false + + /hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + + /has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + dev: false + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /highlight.js@11.9.0: + resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} + engines: {node: '>=12.0.0'} + dev: false + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + dependencies: + whatwg-encoding: 3.1.1 + dev: false + + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: false + + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: false + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + dev: true + + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: false + + /humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + dev: false + + /hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + dev: true + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: false + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: false + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + /infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + dev: false + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: false + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + + /ip@2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + dev: false + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: false + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + dev: false + + /is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + dev: false + + /is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + dev: false + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: false + + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: false + + /is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + dependencies: + '@types/estree': 1.0.5 + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + dependencies: + better-path-resolve: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + + /is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + dev: false + + /is-unicode-supported@2.0.0: + resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} + engines: {node: '>=18'} + dev: false + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /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'} + dev: false + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: false + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: false + + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: false + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: false + + /jsdom@23.2.0: + resolution: {integrity: sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + '@asamuzakjp/dom-selector': 2.0.2 + cssstyle: 4.0.1 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + is-potential-custom-element-name: 1.0.1 + parse5: 7.1.2 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.16.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /json-bignum@0.0.3: + resolution: {integrity: sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==} + engines: {node: '>=0.8'} + dev: false + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: false + + /json-joy@9.9.1(quill-delta@5.1.0)(rxjs@7.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-/d7th2nbQRBQ/nqTkBe6KjjvDciSwn9UICmndwk3Ed/Bk9AqkTRm4PnLVfXG4DKbT0rEY0nKnwE7NqZlqKE6kg==} + engines: {node: '>=10.0'} + hasBin: true + peerDependencies: + quill-delta: ^5 + rxjs: '7' + tslib: '2' + dependencies: + arg: 5.0.2 + hyperdyperid: 1.2.0 + quill-delta: 5.1.0 + rxjs: 7.8.1 + tslib: 2.6.2 + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: false + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: false + + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: false + + /jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: false + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + /known-css-properties@0.29.0: + resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} + dev: false + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: false + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: false + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.5.0 + pkg-types: 1.0.3 + dev: false + + /locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: false + + /lodash.chunk@4.2.0: + resolution: {integrity: sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==} + dev: false + + /lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: true + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: false + + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true + + /log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + dev: false + + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: false + + /lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: false + + /magic-string@0.26.7: + resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: false + + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + /magic-string@0.30.7: + resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + + /magicast@0.3.3: + resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==} + dependencies: + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + source-map-js: 1.0.2 + dev: false + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: false + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: false + + /make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + agentkeepalive: 4.5.0 + cacache: 16.1.3 + http-cache-semantics: 4.1.1 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 2.1.2 + 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.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: false + + /map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true + + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + /mdsvex@0.11.0(svelte@4.2.8): + resolution: {integrity: sha512-gJF1s0N2nCmdxcKn8HDn0LKrN8poStqAicp6bBcsKFd/zkUBGLP5e7vnxu+g0pjBbDFOscUyI1mtHz+YK2TCDw==} + peerDependencies: + svelte: '>=3 <5' + dependencies: + '@types/unist': 2.0.10 + prism-svelte: 0.4.7 + prismjs: 1.29.0 + svelte: 4.2.8 + vfile-message: 2.0.4 + dev: false + + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + + /memfs@4.6.0(quill-delta@5.1.0)(rxjs@7.8.1)(tslib@2.6.2): + resolution: {integrity: sha512-I6mhA1//KEZfKRQT9LujyW6lRbX7RkC24xKododIDO3AGShcaFAMKElv1yFGWX8fD4UaSiwasr3NeQ5TdtHY1A==} + engines: {node: '>= 4.0.0'} + peerDependencies: + tslib: '2' + dependencies: + json-joy: 9.9.1(quill-delta@5.1.0)(rxjs@7.8.1)(tslib@2.6.2) + thingies: 1.16.0(tslib@2.6.2) + tslib: 2.6.2 + transitivePeerDependencies: + - quill-delta + - rxjs + dev: true + + /meow@6.1.1: + resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + engines: {node: '>=8'} + dependencies: + '@types/minimist': 1.2.5 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 2.5.0 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.13.1 + yargs-parser: 18.1.3 + dev: true + + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: false + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: false + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: false + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: false + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: false + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + + /minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: false + + /minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + dev: false + + /minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: false + + /minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + dev: false + + /minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + dev: false + + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: false + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + dev: false + + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: false + + /mixme@0.5.10: + resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} + engines: {node: '>= 8.0.0'} + dev: true + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: false + + /mlly@1.5.0: + resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.0.3 + ufo: 1.3.2 + dev: false + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + + /mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + dev: false + + /mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: false + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false + + /nanoid@5.0.4: + resolution: {integrity: sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==} + engines: {node: ^18 || >=20} + hasBin: true + dev: false + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: false + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /node-addon-api@7.0.0: + resolution: {integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==} + dev: false + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + + /node-gyp@9.4.1: + resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.5.4 + tar: 6.2.0 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + dev: false + + /nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: false + + /nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: false + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /npm-run-path@5.2.0: + resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: false + + /npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + dev: false + + /npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + dev: false + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + /object-is@1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + dev: false + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: false + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: false + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: false + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: false + + /ora@8.0.1: + resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} + engines: {node: '>=18'} + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.0.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.0.0 + strip-ansi: 7.1.0 + dev: false + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + + /outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + dev: true + + /p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + dependencies: + p-map: 2.1.0 + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: false + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true + + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: false + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /pad-left@2.1.0: + resolution: {integrity: sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==} + engines: {node: '>=0.10.0'} + dependencies: + repeat-string: 1.6.1 + dev: false + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: false + + /parquet-wasm@0.5.0: + resolution: {integrity: sha512-XN3EW+3xf915QgpxCvfCdVYsxDLXz+BckKLDlMo41cbipSYD8x+F/3lGcrWtxdY6uJgAmtb+SX3tS+9PPsplQA==} + dev: false + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: false + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: false + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: false + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: false + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: false + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: false + + /perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + dev: false + + /periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + dependencies: + '@types/estree': 1.0.5 + estree-walker: 3.0.3 + is-reference: 3.0.2 + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: false + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.5.0 + pathe: 1.1.2 + dev: false + + /postcss-load-config@3.1.4(postcss@8.4.33): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.33 + yaml: 1.10.2 + dev: false + + /postcss-safe-parser@6.0.0(postcss@8.4.33): + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.3.3 + dependencies: + postcss: 8.4.33 + dev: false + + /postcss-scss@4.0.9(postcss@8.4.33): + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + dependencies: + postcss: 8.4.33 + dev: false + + /postcss-selector-parser@6.0.15: + resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: false + + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + + /preferred-pm@3.1.2: + resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.0.0 + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: false + + /prettier-plugin-svelte@3.1.2(prettier@3.2.2)(svelte@4.2.8): + resolution: {integrity: sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==} + peerDependencies: + prettier: ^3.0.0 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + dependencies: + prettier: 3.2.2 + svelte: 4.2.8 + dev: false + + /prettier-plugin-tailwindcss@0.5.11(prettier-plugin-svelte@3.1.2)(prettier@3.2.2): + resolution: {integrity: sha512-AvI/DNyMctyyxGOjyePgi/gqj5hJYClZ1avtQvLlqMT3uDZkRbi4HhGUpok3DRzv9z7Lti85Kdj3s3/1CeNI0w==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + prettier-plugin-twig-melody: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier-plugin-twig-melody: + optional: true + dependencies: + prettier: 3.2.2 + prettier-plugin-svelte: 3.1.2(prettier@3.2.2)(svelte@4.2.8) + dev: false + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prettier@3.2.2: + resolution: {integrity: sha512-HTByuKZzw7utPiDO523Tt2pLtEyK7OibUD9suEJQrPUCYQqrHr74GGX6VidMrovbf/I50mPqr8j/II6oBAuc5A==} + engines: {node: '>=14'} + hasBin: true + dev: false + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: false + + /prism-svelte@0.4.7: + resolution: {integrity: sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==} + dev: false + + /prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + dev: false + + /promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dev: false + + /promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + dev: false + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: true + + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: false + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: false + + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: false + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true + + /quill-delta@5.1.0: + resolution: {integrity: sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==} + engines: {node: '>= 12.0.0'} + dependencies: + fast-diff: 1.3.0 + lodash.clonedeep: 4.5.0 + lodash.isequal: 4.5.0 + dev: true + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: false + + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /recast@0.23.4: + resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} + engines: {node: '>= 4'} + dependencies: + assert: 2.1.0 + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tslib: 2.6.2 + dev: false + + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: true + + /reduce-flatten@2.0.0: + resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} + engines: {node: '>=6'} + dev: false + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true + + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + + /repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: false + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true + + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: false + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: false + + /retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + dev: false + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: false + + /rollup@4.9.5: + resolution: {integrity: sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.9.5 + '@rollup/rollup-android-arm64': 4.9.5 + '@rollup/rollup-darwin-arm64': 4.9.5 + '@rollup/rollup-darwin-x64': 4.9.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.5 + '@rollup/rollup-linux-arm64-gnu': 4.9.5 + '@rollup/rollup-linux-arm64-musl': 4.9.5 + '@rollup/rollup-linux-riscv64-gnu': 4.9.5 + '@rollup/rollup-linux-x64-gnu': 4.9.5 + '@rollup/rollup-linux-x64-musl': 4.9.5 + '@rollup/rollup-win32-arm64-msvc': 4.9.5 + '@rollup/rollup-win32-ia32-msvc': 4.9.5 + '@rollup/rollup-win32-x64-msvc': 4.9.5 + fsevents: 2.3.3 + dev: false + + /rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + dev: false + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.2 + dev: true + + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + + /safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safe-regex-test@1.0.2: + resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-regex: 1.1.4 + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + /saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + dependencies: + xmlchars: 2.2.0 + dev: false + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: false + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + /set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + dev: false + + /set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: true + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: false + + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: false + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: false + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: false + + /sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.24 + mrmime: 2.0.0 + totalist: 3.0.1 + dev: false + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: false + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: false + + /smartwrap@2.0.2: + resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + array.prototype.flat: 1.3.2 + breakword: 1.0.6 + grapheme-splitter: 1.0.4 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 15.4.1 + dev: true + + /socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + socks: 2.7.1 + transitivePeerDependencies: + - supports-color + dev: false + + /socks@2.7.1: + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + dependencies: + ip: 2.0.0 + smart-buffer: 4.2.0 + dev: false + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: false + + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: false + + /spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + dependencies: + cross-spawn: 5.1.0 + signal-exit: 3.0.7 + dev: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + minipass: 3.3.6 + dev: false + + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: false + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: false + + /stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + dev: false + + /stream-transform@2.1.3: + resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + dependencies: + mixme: 0.5.10 + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@7.0.0: + resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} + engines: {node: '>=18'} + dependencies: + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + dev: false + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: false + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: false + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: false + + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + dependencies: + acorn: 8.11.3 + dev: false + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /svelte-eslint-parser@0.33.1(svelte@4.2.8): + resolution: {integrity: sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + svelte: ^3.37.0 || ^4.0.0 + peerDependenciesMeta: + svelte: + optional: true + dependencies: + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + postcss: 8.4.33 + postcss-scss: 4.0.9(postcss@8.4.33) + svelte: 4.2.8 + dev: false + + /svelte-hmr@0.15.3(svelte@4.2.8): + resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} + peerDependencies: + svelte: ^3.19.0 || ^4.0.0 + dependencies: + svelte: 4.2.8 + dev: false + + /svelte-sequential-preprocessor@2.0.1: + resolution: {integrity: sha512-N5JqlBni6BzElxmuFrOPxOJnjsxh1cFDACLEVKs8OHBcx8ZNRO1p5SxuQex1m3qbLzAC8G99EHeWcxGkjyKjLQ==} + engines: {node: '>=16'} + dependencies: + svelte: 4.2.8 + tslib: 2.6.2 + dev: false + + /svelte@4.2.8: + resolution: {integrity: sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==} + engines: {node: '>=16'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.21 + acorn: 8.11.3 + aria-query: 5.3.0 + axobject-query: 3.2.1 + code-red: 1.0.4 + css-tree: 2.3.1 + estree-walker: 3.0.3 + is-reference: 3.0.2 + locate-character: 3.0.0 + magic-string: 0.30.5 + periscopic: 3.1.0 + + /sveltekit-autoimport@1.7.1(@sveltejs/kit@1.30.3): + resolution: {integrity: sha512-cW0nVpyTxXIIvvCfe1HjKgOeoqO2vDR6GGkv1jIYRVTuKtOLipqVYOQ+FAZp2+Ydl0YKNogAeZBVN+twj7rNAQ==} + peerDependencies: + '@sveltejs/kit': ^1.0.0-next.0 + dependencies: + '@rollup/pluginutils': 4.2.1 + '@sveltejs/kit': 1.30.3(svelte@4.2.8)(vite@5.0.12) + estree-walker: 2.0.2 + magic-string: 0.26.7 + dev: false + + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: false + + /table-layout@1.0.2: + resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} + engines: {node: '>=8.0.0'} + dependencies: + array-back: 4.0.2 + deep-extend: 0.6.0 + typical: 5.2.0 + wordwrapjs: 4.0.1 + dev: false + + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + 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 + dev: false + + /term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + dev: true + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: false + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: false + + /thingies@1.16.0(tslib@2.6.2): + resolution: {integrity: sha512-J23AVs11hSQxuJxvfQyMIaS9z1QpDxOCvMkL3ZxZl8/jmkgmnNGWrlyNxVz6Jbh0U6DuGmHqq6f7zUROfg/ncg==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + dependencies: + tslib: 2.6.2 + dev: true + + /tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + dev: false + + /tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + dev: false + + /tinypool@0.8.1: + resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} + engines: {node: '>=14.0.0'} + dev: false + + /tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + dev: false + + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + dev: false + + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: false + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + + /tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + dependencies: + punycode: 2.3.1 + dev: false + + /trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + dev: true + + /ts-api-utils@1.0.3(typescript@5.3.3): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.3.3 + dev: false + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + /tty-table@4.2.3: + resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + chalk: 4.1.2 + csv: 5.5.3 + kleur: 4.1.5 + smartwrap: 2.0.2 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 17.7.2 + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: false + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: false + + /type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: false + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: true + + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + + /typical@4.0.0: + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} + dev: false + + /typical@5.2.0: + resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} + engines: {node: '>=8'} + dev: false + + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + dev: false + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: false + + /undici@5.26.5: + resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.1.0 + dev: false + + /unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + unique-slug: 3.0.0 + dev: false + + /unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + dev: false + + /unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + dependencies: + '@types/unist': 2.0.10 + dev: false + + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: false + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: false + + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.12 + which-typed-array: 1.1.13 + dev: false + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.21 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + dev: false + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + + /vfile-message@2.0.4: + resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} + dependencies: + '@types/unist': 2.0.10 + unist-util-stringify-position: 2.0.3 + dev: false + + /vite-node@1.2.0(@types/node@20.11.2): + resolution: {integrity: sha512-ETnQTHeAbbOxl7/pyBck9oAPZZZo+kYnFt1uQDD+hPReOc+wCjXw4r4jHriBRuVDB5isHmPXxrfc1yJnfBERqg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + pathe: 1.1.2 + picocolors: 1.0.0 + vite: 5.0.12(@types/node@20.11.2) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: false + + /vite@5.0.12(@types/node@20.11.2): + resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} + 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: '*' + 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 + dependencies: + '@types/node': 20.11.2 + esbuild: 0.19.11 + postcss: 8.4.33 + rollup: 4.9.5 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /vitefu@0.2.5(vite@5.0.12): + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 5.0.12(@types/node@20.11.2) + dev: false + + /vitest@1.2.0(@types/node@20.11.2)(jsdom@23.2.0): + resolution: {integrity: sha512-Ixs5m7BjqvLHXcibkzKRQUvD/XLw0E3rvqaCMlrm/0LMsA0309ZqYvTlPzkhh81VlEyVZXFlwWnkhb6/UMtcaQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': ^1.0.0 + '@vitest/ui': ^1.0.0 + 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 + dependencies: + '@types/node': 20.11.2 + '@vitest/expect': 1.2.0 + '@vitest/runner': 1.2.0 + '@vitest/snapshot': 1.2.0 + '@vitest/spy': 1.2.0 + '@vitest/utils': 1.2.0 + acorn-walk: 8.3.2 + cac: 6.7.14 + chai: 4.4.1 + debug: 4.3.4 + execa: 8.0.1 + jsdom: 23.2.0 + local-pkg: 0.5.0 + magic-string: 0.30.5 + pathe: 1.1.2 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.8.1 + vite: 5.0.12(@types/node@20.11.2) + vite-node: 1.2.0(@types/node@20.11.2) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: false + + /w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + dependencies: + xml-name-validator: 5.0.0 + dev: false + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + + /web-worker@1.3.0: + resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==} + dev: false + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + + /webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: false + + /whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + dependencies: + iconv-lite: 0.6.3 + dev: false + + /whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + dev: false + + /whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: true + + /which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + dev: true + + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: false + + /wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 + dev: false + + /wordwrapjs@4.0.1: + resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} + engines: {node: '>=8.0.0'} + dependencies: + reduce-flatten: 2.0.0 + typical: 5.2.0 + dev: false + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false + + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + 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 + dev: false + + /xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + dev: false + + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: false + + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: false + + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + 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.8 + yargs-parser: 21.1.1 + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: false + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false diff --git a/packages/lib/sdk/result.xml b/packages/lib/sdk/result.xml new file mode 100644 index 0000000000..59f8a1cd85 --- /dev/null +++ b/packages/lib/sdk/result.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + +Ignoring source type "ddb" from test-package-2, already overriden by test-package + + + + + + + + + + + + + + + + + + + + + + + + + +[33m[!] fake-dir is not a valid source (no connection.yaml); skipping[39m +ENOENT: no such file or directory, open 'fake-dir/connection.yaml' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/lib/sdk/src/build-dev/cli/add.js b/packages/lib/sdk/src/build-dev/cli/add.js new file mode 100644 index 0000000000..fd3db06c66 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/cli/add.js @@ -0,0 +1,95 @@ +import * as prompt from '@clack/prompts'; +import { updateSvelteConfig } from './add/updateSvelteConfig.js'; +import { updatePackageJson } from './add/updatePackageJson.js'; +import { updateViteConfig } from './add/updateViteConfig.js'; +import { createEvidenceConfig } from '../../configuration/createEvidenceConfig.js'; +import { updateGitIgnore } from './add/updateGitIgnore.js'; +import { addTypeRef } from './add/addTypeRef.js'; + +import fs from 'fs/promises'; +import path from 'path'; +import { installPluginPrompt } from '../../plugins/cli/install.prompt.js'; + +import chalk from 'chalk'; +import { projectRoot } from '../../lib/projectRoot.js'; +import { addServerHook } from './add/addServerHook.js'; +import { EvidenceError } from '../../lib/EvidenceError.js'; + +/** @type {import("@brianmd/citty").CommandDef} */ +export const add = { + meta: { + name: 'add', + description: 'Add evidence to your Svelte project' + }, + async run() { + prompt.intro('Installing Evidence SDK in your project'); + await updateGitIgnore(); + prompt.log.step('Updated .gitignore'); + await updatePackageJson(); + prompt.log.step('Updated package.json'); + await updateSvelteConfig(); + prompt.log.step('Updated svelte configuration'); + await updateViteConfig(); + prompt.log.step('Updated vite configuration'); + await addTypeRef(); + prompt.log.step('Added type reference'); + + // TODO: Detect if we are in a sveltekit project + await addServerHook(); + prompt.log.step('Server hook configured'); + await createEvidenceConfig() + .then(() => { + prompt.log.step('Created evidence.config.yaml'); + }) + .catch((e) => { + if (e instanceof EvidenceError && e.message.includes('Configuration file already exists')) { + console.debug(chalk.dim('Did not create evidence.config.yaml, already exists')); + } else { + throw e; + } + }); + + await fs.mkdir(path.resolve(projectRoot, 'sources'), { recursive: true }); + + prompt.log.step('Created sources directory'); + + const installSources = await prompt.confirm({ + message: 'Would you like to install a datasource?' + }); + if (installSources === true) { + const result = await installPluginPrompt(true, 'datasource', true); + if (result) { + prompt.log.info( + `Plugin installed! Run ${chalk.bold('npm i')} to install it and ${chalk.bold( + 'npx evidence-sdk connections edit' + )} to set up a connection.` + ); + } else { + prompt.log.warn( + `You did not install any plugins; install one manually, or use ${chalk.bold( + 'npx evidence-sdk plugins install' + )} for an interactive helper.` + ); + } + } else { + prompt.log.warn( + `You did not install any plugins; install one manually, or use ${chalk.bold( + 'npx evidence-sdk plugins install' + )} for an interactive helper.` + ); + } + + prompt.log.info( + [ + chalk.bold('Thanks for trying out the Evidence SDK Preview!'), + 'Please note that the interfaces in the preview are unstable, and bugs are to be expected', + 'We do not consider this ready for production yet.', + 'If you encounter issues, you can report them on GitHub:' + + chalk.bold('https://github.com/evidence-dev/sdk/issues/new'), + chalk.green("Happy SQL'ing! 🎉") + ].join('\n') + ); + + prompt.outro('Evidence SDK Installed!'); + } +}; diff --git a/packages/lib/sdk/src/build-dev/cli/add/addServerHook.js b/packages/lib/sdk/src/build-dev/cli/add/addServerHook.js new file mode 100644 index 0000000000..b2df56a515 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/cli/add/addServerHook.js @@ -0,0 +1,30 @@ +import { findFile } from 'pkg-types'; +import fs from 'fs/promises'; +import { log } from '@clack/prompts'; + +const defaultContent = ` +import { ssrHook } from '$evidence/ssrHook.svelte.js'; + +/** @type {import('@sveltejs/kit').Handle} */ +export async function handle({ event, resolve }) { + /** @type {{ name: string, queryString: string}[]} */ + const presentQueries = [] + const response = await resolve(event, { + transformPageChunk: ssrHook(presentQueries) + }); + return response; +} +`; + +export const addServerHook = async () => { + const hooks = await findFile('./src/hooks.server.js') + .catch(() => findFile('./src/hooks.server.ts')) + .catch(() => false); + if (hooks) { + log.warn( + 'Server hooks file already exists. Please see the wiki for information on configuring SSR. https://github.com/evidence-dev/sdk/wiki/Configuring-SSR' + ); + } else { + await fs.writeFile('./src/hooks.server.js', defaultContent); + } +}; diff --git a/packages/lib/sdk/src/build-dev/cli/add/addTypeRef.js b/packages/lib/sdk/src/build-dev/cli/add/addTypeRef.js new file mode 100644 index 0000000000..a95834bc9f --- /dev/null +++ b/packages/lib/sdk/src/build-dev/cli/add/addTypeRef.js @@ -0,0 +1,19 @@ +import { findFile } from 'pkg-types'; +import fs from 'fs/promises'; +import { log } from '@clack/prompts'; + +export const addTypeRef = async () => { + const appDTs = await findFile('src/app.d.ts').catch(() => { + log.warn('Could not find app.d.ts file; types will not be installed'); + return; + }); + if (!appDTs) return; + + const appDTsContent = await fs.readFile(appDTs, 'utf-8'); + const lines = appDTsContent.split('\n'); + const refLine = `/// `; + if (!lines.includes(refLine)) { + lines.splice(0, 0, refLine); // Insert at beginning of file + await fs.writeFile(appDTs, lines.join('\n')); + } +}; diff --git a/packages/lib/sdk/src/build-dev/cli/add/updateGitIgnore.js b/packages/lib/sdk/src/build-dev/cli/add/updateGitIgnore.js new file mode 100644 index 0000000000..214eced236 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/cli/add/updateGitIgnore.js @@ -0,0 +1,33 @@ +import { findFile } from 'pkg-types'; +import fs from 'fs/promises'; +import path from 'path'; + +export const updateGitIgnore = async () => { + const gitIgnorePath = await findFile('.gitignore').catch(() => + path.join(process.cwd(), '.gitignore') + ); + + const gitIgnoreContent = await fs.readFile(gitIgnorePath, 'utf-8').catch(() => ''); + const gitIgnoreLines = gitIgnoreContent.split('\n'); + const initialLines = gitIgnoreLines.length; + + const evidenceIgnorePatterns = [ + '.evidence', // internal directory + 'connection.options.yaml' // can contain credentials + ]; + + for (const pattern of evidenceIgnorePatterns) { + // This matches case sensitive and exact matches intentionally + + if (!gitIgnoreLines.some((line) => line.trim() === pattern.trim())) + gitIgnoreLines.push( + `# Automatically ignored by Evidence, this should not be source controlled`, + `${pattern}` + ); + } + + if (gitIgnoreLines.length > initialLines) { + // added lines, rewrite file + await fs.writeFile(gitIgnorePath, gitIgnoreLines.join('\n')); + } +}; diff --git a/packages/lib/sdk/src/build-dev/cli/add/updatePackageJson.js b/packages/lib/sdk/src/build-dev/cli/add/updatePackageJson.js new file mode 100644 index 0000000000..7c9dfb5f9d --- /dev/null +++ b/packages/lib/sdk/src/build-dev/cli/add/updatePackageJson.js @@ -0,0 +1,26 @@ +import { resolvePackageJSON, readPackageJSON, writePackageJSON } from 'pkg-types'; +import { EvidenceError } from '../../../lib/EvidenceError.js'; +import chalk from 'chalk'; + +export const updatePackageJson = async () => { + const packageJson = await readPackageJSON().catch(() => { + throw new EvidenceError( + 'Could not find an package.json file', + 'Are you running this in a valid javascript package?' + ); + }); + if (!packageJson.dependencies) packageJson.dependencies = {}; + + // Install needed dependencies + // TODO: How do we determine variables? (Can we literally steal from the SDK's package.json?) + if ( + '@evidence-dev/sdk' in packageJson.dependencies || + '@evidence-dev/sdk' in (packageJson.devDependencies ?? {}) + ) { + console.debug(chalk.dim('Did not update @evidence-dev/sdk dependency, it already exists!')); + } else { + packageJson.dependencies['@evidence-dev/sdk'] = 'preview'; + } + const packagePath = await resolvePackageJSON(); + await writePackageJSON(packagePath, packageJson); +}; diff --git a/packages/lib/sdk/src/build-dev/cli/add/updateSvelteConfig.js b/packages/lib/sdk/src/build-dev/cli/add/updateSvelteConfig.js new file mode 100644 index 0000000000..bf8790be5b --- /dev/null +++ b/packages/lib/sdk/src/build-dev/cli/add/updateSvelteConfig.js @@ -0,0 +1,199 @@ +// TODO: Kit + +import { findFile } from 'pkg-types'; +import { parse, prettyPrint, visit } from 'recast'; +import fs from 'fs/promises'; +import { EvidenceError } from '../../../lib/EvidenceError.js'; + +/** + * + * @param {import("estree").Property} node + * @param {string} importName + */ +const insertPreprocessor = (node, importName) => { + /** @type {import("estree").ArrayExpression} */ + let arrayValue; + + if (node.value.type !== 'ArrayExpression') { + arrayValue = { + type: 'ArrayExpression', + elements: [] + }; + + if (node.value.type === 'CallExpression') { + arrayValue.elements.push(/** @type {import("estree").Expression} */ (node.value)); + } + + if (node.value.type === 'Identifier') arrayValue.elements.push(node.value); + } else { + arrayValue = /** @type {import("estree").ArrayExpression} */ (node.value); + } + + if ( + !arrayValue.elements.some( + (el) => + el && // not null + el.type === 'CallExpression' && // is function call + el.callee.type == 'Identifier' && // has name + el.callee.name === importName // name is correct import + ) + ) { + // Add the call + arrayValue.elements.push({ + type: 'CallExpression', + callee: { + type: 'Identifier', + name: importName + }, + arguments: [], + optional: false + }); + } + + node.value = arrayValue; +}; + +export const updateSvelteConfig = async () => { + const svelteConfig = await findFile('svelte.config.ts') + .catch(() => findFile('svelte.config.js')) + .catch(() => { + throw new Error( + 'Could not find a valid svelte configuration file (svelte.config.js, svelte.config.ts)' + ); + }); + const svelteConfigContent = await fs.readFile(svelteConfig, 'utf-8'); + /** @type {{program: import("estree").Program}} */ + const { program: svelteConfigAst } = await parse(svelteConfigContent); + + let foundImport = false; + let importName = 'evidenceSvelte'; + + let foundPreprocess = false; + + visit(svelteConfigAst, { + visitImportDeclaration({ node }) { + if (node.source.value !== '@evidence-dev/sdk') + // TODO: Update this package title + return false; + + const importValue = node.specifiers?.find( + (spec) => spec.type === 'ImportSpecifier' && spec.imported.name === 'evidenceSvelte' + ); + if (importValue && importValue.type === 'ImportSpecifier') { + foundImport = true; + + if (importValue.local) { + let v = importValue.local.name; + while (typeof v !== 'string') v = v.name; + importName = v; + } else { + let v = importValue.imported.name; + while (typeof v !== 'string') v = v.name; + importName = v; + } + + return false; + } else if (importValue) { + throw new EvidenceError('Failed to add needed imports to svelte configuration'); + } + return false; + }, + visitProperty({ node }) { + if ( + node.type === 'Property' && + node.key.type === 'Identifier' && + node.key.name === 'preprocess' + ) { + foundPreprocess = true; + insertPreprocessor(/** @type {import("estree").Property} */ (node), importName); + } + return false; + } + }); + + if (!foundImport) { + svelteConfigAst.body = [ + { + type: 'ImportDeclaration', + specifiers: [ + { + type: 'ImportSpecifier', + imported: { type: 'Identifier', name: importName }, + local: { type: 'Identifier', name: importName } + } + ], + source: { + type: 'Literal', + value: '@evidence-dev/sdk' + } + }, + ...svelteConfigAst.body + ]; + } + if (!foundPreprocess) { + let updatedPreprocess = false; + visit(svelteConfigAst, { + visitVariableDeclaration({ node }) { + const config = + /** @type {import("estree").VariableDeclarator | undefined} */ + ( + node.declarations.find( + (dec) => + dec.type === 'VariableDeclarator' && // declaring a variable + dec.id.type === 'Identifier' && // id is an id I guess + dec.id.name === 'config' // variable is named config + ) + ); + if (!config) return false; + if (!config.init) return false; + if (config.init.type !== 'ObjectExpression') return false; // TODO: How to handle this case? + + const cfgObj = config.init; + if ( + cfgObj.properties.some( + (prop) => + prop.type === 'Property' && + prop.key.type === 'Identifier' && + prop.key.name === 'preprocess' + ) + ) { + // Something weird is happening in this case, preprocess shouldn't exist right now + return false; + } + cfgObj.properties.push({ + kind: 'init', + method: false, + shorthand: false, + computed: false, + + type: 'Property', + key: { + type: 'Identifier', + name: 'preprocess' + }, + value: { + type: 'ArrayExpression', + elements: [ + { + type: 'CallExpression', + callee: { + type: 'Identifier', + name: importName + }, + optional: false, + arguments: [] + } + ] + } + }); + updatedPreprocess = true; + + return false; + } + }); + if (!updatedPreprocess) + throw new EvidenceError('Failed to insert preprocessor to svelte configuration'); + } + + await fs.writeFile(svelteConfig, prettyPrint(svelteConfigAst).code); +}; diff --git a/packages/lib/sdk/src/build-dev/cli/add/updateViteConfig.js b/packages/lib/sdk/src/build-dev/cli/add/updateViteConfig.js new file mode 100644 index 0000000000..b01dae90d7 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/cli/add/updateViteConfig.js @@ -0,0 +1,152 @@ +import { findFile } from 'pkg-types'; +import { parse, prettyPrint, visit } from 'recast'; +import fs from 'fs/promises'; +import { EvidenceError } from '../../../lib/EvidenceError.js'; + +export const updateViteConfig = async () => { + const viteConfig = await findFile('vite.config.ts') + .catch(() => findFile('vite.config.js')) + .catch(() => { + throw new EvidenceError( + 'Could not find a valid vite configuration file (vite.config.js, vite.config.ts)' + ); + }); + const viteConfigContent = await fs.readFile(viteConfig, 'utf-8'); + /** @type {{program: import("estree").Program}} */ + const { program: viteConfigAst } = await parse(viteConfigContent); + + let foundImport = false; + let importName = 'evidenceVite'; + + visit(viteConfigAst, { + visitImportDeclaration({ node }) { + if (node.source.value !== '@evidence-dev/sdk') + // TODO: Update this package title + return false; + + const importValue = node.specifiers?.find( + (spec) => spec.type === 'ImportSpecifier' && spec.imported.name === 'evidenceVite' + ); + if (importValue && importValue.type === 'ImportSpecifier') { + foundImport = true; + + if (importValue.local) { + let v = importValue.local.name; + while (typeof v !== 'string') v = v.name; + importName = v; + } else { + let v = importValue.imported.name; + while (typeof v !== 'string') v = v.name; + importName = v; + } + + return false; + } else if (importValue) { + throw new EvidenceError( + 'Failed to add needed imports to vite configuration', + 'You may need to install Evidence manually' + ); // TODO: Docs page + } + return false; + }, + visitCallExpression({ node }) { + // TODO: Is there any sense in tracking down a plugin that is declared outside the defineConfig? + // I think not, if they are at that point they can set it up themselves + if (node.callee.type !== 'Identifier') return false; + if (node.callee.name !== 'defineConfig') return false; + + /** @type {import("estree").ObjectExpression} */ + let opts; + if (node.arguments.length === 0) + node.arguments.push({ + type: 'ObjectExpression', + properties: [] + }); + if (node.arguments[0].type !== 'ObjectExpression') { + throw new EvidenceError( + 'Cannot update vite.config.js, unexpected argument found in defineConfig', + 'You may need to install Evidence manually' + ); // TODO: Docs page + } + opts = /** @type {import("estree").ObjectExpression} */ (node.arguments[0]); + if ( + !opts.properties.some( + (prop) => + prop.type === 'Property' && prop.key.type === 'Identifier' && prop.key.name == 'plugins' + ) + ) { + // Add plugins key + opts.properties.push({ + type: 'Property', + kind: 'init', + method: false, + shorthand: false, + computed: false, + key: { + type: 'Identifier', + name: 'plugins' + }, + value: { + type: 'ArrayExpression', + elements: [] + } + }); + } + + const pluginArray = /** @type {import("estree").ArrayExpression} */ ( + /** @type {import("estree").Property} */ ( + opts.properties.find( + (prop) => + prop.type === 'Property' && + prop.key.type === 'Identifier' && + prop.key.name === 'plugins' && + prop.value.type === 'ArrayExpression' + ) + )?.value + ); + + const hasCall = pluginArray.elements.some( + (el) => + el && + el.type === 'CallExpression' && + el.callee.type === 'Identifier' && + el.callee.name === importName + ); + if (!hasCall) { + pluginArray.elements.push({ + type: 'CallExpression', + callee: { + type: 'Identifier', + name: importName + }, + arguments: [], + optional: false + }); + } + + return false; + } + }); + + if (!foundImport) { + viteConfigAst.body = [ + { + type: 'ImportDeclaration', + specifiers: [ + { + type: 'ImportSpecifier', + imported: { type: 'Identifier', name: importName }, + local: { type: 'Identifier', name: importName } + } + ], + source: { + type: 'Literal', + value: '@evidence-dev/sdk' + } + }, + ...viteConfigAst.body + ]; + } + + await fs.writeFile(viteConfig, prettyPrint(viteConfigAst).code); +}; diff --git a/packages/lib/sdk/src/build-dev/cli/build.js b/packages/lib/sdk/src/build-dev/cli/build.js new file mode 100644 index 0000000000..d088e4ddb1 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/cli/build.js @@ -0,0 +1,30 @@ +import { loadEnv } from 'vite'; +import { evidenceProjectOnlyNotice } from '../../lib/cli/notices.js'; +import path from 'path'; +import { projectRoot } from '../../lib/projectRoot.js'; +import { copyToLayout } from '../../plugins/layouts/copyToLayout.js'; +import { build as viteBuild } from 'vite'; + +/** @type {Promise} */ +export const build = evidenceProjectOnlyNotice('build', { + meta: { + name: 'build', + description: 'Build your evidence project' + }, + async run() { + const loadedEnv = loadEnv('', '.', ['VITE_', 'EVIDENCE_']); + Object.assign(process.env, loadedEnv); + + await copyToLayout(); + let templateRoot = path.join(projectRoot, '.evidence', 'template'); + + process.chdir(templateRoot); + + await viteBuild({ + build: { + emptyOutDir: true, + outDir: '../../build' + } + }); + } +}); diff --git a/packages/lib/sdk/src/build-dev/cli/dev.js b/packages/lib/sdk/src/build-dev/cli/dev.js new file mode 100644 index 0000000000..a2d35ae7b7 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/cli/dev.js @@ -0,0 +1,49 @@ +import { evidenceProjectOnlyNotice } from '../../lib/cli/notices.js'; +import { createServer, loadEnv } from 'vite'; +import chalk from 'chalk'; +import { copyToLayout } from '../../plugins/layouts/copyToLayout.js'; +import path from 'path'; +import { projectRoot } from '../../lib/projectRoot.js'; + +/** @type {Promise} */ +export const dev = evidenceProjectOnlyNotice('dev', { + meta: { + name: 'dev', + description: 'Run the evidence dev server' + }, + async run({ rawArgs }) { + // TODO: Should we use vite's built in loadEnv function? + + const loadedEnv = loadEnv('', '.', ['VITE_', 'EVIDENCE_']); + Object.assign(process.env, loadedEnv); + + console.clear(); + await copyToLayout(); + + let templateRoot = path.join(projectRoot, '.evidence', 'template'); + + process.chdir(templateRoot); + + /** @type {import("vite").InlineConfig} */ + const viteConfig = { + server: { + host: rawArgs.includes('--host') + } + }; + + const server = await createServer(viteConfig); + + await server.listen(3000); + + console.log(chalk.dim(`Running in ${process.cwd()}`)); + + console.log(chalk.bold(' Your Evidence project has started!')); + console.log(''); + console.log(' You can access it at the following URLs:'); + + server.printUrls(); + + // TODO: We could add a keyboard shortcut here for running sources; might be cute + server.bindCLIShortcuts({ print: true }); + } +}); diff --git a/packages/lib/sdk/src/build-dev/cli/index.js b/packages/lib/sdk/src/build-dev/cli/index.js new file mode 100644 index 0000000000..68afe0d423 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/cli/index.js @@ -0,0 +1,12 @@ +import { add } from './add.js'; +import { build } from './build.js'; +import { dev } from './dev.js'; + +/** + * @type {import("@brianmd/citty").SubCommandsDef} + */ +export const buildDevCli = { + add, + build, + dev +}; diff --git a/packages/lib/sdk/src/build-dev/svelte/index.js b/packages/lib/sdk/src/build-dev/svelte/index.js new file mode 100644 index 0000000000..4b9850dfc3 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/index.js @@ -0,0 +1,40 @@ +import seqPreprocessor from 'svelte-sequential-preprocessor'; + +import { addScriptTags } from './processors/addScriptTags.js'; +import { convertToHtml } from './processors/convertToHtml/convertToHtml.js'; +import { extractQueries } from './processors/extractQueries/extractQueries.js'; +import { initUniversalSql } from './processors/initializeUniversalSql.js'; +import { injectHighlightStyles } from './processors/injectHighlightStyles.js'; +import { injectQueries } from './processors/injectQueries/injectQueries.js'; +import { obfuscateCode } from './processors/obfuscateCode/obfuscateCode.js'; +import { transformQueries } from './processors/transformQueries/transformQueries.js'; +import { highlight } from './processors/highlight/highlight.js'; +import { injectComponents } from './processors/injectComponents/injectComponents.js'; + +/** + * @typedef {Object} EvidencePreprocessOptions + * @property {boolean} [escapeCode = true] If false, disables the b64 escaping of codeblock content + * @property {boolean} [highlight = true] If false, disables the auto highlight of code blocks + */ + +/** + * @param {EvidencePreprocessOptions} opts + * @returns {import("svelte/types/compiler/preprocess").PreprocessorGroup} + */ +export const svelte = (opts = {}) => { + /** @type {Array} */ + const processors = []; + processors.push(convertToHtml); + processors.push(addScriptTags); + processors.push(extractQueries); + if (opts.highlight !== false) processors.push(highlight); + if (opts.escapeCode !== false) processors.push(obfuscateCode); + processors.push(transformQueries); + processors.push(injectHighlightStyles); + processors.push(injectQueries); + processors.push(initUniversalSql); + processors.push(injectComponents()); + + // @ts-expect-error Typescript is upset about this for some reason + return seqPreprocessor(processors); +}; diff --git a/packages/lib/sdk/src/build-dev/svelte/lib/isTargetFile.js b/packages/lib/sdk/src/build-dev/svelte/lib/isTargetFile.js new file mode 100644 index 0000000000..e4f27fbb01 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/lib/isTargetFile.js @@ -0,0 +1,6 @@ +/** + * + * @param {string | undefined} filename + * @returns + */ +export const isTargetFile = (filename) => filename?.split('/').at(-1)?.startsWith('+'); diff --git a/packages/lib/sdk/src/build-dev/svelte/metadatas.js b/packages/lib/sdk/src/build-dev/svelte/metadatas.js new file mode 100644 index 0000000000..c78356648e --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/metadatas.js @@ -0,0 +1,39 @@ +/** @typedef {import("../../types/index.js").FileMetadata} FileMetadata */ + +/** @type {Map} */ +const metadatas = new Map(); + +/** + * @param {string} filename + * @returns {FileMetadata | undefined} + */ +export const getFileMetadata = (filename) => metadatas.get(filename); + +/** + * @param {string} filename + * @param {FileMetadata} metadata + * @returns {void} + */ +export const addFileMetadata = (filename, metadata) => { + metadatas.set(filename, Object.assign(metadatas.get(filename) ?? {}, metadata)); +}; + +/** + * @param {string} filename + * @param {FileMetadata} metadata + * @returns {void} + */ +export const setFileMetadata = (filename, metadata) => { + metadatas.set(filename, metadata); +}; + +/** + * @returns {void} + */ +export const clearFileMetadatas = () => { + if (process.env.NODE_ENV !== 'test') + console.warn('clearFileMetadatas is only intended to be used during testing'); + metadatas.clear(); +}; + +export const getAllFileMetadatas = () => Object.fromEntries(metadatas.entries()); diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/addScriptTags.js b/packages/lib/sdk/src/build-dev/svelte/processors/addScriptTags.js new file mode 100644 index 0000000000..b40ab4baf5 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/addScriptTags.js @@ -0,0 +1,17 @@ +/** + * @type {import("svelte/types/compiler/preprocess").PreprocessorGroup} + */ +export const addScriptTags = { + markup({ content }) { + // Make sure that we have script tags; without this we won't be able to preprocess them + if (!content.match(//)) { + return { code: '' + '' + content }; + } + if (!content.match(//)) { + return { code: '' + content }; + } + if (!content.match(//)) { + return { code: '' + content }; + } + } +}; diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/convertToHtml/convertToHtml.js b/packages/lib/sdk/src/build-dev/svelte/processors/convertToHtml/convertToHtml.js new file mode 100644 index 0000000000..af219c4af1 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/convertToHtml/convertToHtml.js @@ -0,0 +1,19 @@ +import { processMarkdown } from './processMarkdown.js'; + +/** + * @type {import("svelte/types/compiler/preprocess").PreprocessorGroup} + */ +export const convertToHtml = { + markup: async ({ filename, content }) => { + /** @type {string} */ + let htmlContent = content; + + if (filename?.endsWith('.md')) { + htmlContent = await processMarkdown(content, filename); + } + + // TODO: Other languages? + + return { code: htmlContent }; + } +}; diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/convertToHtml/convertToHtml.spec.js b/packages/lib/sdk/src/build-dev/svelte/processors/convertToHtml/convertToHtml.spec.js new file mode 100644 index 0000000000..8672368f9a --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/convertToHtml/convertToHtml.spec.js @@ -0,0 +1,123 @@ +import { describe, it, expect } from 'vitest'; +import { convertToHtml } from './convertToHtml.js'; + +describe('convertToHtml', () => { + describe('Basic Elements', () => { + it.each([ + { label: 'h1', html: '

%copy

', markdown: '# %copy' }, + { label: 'h2', html: '

%copy

', markdown: '## %copy' }, + { label: 'h3', html: '

%copy

', markdown: '### %copy' }, + { label: 'h4', html: '

%copy

', markdown: '#### %copy' }, + { label: 'h5', html: '
%copy
', markdown: '##### %copy' }, + { label: 'h6', html: '
%copy
', markdown: '###### %copy' }, + { label: 'italics as

', html: '

%copy

', markdown: '_%copy_' }, + { label: 'italics as

', html: '

%copy

', markdown: '*%copy*' }, + { + label: 'inline italics', + html: '

%copy %copy %copy

', + markdown: '%copy _%copy_ %copy' + }, + { + label: 'inline italics', + html: '

%copy %copy %copy

', + markdown: '%copy *%copy* %copy' + }, + // prettier-ignore + { label: 'bold as

', html: '

%copy

', markdown: '__%copy__' }, + /* TODO: Inline Bold */ + // prettier-ignore + { label: 'bold as

', html: '

%copy

', markdown: '**%copy**' }, + // prettier-ignore + { label: 'blockquote', html: '
\n

%copy

\n
', markdown: '> %copy' }, + // prettier-ignore + { label: 'links', html: `

%copy

`, markdown: "[%copy](%link)"}, + // prettier-ignore + { label: 'images', html: `

%copy

`, markdown: "![%copy](%link)"}, + { label: 'paragraphs', html: '

%copy

', markdown: '%copy' }, + { label: 'ul', html: `
    \n
  • Input
  • \n
`, markdown: '- %copy' }, + { label: 'ol', html: `
    \n
  1. Input
  2. \n
`, markdown: '1. %copy' }, + { label: 'hr', html: '
', markdown: '---' }, + { label: 'hr', html: '
', markdown: '***' } + /* TODO: Nested Lists */ + /* TODO: Tables */ + /* TODO: Code - this is very very important */ + ])('Creates $label with $markdown', async (opts) => { + const transform = (s) => + s.replaceAll('%copy', 'Input').replaceAll('%link', 'https://example.com'); + + const result = await convertToHtml.markup({ + filename: '+page.md', + content: transform(opts.markdown) + }); + expect(result.code).toEqual(transform(opts.html)); + }); + }); + + describe('Svelte', () => { + describe('html', () => { + it('Should leave Svelte Components untouched', async () => { + const r = await convertToHtml.markup({ + filename: '+page.svelte', + content: `SELECT 1` + }); + expect(r.code).toEqual(`SELECT 1`); + }); + it('Should leave {#if} untouched (html)', async () => { + const r = await convertToHtml.markup({ + filename: '+page.svelte', + content: `{#if true}

Hi

{/if}` + }); + expect(r.code).toEqual(`{#if true}

Hi

{/if}`); + }); + it('Should not break with on: directives', async () => { + const r = await convertToHtml.markup({ + filename: '+page.svelte', + content: `` + }); + expect(r.code).toEqual(``); + }); + }); + describe('markdown', () => { + it('Should leave Svelte Components untouched', async () => { + const r = await convertToHtml.markup({ + filename: '+page.md', + content: `SELECT 1` + }); + expect(r.code).toEqual(`SELECT 1`); + }); + + it('Should leave {#if} untouched', async () => { + const r = await convertToHtml.markup({ + filename: '+page.md', + content: ` +{#if true} +Hi +{/if}` + }); + expect(r.code).toEqual(`{#if true}\n

Hi\n{/if}

`); + }); + }); + }); + + describe('Query Conversion', () => { + it('Should convert queries to html', async () => { + const r = await convertToHtml.markup({ + filename: '+page.md', + content: `\`\`\`sql query_name +SELECT * FROM users +\`\`\` +` + }); + expect(r.code).toBe( + `
SELECT * FROM users
` + ); + }); + }); + + describe('Tables', () => { + it('Should handle them properly', () => {}); + }); + describe('Frontmatter', () => { + it('Should not include frontmatter in output HTML', async () => {}); + }); +}); diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/convertToHtml/processMarkdown.js b/packages/lib/sdk/src/build-dev/svelte/processors/convertToHtml/processMarkdown.js new file mode 100644 index 0000000000..2ae8ed4844 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/convertToHtml/processMarkdown.js @@ -0,0 +1,59 @@ +import { JSDOM } from 'jsdom'; +import chalk from 'chalk'; +import * as mdx from 'mdsvex'; + +/** + * + * @param {string} filename + * @returns {Exclude["highlighter"]} + */ +const highlighter = + (filename) => + /** + * + * @param {string} code + * @param {string} [lang] + * @param {string} [meta] + * @returns {string} + */ + + (code, lang, meta) => { + const fragment = JSDOM.fragment('
'); + const preEl = fragment.querySelector('pre'); + const codeEl = fragment.querySelector('code'); + if (!preEl) throw new Error('
 Element not found (internal error)');
+		if (!codeEl) throw new Error(' Element not found (internal error)');
+
+		if (lang) {
+			codeEl.classList.add(`language-${lang}`);
+		}
+		if (lang !== 'sql' || (lang === 'sql' && !meta)) {
+			if (lang) codeEl.setAttribute('lang', lang);
+			if (meta) codeEl.setAttribute('data-meta', meta);
+		} else {
+			if (!meta) {
+				// TODO: This never actually fires because the behavior for bare sql needs to be defined
+				console.log(chalk.red.bold(`[!] Query with no name detected in ${filename}!`));
+				console.log(chalk.red(`\t${code.split('\n')[0]}`));
+			}
+			codeEl.setAttribute('lang', lang);
+			if (meta) codeEl.setAttribute('evidence-query-name', meta);
+		}
+		codeEl.textContent = code;
+		return preEl.outerHTML;
+	};
+
+/**
+ * @param {string} content
+ * @param {string} filename
+ * @returns {Promise}
+ */
+export const processMarkdown = async (content, filename) => {
+	const mdxResult = await mdx.compile(content, {
+		smartypants: false,
+		highlight: { highlighter: highlighter(filename) }
+	});
+
+	if (!mdxResult) throw new Error(`${filename} | Failed to convert markdown to html`);
+	return mdxResult.code.trim();
+};
diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/extractQueries/extractQueries.js b/packages/lib/sdk/src/build-dev/svelte/processors/extractQueries/extractQueries.js
new file mode 100644
index 0000000000..965f3beba7
--- /dev/null
+++ b/packages/lib/sdk/src/build-dev/svelte/processors/extractQueries/extractQueries.js
@@ -0,0 +1,49 @@
+import { setFileMetadata } from '../../metadatas.js';
+import * as jsdom from 'jsdom';
+
+/** @type {import("svelte/types/compiler/preprocess").PreprocessorGroup} */
+export const extractQueries = {
+	markup: ({ filename, content }) => {
+		if (!filename) return;
+		const dom = new jsdom.JSDOM(content, { contentType: 'text/html' });
+		const codeElements = dom.window.document.querySelectorAll('code');
+		/** @type {import('../../metadatas.js').FileMetadata} */
+		const data = { queries: {} };
+		// TODO: Is this actually needed?
+		// const body = dom.window.document.documentElement.querySelector('body');
+		// if (!body) throw new Error('Body is undefined');
+		// dom.window.document.head.querySelectorAll('script').forEach((el) => body.prepend(el));
+		let r = content;
+
+		codeElements.forEach((el) => {
+			if (el.getAttribute('evidence-query-name') && !el.getAttribute('lang'))
+				el.setAttribute('lang', 'sql');
+			const lang =
+				el.attributes.getNamedItem('lang')?.value ??
+				el.attributes.getNamedItem('data-lang')?.value ??
+				Array.from(el.classList.values())
+					.find((cn) => cn.startsWith('language-'))
+					?.split('language-')[1];
+
+			const content = el.textContent ?? '';
+			const queryName = el.attributes.getNamedItem('evidence-query-name')?.value;
+			if (queryName) {
+				switch (lang) {
+					case 'sql':
+						data.queries[queryName] = content.trim();
+						break;
+					case 'malloy':
+						// TODO: Convert malloy to sql
+						break;
+					case 'prql':
+						// TODO: Convert prql to sql
+						break;
+				}
+			}
+		});
+
+		setFileMetadata(filename, data);
+
+		return { code: r.trim() };
+	}
+};
diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/extractQueries/extractQueries.spec.js b/packages/lib/sdk/src/build-dev/svelte/processors/extractQueries/extractQueries.spec.js
new file mode 100644
index 0000000000..c3853d50a1
--- /dev/null
+++ b/packages/lib/sdk/src/build-dev/svelte/processors/extractQueries/extractQueries.spec.js
@@ -0,0 +1,54 @@
+import { describe, it, expect, beforeEach } from 'vitest';
+import { extractQueries } from './extractQueries.js';
+import { clearFileMetadatas, getFileMetadata } from '../../metadatas.js';
+
+describe('extractQueries', () => {
+	beforeEach(() => {
+		clearFileMetadatas();
+	});
+	it('Should extract a single query', () => {
+		const queryContent = `SELECT * FROM users`;
+		const filename = `+page.svelte`;
+		const content = `${queryContent}`;
+
+		extractQueries.markup({ filename, content });
+		expect(getFileMetadata(filename).queries).toHaveProperty('simple_query');
+		expect(getFileMetadata(filename).queries.simple_query).toEqual(queryContent);
+	});
+	it('Should infer sql lang when query name is present', () => {
+		const queryContent = `SELECT * FROM users`;
+		const filename = `+page.svelte`;
+		const content = `${queryContent}`;
+
+		extractQueries.markup({ filename, content });
+		expect(getFileMetadata(filename).queries).toHaveProperty('simple_query');
+		expect(getFileMetadata(filename).queries.simple_query).toEqual(queryContent);
+	});
+	it('Should extract multiple queries', () => {
+		const queryContent = [`SELECT * FROM users`, `SELECT * FROM posts`];
+		const filename = `+page.svelte`;
+		const content = queryContent
+			.map(
+				(q, i) => `
+        ${q}
+        `
+			)
+			.join('\n');
+
+		extractQueries.markup({ filename, content });
+		let i = 0;
+		for (const query of queryContent) {
+			expect(getFileMetadata(filename).queries).toHaveProperty(`simple_query_${i}`);
+			expect(getFileMetadata(filename).queries[`simple_query_${i}`]).toEqual(query);
+			i++;
+		}
+	});
+	it('Should ignore code blocks without a query name', () => {
+		const queryContent = `SELECT * FROM users`;
+		const filename = `+page.svelte`;
+		const content = `${queryContent}`;
+
+		extractQueries.markup({ filename, content });
+		expect(getFileMetadata(filename).queries).not.toHaveProperty('simple_query');
+	});
+});
diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/highlight/highlight.js b/packages/lib/sdk/src/build-dev/svelte/processors/highlight/highlight.js
new file mode 100644
index 0000000000..80e0943ca9
--- /dev/null
+++ b/packages/lib/sdk/src/build-dev/svelte/processors/highlight/highlight.js
@@ -0,0 +1,52 @@
+import * as jsdom from 'jsdom';
+import hljs from 'highlight.js';
+
+/** @type {import("svelte/types/compiler/preprocess").PreprocessorGroup} */
+export const highlight = {
+	markup: ({ content }) => {
+		const dom = new jsdom.JSDOM(content, { contentType: 'text/html' });
+		const codeElements = dom.window.document.querySelectorAll('code');
+		let r = content;
+
+		codeElements.forEach((el) => {
+			const originalContent = el.outerHTML;
+			if (el.getAttribute('evidence-query-name') && !el.getAttribute('lang'))
+				el.setAttribute('lang', 'sql');
+
+			const lang =
+				el.attributes.getNamedItem('lang')?.value ??
+				el.attributes.getNamedItem('data-lang')?.value ??
+				Array.from(el.classList.values())
+					.find((cn) => cn.startsWith('language-'))
+					?.split('language-')[1];
+
+			if (!lang) return;
+			const elContent = el.textContent ?? '';
+
+			const highlighted =
+				lang && hljs.listLanguages().includes(lang.toLowerCase())
+					? hljs.highlight(elContent, { language: lang.toLowerCase() })
+					: elContent;
+			if (lang) el.classList.add(`language-${lang}`);
+			if (['javascript', 'js'].includes(lang)) el.removeAttribute('lang');
+
+			if (typeof highlighted === 'string') el.innerHTML = highlighted;
+			else el.innerHTML = highlighted.value;
+
+			const doc = el.ownerDocument;
+			let target = el;
+
+			if (el.parentElement && el.parentElement.tagName.toLowerCase() !== 'pre') {
+				const pre = doc.createElement('pre');
+				el.parentElement.insertBefore(pre, el);
+				el.remove();
+				pre.appendChild(el);
+				target = pre;
+			}
+
+			r = r.replace(originalContent, target.outerHTML);
+		});
+
+		return { code: r };
+	}
+};
diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/highlight/highlight.spec.js b/packages/lib/sdk/src/build-dev/svelte/processors/highlight/highlight.spec.js
new file mode 100644
index 0000000000..1070e3a130
--- /dev/null
+++ b/packages/lib/sdk/src/build-dev/svelte/processors/highlight/highlight.spec.js
@@ -0,0 +1,31 @@
+import { describe, it, expect } from 'vitest';
+import { highlight } from './highlight.js';
+
+describe('highlight', () => {
+	it('Should highlight javascript', () => {
+		const c = highlight.markup({
+			content: 'console.log(`Hello World!`)'
+		});
+		expect(c.code).toEqual(
+			`
console.log(\`Hello World!\`)
` + ); + }); + it('Should highlight SQL', () => { + const c = highlight.markup({ content: 'SELECT * FROM world' }); + expect(c.code).toEqual( + `
SELECT * FROM world
` + ); + }); + it('Should not add a pre to a code block already wrapped in pre', () => { + const c = highlight.markup({ + content: '
SELECT * FROM world
' + }); + expect(c.code).toEqual( + `
SELECT * FROM world
` + ); + }); + it('Should not highlight code blocks without a language', () => { + const c = highlight.markup({ content: 'SELECT * FROM world' }); + expect(c.code).toEqual(`SELECT * FROM world`); + }); +}); diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/initializeUniversalSql.js b/packages/lib/sdk/src/build-dev/svelte/processors/initializeUniversalSql.js new file mode 100644 index 0000000000..86e6a36806 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/initializeUniversalSql.js @@ -0,0 +1,15 @@ +/** @type {import("svelte/types/compiler/preprocess").PreprocessorGroup} */ +export const initUniversalSql = { + script: ({ filename, content, attributes }) => { + // TODO: How does this map with non-sveltekit projects? + if (filename?.endsWith('.svelte-kit/generated/root.svelte') && !attributes.context) { + return { + code: ` +import "$evidence/initUsql" +import bootstrapContexts from "$evidence/bootstrapContexts.svelte.js" +bootstrapContexts() +${content}` + }; + } + } +}; diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/injectComponents/injectComponents.js b/packages/lib/sdk/src/build-dev/svelte/processors/injectComponents/injectComponents.js new file mode 100644 index 0000000000..5dcec4dee7 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/injectComponents/injectComponents.js @@ -0,0 +1,56 @@ +import chalk from 'chalk'; +import { getAllComponents } from '../../../../plugins/components/getAllComponents.js'; +import autoImport from 'sveltekit-autoimport'; + +/** + * @type {() => import("svelte/types/compiler/preprocess").PreprocessorGroup} + */ +export const injectComponents = () => { + const componentPlugins = getAllComponents(); + + const packages = componentPlugins + .then((components) => { + /** @type {Record} */ + const packs = {}; + for (const [component, data] of Object.entries(components)) { + if (!packs[data.name]) packs[data.name] = []; + const import_name = data.aliasOf ? `${data.aliasOf} as ${component}` : component; + packs[data.name].push(import_name); + } + return packs; + }) + .catch((e) => { + console.warn(chalk.yellow('Failed to load component plugins'), e); + return {}; + }); + + const autoImporter = packages.then((packages) => + autoImport({ + include: ['**/*.(svelte|md)'], + module: packages, + components: [{ directory: '../../components', flat: true }] + }) + ); + + return { + /** @type {import("svelte/types/compiler/preprocess").MarkupPreprocessor}} */ + markup: async ({ content, filename }) => { + if (filename?.endsWith('.svelte')) return; /* Don't autoimport into svelte files */ + const components = await componentPlugins.catch((e) => { + console.debug(e); + return false; + }); + if (!components) { + return; + } + + const { markup: autoimport_process_markup } = await autoImporter; + + return autoimport_process_markup({ content, filename }); + }, + /** @type {import("svelte/types/compiler/preprocess").Preprocessor}} */ + style: async () => {}, + /** @type {import("svelte/types/compiler/preprocess").Preprocessor}} */ + script: async () => {} + }; +}; diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/injectHighlightStyles.js b/packages/lib/sdk/src/build-dev/svelte/processors/injectHighlightStyles.js new file mode 100644 index 0000000000..57e5054403 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/injectHighlightStyles.js @@ -0,0 +1,14 @@ +/** @type {import("svelte/types/compiler/preprocess").PreprocessorGroup} */ +export const injectHighlightStyles = { + script: ({ filename, content, attributes }) => { + // TODO: How does this map with non-sveltekit projects? + // Maybe we need a component + // Could we do this with Vite? + if (filename?.endsWith('.svelte-kit/generated/root.svelte') && !attributes.context) + return { + code: ` +import 'highlight.js/styles/hybrid.css'; +${content}` + }; + } +}; diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/injectQueries/injectQueries.js b/packages/lib/sdk/src/build-dev/svelte/processors/injectQueries/injectQueries.js new file mode 100644 index 0000000000..518f96df8a --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/injectQueries/injectQueries.js @@ -0,0 +1,77 @@ +import { checkImport } from '../../../../lib/check-import.js'; +import { getFileMetadata } from '../../metadatas.js'; + +/** @type {import("svelte/types/compiler/preprocess").PreprocessorGroup} */ +export const injectQueries = { + script: ({ filename, content, attributes }) => { + if (!filename) return; + if (attributes.context === 'module') return; + /** @type {import('../../metadatas.js').FileMetadata} */ + const meta = getFileMetadata(filename) ?? { queries: {} }; + + const fileQueries = meta?.queries ?? {}; + const queryNames = Object.keys(fileQueries); + // There are no queries on this page; so we don't need to do anything. + if (!queryNames.length) return; + + // TODO: Consider using https://unjs.io/packages/knitwork + + const initialDeclarations = queryNames + .map((queryName) => `let __evidence_query_text_${queryName} = ''`) + .join('\n'); + + const queryTextAssignments = Object.entries(fileQueries).map( + ([queryName, queryText]) => `__evidence_query_text_${queryName} = \`${queryText}\`` + ); + + const queryEffects = queryTextAssignments.map((a) => `$: ${a}`).join('\n'); + const queryMountFn = `onMount(() => {${queryTextAssignments.join(';')}})`; + + // TODO: Do we need to move imports to the top of the file wrt user content? + const queryDeclarations = ` + ${ + checkImport('getQueries', '$evidence/queries', content) + ? '' + : `import {getQueries} from "$evidence/queries"` + } + const queries = getQueries() + let {${queryNames.map((k) => `${k}: __evidence_query_${k}`).join(',')}} = $queries + $: ({${queryNames.map((k) => `${k}: __evidence_query_${k}`).join(',')}} = $queries) + + ${queryNames.map((k) => `let ${k} = $__evidence_query_${k}`).join('\n')} + ${queryNames.map((k) => `$: ${k} = $__evidence_query_${k}`).join('\n')} + + // Layout queries cannot be accessed directly; and must use query. + // We unwrap these to the value to make sure that proxied values are used + let query = Object.fromEntries(Object.entries($queries).map(([k,v]) => [k, v.value])) + $: query = Object.fromEntries(Object.entries($queries).map(([k,v]) => [k, v.value])) + `; + + const adjusted = ` +/******** Preprocessed Code ********/ +${ + checkImport('updateQueryContext', '$evidence/updateQueryContext.svelte.js', content) + ? '' + : `import updateQueryContext from "$evidence/updateQueryContext.svelte.js"` +} +${checkImport('onMount', 'svelte', content) ? '' : `import {onMount} from "svelte"`} +${queryMountFn} +${initialDeclarations} + +$: __evidence_page_query_texts = {${queryNames + .map((queryName) => `${queryName}: __evidence_query_text_${queryName}`) + .join(', ')}} + +const updateContext = updateQueryContext() +$: updateContext(__evidence_page_query_texts) +${filename?.endsWith('.md') ? queryDeclarations : ''} + +/******** User / Component Code ********/ +${content} + +/******** Preprocessed Code ********/ +${queryEffects} +`; + return { code: adjusted }; + } +}; diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/markRootLayoutPrerenderable.js b/packages/lib/sdk/src/build-dev/svelte/processors/markRootLayoutPrerenderable.js new file mode 100644 index 0000000000..94846fcfa7 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/markRootLayoutPrerenderable.js @@ -0,0 +1,56 @@ +import fs from 'fs'; +import path from 'path'; + +/** + * @param {string} filename + * @returns {boolean} + */ +const hasPrerenderExport = (filename) => { + const content = fs.readFileSync(filename, 'utf-8'); + return content.includes('export const prerender'); +}; + +/** + * @type {() => void} + */ +export const markRootLayoutPrerenderable = () => { + const src = fs.readdirSync('src'); + + if (src.includes('routes')) { + // SvelteKit app + const routes = fs.readdirSync(path.join('src', 'routes')); + let layoutPath; + // in order of preference + const layoutPaths = ['+layout.js', '+layout.server.js', '+layout.ts', '+layout.server.ts']; + for (const layout of layoutPaths) { + if (routes.includes(layout)) { + // Check for a prerender output + if (hasPrerenderExport(path.join('src', 'routes', layout))) { + // The user has already added a prerender export; we shouldn't override it. + return; + } else { + layoutPath = layout; + } + } + } + // If we reach this point; then a prerender statement does not exist + if (layoutPath) { + const p = path.join('src', 'routes', layoutPath); + // The most preferred layout path exists + const layoutContent = fs.readFileSync(p, 'utf-8'); + fs.writeFileSync(p, `${layoutContent}\nexport const prerender = true`); + } else { + // We need to create the layout + const p = path.join('src', 'routes', layoutPaths[0]); + fs.writeFileSync(p, `export const prerender = true`); + } + } + + // script({ content, filename, attributes }) { + // if (filename?.endsWith("/routes/+layout.svelte") && attributes.context === "module") { + // return { + // code: `export const prerender = true;\n${content}` + // } + // } + // } +}; diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/obfuscateCode/obfuscateCode.js b/packages/lib/sdk/src/build-dev/svelte/processors/obfuscateCode/obfuscateCode.js new file mode 100644 index 0000000000..cb9bee1bc6 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/obfuscateCode/obfuscateCode.js @@ -0,0 +1,17 @@ +import * as jsdom from 'jsdom'; + +/** @type {import("svelte/types/compiler/preprocess").PreprocessorGroup} */ +export const obfuscateCode = { + markup: ({ content }) => { + const dom = new jsdom.JSDOM(content, { contentType: 'text/html' }); + const codeElements = dom.window.document.querySelectorAll('code'); + let r = content; + codeElements.forEach((el) => { + const originalContent = el.innerHTML; + el.innerHTML = `{@html atob(\`${btoa(el.innerHTML.trim() ?? '')}\`)}`; + r = r.replace(originalContent, el.innerHTML); + }); + + return { code: r.trim() }; + } +}; diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/obfuscateCode/obfuscateCode.spec.js b/packages/lib/sdk/src/build-dev/svelte/processors/obfuscateCode/obfuscateCode.spec.js new file mode 100644 index 0000000000..89aeb63a57 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/obfuscateCode/obfuscateCode.spec.js @@ -0,0 +1,21 @@ +import { describe, it, expect } from 'vitest'; +import { obfuscateCode } from './obfuscateCode.js'; + +describe('obfusctateCode', () => { + it('Should b64 encode basic javascript', () => { + const r = obfuscateCode.markup({ + content: ` +console.log() +` + }); + expect(r.code).toEqual(`{@html atob(\`Y29uc29sZS5sb2coKQ==\`)}`); + }); + it('Should b64 encode basic SQL', () => { + const r = obfuscateCode.markup({ + content: ` + SELECT * FROM 5 + ` + }); + expect(r.code).toEqual(`{@html atob(\`U0VMRUNUICogRlJPTSA1\`)}`); + }); +}); diff --git a/packages/lib/sdk/src/build-dev/svelte/processors/transformQueries/transformQueries.js b/packages/lib/sdk/src/build-dev/svelte/processors/transformQueries/transformQueries.js new file mode 100644 index 0000000000..915583b74b --- /dev/null +++ b/packages/lib/sdk/src/build-dev/svelte/processors/transformQueries/transformQueries.js @@ -0,0 +1,58 @@ +import * as jsdom from 'jsdom'; +import { checkImport } from '../../../../lib/check-import.js'; + +/** + * @type {Record} + */ +const fileHasQueries = {}; + +/** @type {import("svelte/types/compiler/preprocess").PreprocessorGroup} */ +export const transformQueries = { + script: ({ filename, content, attributes }) => { + if (attributes.context) return; + if (!filename) return; + if (!fileHasQueries[filename]) return; + if (checkImport('QuerySSR', '$evidence/QuerySSR.svelte', content)) return { code: content }; + else { + return { code: `import QuerySSR from "$evidence/QuerySSR.svelte";\n` + content }; + } + }, + markup: ({ filename, content }) => { + if (!filename) return; + const dom = new jsdom.JSDOM(content, { contentType: 'text/html' }); + const codeElements = dom.window.document.querySelectorAll('code[evidence-query-name]'); + if (codeElements.length) { + fileHasQueries[filename] = true; + } + let r = content; + for (const el of codeElements) { + let target = el; + if (el.parentElement?.tagName.toLowerCase() === 'pre') { + target = el.parentElement; + } + const originalHtml = target.outerHTML; + + target.classList.add('text-xs'); + target.classList.add('leading-tight'); + target.classList.add('bg-gray-200'); + target.classList.add('p-2'); + target.classList.add('w-fit'); + target.classList.add('min-w-[60ch]'); + el.textContent = `{__evidence_query_text_${el.getAttribute('evidence-query-name')}}`; + + // TODO: Figure this out + const replaceTarget = originalHtml.replaceAll('<', '<').replaceAll('>', '>'); + + r = r.replace(replaceTarget, ''); + r = + r + + `\n `; + } + + return { code: r }; + } +}; diff --git a/packages/lib/sdk/src/build-dev/vite/file-watcher.js b/packages/lib/sdk/src/build-dev/vite/file-watcher.js new file mode 100644 index 0000000000..5b08a7cdbc --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/file-watcher.js @@ -0,0 +1,71 @@ +import chokidar from 'chokidar'; +import { loadLayoutPlugin } from '../../plugins/layouts/loadLayoutPlugin.js'; +import path from 'path'; +import { projectRoot } from '../../lib/projectRoot.js'; +import { copyMethods } from '../../plugins/layouts/copyMethods/index.js'; +import fs from 'fs/promises'; +import { EvidenceError } from '../../lib/EvidenceError.js'; +import chalk from 'chalk'; + +export const fileWatcher = async () => { + const plugin = await loadLayoutPlugin(); + if (!plugin) return false; + + const routesDestination = plugin.evidence.layout.routes.destination.split(/[/\\]/); + const templateRoot = path.join(projectRoot, '.evidence', 'template'); + const rootTargetDir = path.join(templateRoot, ...routesDestination); + const rootSourceDir = path.join(projectRoot, 'pages'); + + const method = copyMethods[plugin.evidence.layout.routes.style]; + const pageWatcher = chokidar.watch(rootSourceDir, { alwaysStat: true }); + + /** + * @param {string} filepath + */ + const copyToLayout = async (filepath) => { + const parsedPath = path.parse(filepath); + const dirEntries = await fs.readdir(parsedPath.dir, { withFileTypes: true }); + const dirEnt = dirEntries.find((ent) => ent.name === parsedPath.base); + if (!dirEnt) + throw new EvidenceError('Error Copying page to layout', [ + 'dirEnt could not be found, this should not happen.' + ]); + method.copyFile(rootSourceDir, rootTargetDir, dirEnt); + }; + + // TODO: Handle moved files, deleted files, etc + pageWatcher.on('add', copyToLayout); + pageWatcher.on('change', copyToLayout); + + const componentsDestination = plugin.evidence.layout.components.destination.split(/[/\\]/); + const componentsSource = path.join(projectRoot, 'components'); + const componentWatcher = chokidar.watch(componentsSource); + /** + + * @param {string} filepath + */ + const copyComponent = async (filepath) => { + const relPath = path.relative(componentsSource, filepath); + const destination = path.join(templateRoot, ...componentsDestination, relPath); + console.debug(chalk.dim(`Copied ${filepath} -> ${destination}`)); + await fs.cp(filepath, destination); + }; + componentWatcher.on('add', copyComponent); + componentWatcher.on('change', copyComponent); + + const staticDestination = plugin.evidence.layout.static.destination.split(/[/\\]/); + const staticSource = path.join(projectRoot, 'static'); + const staticWatcher = chokidar.watch(staticSource); + /** + + * @param {string} filepath + */ + const copyStatic = async (filepath) => { + const relPath = path.relative(staticSource, filepath); + const destination = path.join(templateRoot, ...staticDestination, relPath); + console.debug(chalk.dim(`Copied ${filepath} -> ${destination}`)); + await fs.cp(filepath, destination); + }; + staticWatcher.on('add', copyStatic); + staticWatcher.on('change', copyStatic); +}; diff --git a/packages/lib/sdk/src/build-dev/vite/index.js b/packages/lib/sdk/src/build-dev/vite/index.js new file mode 100644 index 0000000000..b3158665cf --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/index.js @@ -0,0 +1,214 @@ +import * as path from 'path'; +import fs from 'fs/promises'; +import chalk from 'chalk'; +import { applySidecarConfig, getSidecarApp } from './sidecar-app.js'; + +import { dirname } from 'path'; +import { fileURLToPath } from 'url'; +import { getManifest } from './virtuals/node/static-assets.js'; +import { fileWatcher } from './file-watcher.js'; +import { dataDirectory, evidenceDirectory } from './virtuals/node/projectPaths.js'; +/** @type {Record string>} */ +import * as dynamicVirtuals from './virtuals-dynamic.js'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const PREFIX = `$evidence/`; + +/** + * @type {() => Promise} + */ +export const evidencePlugin = async () => { + const sidecar = getSidecarApp(); + + // TODO: Find a way to make this get a list of queries that should be available on the page + return { + name: 'evidence', + + buildStart: async function () { + if (this.meta.watchMode) { + await fileWatcher(); + } else { + this.emitFile({ + type: 'asset', + name: path.join('_evidence', 'manifest.json'), + source: getManifest(), + fileName: path.join('_evidence', 'manifest.json'), + needsCodeReference: false + }); + const dataDirExists = await fs + .stat(dataDirectory) + .then((r) => r.isDirectory()) + .catch(() => false); + if (!dataDirExists) { + console.warn( + chalk.yellow( + 'Evidence data directory not found, if you use source queries in this project, you probably need to run sources' + ) + ); + return; + } + + const queries = await fs.readdir(dataDirectory, { recursive: true, withFileTypes: true }); + + for (const query of queries) { + if (query.isFile() && query.name.endsWith('.parquet')) { + const relPath = path.join(path.relative(dataDirectory, query.path), query.name); + + this.emitFile({ + type: 'asset', + name: path.join('_evidence', relPath), + source: await fs.readFile(path.join(query.path, query.name)), + fileName: path.join('_evidence', relPath), + needsCodeReference: false + }); + } + } + } + }, + + async configureServer(vite) { + vite.middlewares.use(sidecar); + }, + + async configurePreviewServer(vite) { + vite.middlewares.use(sidecar); + }, + + async config(cfg) { + if (!cfg.optimizeDeps) cfg.optimizeDeps = {}; + if (!cfg.optimizeDeps.exclude) cfg.optimizeDeps.exclude = []; + if (!cfg.optimizeDeps.exclude.includes('@evidence-dev/universal-sql/client-duckdb')) + cfg.optimizeDeps.exclude.push('@evidence-dev/universal-sql/client-duckdb'); + + if (!cfg.optimizeDeps.include) cfg.optimizeDeps.include = []; + // TODO: This has something to do with the import management crap + // if (!cfg.ssr) cfg.ssr = {} + // if (!cfg.ssr.noExternal) cfg.ssr.noExternal = [] + // if (typeof cfg.ssr.noExternal !== "boolean" && !Array.isArray(cfg.ssr.noExternal)) cfg.ssr.noExternal = [cfg.ssr.noExternal] + // if (typeof cfg.ssr.noExternal !== "boolean") { + // cfg.ssr.noExternal.push(/@evidence-dev\/.+/) + // cfg.ssr.noExternal.push(/@steeze-ui\/.+/) + // } + + if (!cfg.server) cfg.server = {}; + if (!cfg.server.fs) cfg.server.fs = {}; + if (!cfg.server.fs.allow) cfg.server.fs.allow = []; + + cfg.server.fs.allow.push(evidenceDirectory); + + // // Lifted from SvelteKit + // const allow = new Set([ + // path.resolve('src'), // TODO this isn't correct if user changed all his files to sth else than src (like in test/options) + // path.resolve('node_modules'), + // // path.resolve(vite.searchForWorkspaceRoot(cwd), 'node_modules') + // ]); + + for (const allowDir of ['.', 'node_modules', '../node_modules', '../../node_modules']) { + if (!cfg.server.fs.allow.includes(allowDir)) cfg.server.fs.allow.push(allowDir); + } + + // This lets us serve from node_modules regardless of where it is linked. + // Vite considers the "real" path, not the link path when serving. + + /** @type {string} */ + let resolvingPath = path.resolve('node_modules'); + // eslint-disable-next-line no-constant-condition + while (true) { + /** @type {string | false} */ + const nextPath = await fs + .readlink(resolvingPath) + .catch(() => fs.readlink(path.resolve(resolvingPath, '..'))) + .catch(() => false); + if (!nextPath) { + // /home/brian/code/evidence/sdk/examples/example-layout-plugin/node_modules/@sveltejs/kit/src/runtime/client/entry.js + // /home/brian/code/evidence/sdk/test-project/examples/example-layout-plugin + cfg.server.fs.allow.push(resolvingPath); + break; + } else { + if (nextPath.startsWith('.')) resolvingPath = path.relative(resolvingPath, nextPath); + else resolvingPath = nextPath; + } + } + + cfg = applySidecarConfig(cfg); + + return cfg; + }, + + resolveId(id) { + if (id.startsWith(PREFIX)) { + return id; + } + + return null; + }, + + async load(id, opts) { + if (id.startsWith(PREFIX)) { + const virtuals = await fs.readdir(path.join(__dirname, 'virtuals'), { recursive: true }); + const idNoPrefix = id.slice(PREFIX.length); + const idNoExtension = idNoPrefix.split('.').at(0); + if (!idNoExtension) return null; + + if (idNoExtension in dynamicVirtuals) { + const dynFunction = /** @type {() => string | Promise} */ ( + // @ts-expect-error + dynamicVirtuals[idNoExtension] + ); + return await dynFunction(); + } + + const matches = virtuals.filter((filepath) => { + if (filepath.endsWith('.d.ts')) return false; + if (filepath.split('.').at(-2) === 'spec') return false; + if (!filepath.split('/').at(-1)?.split('.').includes(idNoExtension)) return false; + return true; + }); + + let targetFile; + + if (matches.length === 1) { + // Only one possible match + targetFile = matches[0]; + } else if (matches.length > 1) { + // There are choices to be made here + const environmentOptions = matches.filter((m) => + m.startsWith(opts?.ssr ? 'node/' : 'browser/') + ); + + if (environmentOptions.length >= 1) { + if (environmentOptions.length > 1) { + console.warn( + chalk.yellow( + `[!] Multiple Import Files found for $evidence/${idNoPrefix}, this is ambigious and should be corrected. ${environmentOptions.join( + ', ' + )}` + ) + ); + } + targetFile = environmentOptions[0]; + } else { + // There are no specifics + console.warn( + chalk.yellow( + `[!] Multiple Import Files found for $evidence/${idNoPrefix}, this is ambigious and should be corrected. ${matches.join( + ', ' + )}` + ) + ); + targetFile = matches[0]; + } + } else { + console.warn(chalk.yellow(`[!] No Import Files found for $evidence/${idNoPrefix}`)); + return null; + } + + this.addWatchFile(path.join(__dirname, 'virtuals', targetFile)); + return await fs.readFile(path.join(__dirname, 'virtuals', targetFile), 'utf-8'); + } + + return null; + } + }; +}; diff --git a/packages/lib/sdk/src/build-dev/vite/sidecar-app.js b/packages/lib/sdk/src/build-dev/vite/sidecar-app.js new file mode 100644 index 0000000000..f9463c639c --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/sidecar-app.js @@ -0,0 +1,79 @@ +import express from 'express'; +import { getManifest } from './virtuals/node/static-assets.js'; +import fs from 'fs/promises'; +import path from 'path'; +import { dataDirectory } from './virtuals/node/projectPaths.js'; + +/** + * Creates an express application that handles Evidence-specific functionality + * e.g. Fetching parquet files, + * + * @returns {import("vite").Connect.HandleFunction} + */ +export const getSidecarApp = () => { + const app = express(); + + // Handle custom URLs + app.get('/_evidence/manifest.json', (req, res) => { + res.send(getManifest('browser')).end(); + }); + + app.get('/_evidence/:route_hash/:additional_hash/all-queries.json', (req, res) => { + res + .send( + JSON.stringify({ + params: req.params + }) + ) + .end(); + }); + app.get('/_evidence/prerendered-queries/:query_hash.arrow', (req, res) => { + return res.send('Arrow file here!').end(); + }); + app.get('/_evidence/query/:schema/:filename.parquet', async (req, res) => { + // TODO: Check if the file really exists + const filepath = path.join( + dataDirectory, + req.params.schema, + req.params.filename, + req.params.filename + '.parquet' + ); + + if ( + await fs + .stat(filepath) + .then(() => true) + .catch(() => false) + ) { + res.sendFile(filepath, { + acceptRanges: true /* Important to allow predicate pushdown */ + }); + } else { + res.sendStatus(404); + } + }); + + app.get('/_evidence/*', (req, res) => res.sendStatus(404).end()); + app.post('/_evidence/*', (req, res) => res.sendStatus(405).end()); + app.patch('/_evidence/*', (req, res) => res.sendStatus(405).end()); + app.put('/_evidence/*', (req, res) => res.sendStatus(405).end()); + app.delete('/_evidence/*', (req, res) => res.sendStatus(405).end()); + + return app; +}; + +/** + * + * @param {import("vite").UserConfig} cfg + */ +export const applySidecarConfig = (cfg) => { + if (!cfg.server) cfg.server = {}; + if (!cfg.server.proxy) cfg.server.proxy = {}; + cfg.server.proxy['/_evidence'] = {}; + + if (!cfg.preview) cfg.preview = {}; + if (!cfg.preview.proxy) cfg.preview.proxy = {}; + cfg.preview.proxy['/_evidence'] = {}; + + return cfg; +}; diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals-dynamic.js b/packages/lib/sdk/src/build-dev/vite/virtuals-dynamic.js new file mode 100644 index 0000000000..7cbf0c573d --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals-dynamic.js @@ -0,0 +1,12 @@ +import { nanoid } from 'nanoid'; +import { getEvidenceConfig } from '../../index.js'; + +export const build = () => ` +export const BUILD_ID = import.meta.env.MODE === "development" ? "DEV" : "${nanoid(8)}"; +export const BUILD_DATE = new Date(${new Date().getTime()}); +`; + +export const config = async () => { + const cfg = await getEvidenceConfig(); + return `export default ${JSON.stringify(cfg)}`; +}; diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/QuerySSR.svelte b/packages/lib/sdk/src/build-dev/vite/virtuals/QuerySSR.svelte new file mode 100644 index 0000000000..597df4bf49 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/QuerySSR.svelte @@ -0,0 +1,13 @@ + + + + {#each queries as query} + + {/each} + diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/__tests/proxyStack.spec.js b/packages/lib/sdk/src/build-dev/vite/virtuals/__tests/proxyStack.spec.js new file mode 100644 index 0000000000..25ad5dccb5 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/__tests/proxyStack.spec.js @@ -0,0 +1,52 @@ +import { describe, it, expect } from 'vitest'; +import { ProxyStack } from '../proxyStack.js'; + +/** + * @param {import("svelte/store").Readable<*> s} + */ +const getValue = (s) => { + let out; + s.subscribe((v) => (out = v))(); + return out; +}; + +describe('ProxyStack', () => { + it('Should return a bare object when nothing has been added', () => { + const { value } = ProxyStack(); + const content = getValue(value); + expect(content).toEqual({}); + }); + it('Should return a matching object when one object has been added', () => { + const { value, push } = ProxyStack(); + const entry = { x: 1 }; + push(entry); + const content = getValue(value); + expect(content.x).toEqual(1); + }); + it('Should return the most recent value for a prop', () => { + const { value, push } = ProxyStack(); + + push({ x: 1 }); + push({ x: 2 }); + push({ x: 3 }); + const content = getValue(value); + expect(content.x).toEqual(3); + }); + it('Should return the most recent value for a prop, unless it has been deleted', () => { + const stack = ProxyStack(); + + stack.push({ x: 1 }); + stack.push({ x: 2 }); + const id = stack.push({ x: 3 }); + stack.rm(id); + const content = getValue(stack.value); + expect(content.x).toEqual(2); + }); + it('Should JSON.stringify properly', () => { + const stack = ProxyStack(); + const entry = { x: 1 }; + stack.push(entry); + const content = getValue(stack.value); + expect(content).toEqual(entry); + }); +}); diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/bootstrapContexts.svelte.js b/packages/lib/sdk/src/build-dev/vite/virtuals/bootstrapContexts.svelte.js new file mode 100644 index 0000000000..ac7b1236bb --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/bootstrapContexts.svelte.js @@ -0,0 +1,27 @@ +import { setContext } from 'svelte'; +import { + QUERIES_CONTEXT_KEY, + ALL_QUERIES_CONTEXT_KEY, + ALL_QUERIES_MUTS_CONTEXT_KEY +} from '$evidence/contextKeys'; +import { ProxyStack } from '$evidence/proxyStack'; +import { readable } from 'svelte/store'; + +export default () => { + const queryContext = readable({}); // TODO: Stores + const allQueries = ProxyStack(); + + setContext(QUERIES_CONTEXT_KEY, queryContext); + setContext(ALL_QUERIES_CONTEXT_KEY, allQueries.value); + setContext(ALL_QUERIES_MUTS_CONTEXT_KEY, { push: allQueries.push, rm: allQueries.rm }); +}; + +export const asObj = () => { + const queryContext = readable({}); // TODO: Stores + const allQueries = ProxyStack(); + return { + [QUERIES_CONTEXT_KEY]: queryContext, + [ALL_QUERIES_CONTEXT_KEY]: allQueries.value, + [ALL_QUERIES_MUTS_CONTEXT_KEY]: { push: allQueries.push, rm: allQueries.rm } + }; +}; diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/browser/static-assets.js b/packages/lib/sdk/src/build-dev/vite/virtuals/browser/static-assets.js new file mode 100644 index 0000000000..4936e233a4 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/browser/static-assets.js @@ -0,0 +1,3 @@ +export const getManifest = () => { + return fetch('/_evidence/manifest.json').then((r) => r.text()); +}; diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/contextKeys.js b/packages/lib/sdk/src/build-dev/vite/virtuals/contextKeys.js new file mode 100644 index 0000000000..ae51a22502 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/contextKeys.js @@ -0,0 +1,3 @@ +export const QUERIES_CONTEXT_KEY = '__EVIDENCE_CONTEXTUAL_QUERIES'; +export const ALL_QUERIES_CONTEXT_KEY = '__EVIDENCE_ALL_QUERIES'; +export const ALL_QUERIES_MUTS_CONTEXT_KEY = '__EVIDENCE_ALL_QUERIES_MUTS'; diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/initUsql.js b/packages/lib/sdk/src/build-dev/vite/virtuals/initUsql.js new file mode 100644 index 0000000000..dabd7b84b6 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/initUsql.js @@ -0,0 +1,23 @@ +import { + initDB, + setParquetURLs, + updateSearchPath, + query +} from '@evidence-dev/universal-sql/client-duckdb'; + +import { getManifest } from '$evidence/static-assets'; + +export default (async () => { + await initDB(); + let res; + // TODO: Optionally take in a filepath and/or URL for the manifest + res = await getManifest(); + res = JSON.parse(res); + + await setParquetURLs(res.renderedFiles ?? {}); + await updateSearchPath(Object.keys(res.renderedFiles ?? {})); + if (!res.renderedFiles) console.error('No fixture data available!'); + // Test Query + await query('SELECT * FROM information_schema.tables'); + console.log('Universal SQL has been initialized successfully'); +})(); diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/node/projectPaths.js b/packages/lib/sdk/src/build-dev/vite/virtuals/node/projectPaths.js new file mode 100644 index 0000000000..bd0bf41711 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/node/projectPaths.js @@ -0,0 +1,13 @@ +import path from 'path'; + +export const URL_PREFIX = '_evidence'; + +export const inTemplate = process.cwd().includes(path.join('.evidence', 'template')); + +export const evidenceDirectory = inTemplate ? '..' : '.evidence'; + +export const dataDirectory = path.resolve(evidenceDirectory, 'data'); + +export const metaDirectory = path.resolve(evidenceDirectory, 'meta'); + +export const sourcesDirectory = path.resolve(...(inTemplate ? ['..', '..'] : []), 'sources'); diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/node/static-assets.js b/packages/lib/sdk/src/build-dev/vite/virtuals/node/static-assets.js new file mode 100644 index 0000000000..2e5aa4e278 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/node/static-assets.js @@ -0,0 +1,56 @@ +import fs from 'fs'; +import path from 'path'; + +const inTemplate = process.cwd().includes(path.join('.evidence', 'template')); +const evidenceDirectory = inTemplate ? '..' : '.evidence'; +const dataDirectory = path.resolve(evidenceDirectory, 'data'); + +/** + * @param {"browser" | "node"} [dest = "node"] + */ +export const getManifest = (dest = 'node') => { + // TODO: Does this need to be sync? Would simplify types if not + try { + const manifestContent = fs.readFileSync(path.join(dataDirectory, 'manifest.json'), 'utf-8'); + /** @type {import('../../../../plugins/datasources/types.js').Manifest} */ + const manifest = JSON.parse(manifestContent); + + if (!manifest.renderedFiles) throw new Error('Malformed Manifest'); + + if (dest === 'node') { + const renderedFiles = Object.fromEntries( + Object.entries(manifest.renderedFiles).map(([schema, queries]) => { + return [ + schema, + queries.map((queryPath) => { + // Don't modify external paths + if (queryPath.startsWith('http')) return queryPath; + // Adjust prefix + queryPath = queryPath.replace( + '_evidence/query', + path.join(evidenceDirectory, 'data') + ); + const filename = queryPath.match(/(.+\/)(.+).parquet/); + if (filename?.length !== 3) { + // TODO: Debug log? + return queryPath; + } else { + return `${queryPath.startsWith('/') ? '.' : './'}${filename[1]}${filename[2]}/${ + filename[2] + }.parquet`; + } + }) + ]; + }) + ); + manifest.renderedFiles = renderedFiles; + } + + return JSON.stringify(manifest); + } catch (e) { + console.warn('Failed to load manifest file || ', e instanceof Error ? e.message : e); + return JSON.stringify({ + renderedFiles: {} + }); + } +}; diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/proxyStack.js b/packages/lib/sdk/src/build-dev/vite/virtuals/proxyStack.js new file mode 100644 index 0000000000..61d29e8722 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/proxyStack.js @@ -0,0 +1,37 @@ +import { nanoid } from 'nanoid'; +import { derived, writable } from 'svelte/store'; + +/** + * @returns {{ value: Object, push: (v: Object) => string, rm: (id: string) => void }} + */ +export const ProxyStack = () => { + /** + * @type {Array<[string, Object]>} + */ + let stack = []; + /** @type {import("svelte/store").Writable>} */ + const write = writable({}); + + const flush = () => { + write.update((v) => { + for (const k of Object.keys(v)) delete v[k]; + return Object.assign({}, v, ...stack.map((s) => s[1])); + }); + }; + + /** @param {Object} value */ + const push = (value) => { + const id = nanoid(); + stack.push([id, value]); + flush(); + return id; + }; + + /** @param {string} id */ + const rm = (id) => { + stack = stack.filter(([itemId]) => itemId !== id); + flush(); + }; + + return { value: derived([write], ([$write]) => $write), push, rm }; +}; diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/queries.svelte.js b/packages/lib/sdk/src/build-dev/vite/virtuals/queries.svelte.js new file mode 100644 index 0000000000..ef722a5538 --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/queries.svelte.js @@ -0,0 +1,148 @@ +import { getContext } from 'svelte'; +import { ALL_QUERIES_CONTEXT_KEY, QUERIES_CONTEXT_KEY } from '$evidence/contextKeys'; +import { Query } from '@evidence-dev/sdk/query-store'; +import { query } from '@evidence-dev/universal-sql/client-duckdb'; +import { derived } from 'svelte/store'; + +let ssrHookInstalled = false; +/** + * + * @param {boolean} isInstalled + * @returns + */ +export const setSsrHookState = (isInstalled) => { + ssrHookInstalled = isInstalled; +}; + +/** + * + * @param {string} sql + * @param {string} id + * @returns + */ +const runner = (sql, id) => query(sql, { query_name: id, prerendering: true, route_hash: '500' }); + +/** + * @param {string} name + * @param {string} sql + * @param {import('@evidence-dev/sdk/query-store').QueryOpts} [opts] + */ +export const runQuery = (name, sql, opts) => { + let initialData = undefined; + let initialError = undefined; + + try { + if (typeof window === 'undefined') { + // SSR + if (ssrHookInstalled) initialData = query(sql); + } else { + const ssrKey = btoa(sql); + if ( + window.__evidence_ssr && + name in window.__evidence_ssr && + sql === window.__evidence_ssr[ssrKey].initialQuery + ) { + initialData = window.__evidence_ssr[ssrKey].data; + Object.defineProperty(initialData, '_evidenceColumnTypes', { + enumerable: false, + value: window.__evidence_ssr[ssrKey].columns + }); + } + } + } catch (e) { + initialError = new Error(`Error encountered while running query ${name}`, { cause: e }); + } + + return Query.create(sql, runner, { ...opts, initialData, initialError, id: name }); +}; + +/** + * @returns {import("svelte/store").Readable>} + */ +export const getQueries = () => { + /** @type {import("svelte/store").Readable>} */ + const context = getContext(QUERIES_CONTEXT_KEY); + + /** @type {Record>} */ + const queries = {}; + const proxy = new Proxy(queries, { + /** + * @param {Record} t + * @param {*} p + * @returns + */ + get(t, p) { + if (p in t) return t[p]; + return Query.create(p, runner, { + id: p, + initialError: new Error(`Query ${p} is not available in this context`), + disableCache: true + }); + } + }); + + return derived( + context, + ( + /** @type {Record} */ availableQueries, + /** @type {(x: Record) => void} */ set + ) => { + /** @type {Array | unknown>} */ + const updates = []; + Object.entries(availableQueries).forEach(([k, v]) => { + // Don't use $app/environment as that creates a hard dep on SvelteKit + // We want this to be portable to plain svelte projects + let initialData = undefined; + if (!(k in queries)) { + if (typeof window === 'undefined') { + // SSR + if (ssrHookInstalled) initialData = query(v); + } else { + const ssrKey = btoa(v); + + if ( + window.__evidence_ssr && + ssrKey in window.__evidence_ssr && + v === window.__evidence_ssr[ssrKey].initialQuery + ) { + initialData = window.__evidence_ssr[ssrKey].data; + Object.defineProperty(initialData, '_evidenceColumnTypes', { + enumerable: false, + value: window.__evidence_ssr[ssrKey].columns + }); + } + } + } + + const newStore = Query.create(v, runner, { + initialData, + id: k + }); + + if (queries[k]?.hash !== newStore.hash) { + updates.push( + // Loading states appear after 500ms + Promise.race([ + newStore.fetch(), + new Promise((r) => { + setTimeout(r, 500); + }) + ]).then(() => (queries[k] = newStore)) + ); + // Has updated + queries[k] = newStore; + } + }); + + Promise.all(updates).then(() => set(proxy)); + return proxy; + }, + proxy + ); +}; + +export const getAllQueries = () => getContext(ALL_QUERIES_CONTEXT_KEY); + +/** @deprecated Use Query instead of QueryStore */ +const QueryStore = Query; +export { QueryStore }; diff --git a/packages/lib/sdk/src/build-dev/vite/virtuals/ssrHook.svelte.js b/packages/lib/sdk/src/build-dev/vite/virtuals/ssrHook.svelte.js new file mode 100644 index 0000000000..9e04bec00e --- /dev/null +++ b/packages/lib/sdk/src/build-dev/vite/virtuals/ssrHook.svelte.js @@ -0,0 +1,60 @@ +import initUsqlPromise from '$evidence/initUsql'; +import { runQuery, setSsrHookState } from '$evidence/queries'; + +setSsrHookState(true); + +/** + * SvelteKit server hook to enable SSR + * @param {Array<{name: string, queryString: string}>} presentQueries + * @returns {(chunk: {html: string, done:boolean}) => Promise} + */ +export const ssrHook = + (presentQueries) => + async ({ html, done }) => { + const regex = //g; + let queryMatch; + + while ((queryMatch = regex.exec(html) ?? []).length) { + if (queryMatch) + presentQueries.push({ + name: queryMatch[1], + queryString: queryMatch[2].replaceAll('"', '"') + }); + } + + const loadDetectedQueries = async () => { + await initUsqlPromise; + const results = await Promise.all( + presentQueries.map(async ({ name, queryString }) => { + const result = runQuery(`${name}-ssr`, `--ssr\n${queryString}`, { + disableCache: true + }); + + await result.fetch(); + if ((result.length && result[0] === null) || result[0] === undefined) + throw new Error(`Failed to render queries via SSR`); + if (result.error) throw result.error; + return [ + name, + { + data: Array.from(result), + columns: result.columns, + initialQuery: queryString + } + ]; + }) + ); + + return Object.fromEntries(results); + }; + + if (done) { + const r = await loadDetectedQueries(); + html = html.replace( + ' + * + * @param {import("estree").Node} currentNode + * @returns {boolean} + */ +const nodeIsEvidenceDeclaration = (currentNode) => { + // If this isn't the right kind of declaration, ignore it + if (currentNode.type !== 'ExportNamedDeclaration') return false; + + const rootDeclaration = currentNode.declaration; + + if (rootDeclaration?.type !== 'VariableDeclaration') return false; + + // const only, this is somewhat inline with sveltekit's patterns + if (rootDeclaration.kind !== 'const') return false; + + // This shouldn't be hit, but type safety + if (!rootDeclaration?.declarations) return false; + + // Iterate through sub-declarations, I've only ever seen 1 here + for (const declaration of rootDeclaration.declarations) { + const { id, init } = declaration; + // Check to see if this is a declaration for evidenceInclude + if (id.type !== 'Identifier') continue; + if (id.name !== 'evidenceInclude') continue; + // Check to see if the value it is declared with is a true constant + // We could shorten this; but this reads better + if (init?.type !== 'Literal') continue; + if (init.value !== true) continue; + // We found what we want! + return true; + } + // We never found the right declaration; continue the reduction + return false; +}; + +/** + * Generates an AST and searches it for the special declaration + * @param {string} fileContent + */ +export const isLibraryComponent = async (fileContent) => { + let result = false; + + // remove style tags, postcss can screw this up + fileContent = fileContent.replace(/(.|[\s])*<\/style>/g, ''); + // First parse the passed in file + const parseResult = svelteParse(fileContent); + // If there is a + + + + + +
+ +
+
diff --git a/packages/ui/core-components/src/lib/atoms/fullscreen/index.js b/packages/ui/core-components/src/lib/atoms/fullscreen/index.js new file mode 100644 index 0000000000..f8271ec095 --- /dev/null +++ b/packages/ui/core-components/src/lib/atoms/fullscreen/index.js @@ -0,0 +1 @@ +export { default as Fullscreen } from './Fullscreen.svelte'; diff --git a/packages/core-components/src/lib/atoms/grid/Grid.stories.svelte b/packages/ui/core-components/src/lib/atoms/grid/Grid.stories.svelte similarity index 100% rename from packages/core-components/src/lib/atoms/grid/Grid.stories.svelte rename to packages/ui/core-components/src/lib/atoms/grid/Grid.stories.svelte diff --git a/packages/core-components/src/lib/atoms/grid/Grid.svelte b/packages/ui/core-components/src/lib/atoms/grid/Grid.svelte similarity index 100% rename from packages/core-components/src/lib/atoms/grid/Grid.svelte rename to packages/ui/core-components/src/lib/atoms/grid/Grid.svelte diff --git a/packages/core-components/src/lib/atoms/grid/index.js b/packages/ui/core-components/src/lib/atoms/grid/index.js similarity index 100% rename from packages/core-components/src/lib/atoms/grid/index.js rename to packages/ui/core-components/src/lib/atoms/grid/index.js diff --git a/packages/core-components/src/lib/atoms/hint/Hint.svelte b/packages/ui/core-components/src/lib/atoms/hint/Hint.svelte similarity index 90% rename from packages/core-components/src/lib/atoms/hint/Hint.svelte rename to packages/ui/core-components/src/lib/atoms/hint/Hint.svelte index a06de4f484..a785b6761a 100644 --- a/packages/core-components/src/lib/atoms/hint/Hint.svelte +++ b/packages/ui/core-components/src/lib/atoms/hint/Hint.svelte @@ -7,7 +7,7 @@ import { Icon } from '@steeze-ui/svelte-icon'; import { InfoCircle } from '@steeze-ui/tabler-icons'; - /** @type {import("@steeze-ui/svelte-icon").IconSource} */ + /** @type {import('@steeze-ui/svelte-icon').IconSource} */ export let icon = InfoCircle; let visible = false; @@ -22,6 +22,7 @@ on:mouseenter={showMessage} on:mouseleave={hideMessage} class="additional-info-icon" + role="tooltip" > @@ -32,7 +33,7 @@ {/if} - diff --git a/packages/core-components/src/lib/unsorted/viz/table/_DataTable.svelte b/packages/ui/core-components/src/lib/unsorted/viz/table/_DataTable.svelte similarity index 92% rename from packages/core-components/src/lib/unsorted/viz/table/_DataTable.svelte rename to packages/ui/core-components/src/lib/unsorted/viz/table/_DataTable.svelte index e5d75a98df..1a9b2a1934 100644 --- a/packages/core-components/src/lib/unsorted/viz/table/_DataTable.svelte +++ b/packages/ui/core-components/src/lib/unsorted/viz/table/_DataTable.svelte @@ -20,6 +20,10 @@ import { ChevronsLeft, ChevronsRight, ChevronLeft, ChevronRight } from '@steeze-ui/tabler-icons'; import { Icon } from '@steeze-ui/svelte-icon'; import CodeBlock from '../../ui/CodeBlock.svelte'; + import EnterFullScreen from './EnterFullScreen.svelte'; + import Fullscreen from '../../../atoms/fullscreen/Fullscreen.svelte'; + import { browser } from '$app/environment'; + import Column from './Column.svelte'; // Set up props store let props = writable({}); @@ -58,6 +62,8 @@ export let totalRow = false; + export let isFullPage = false; + // Row Links: export let link = undefined; @@ -112,13 +118,12 @@ // PROCESS DATES // Filter for columns with type of "date" - let dateCols = columnSummary.filter((d) => d.type === 'date'); - dateCols = dateCols.map((d) => d.id); + const dateCols = columnSummary + .filter((d) => d.type === 'date' && !(data[0]?.[d.id] instanceof Date)) + .map((d) => d.id); - if (dateCols.length > 0) { - for (let i = 0; i < dateCols.length; i++) { - data = convertColumnToDate(data, dateCols[i]); - } + for (let i = 0; i < dateCols.length; i++) { + data = convertColumnToDate(data, dateCols[i]); } // Hide link column if columns have not been explicitly selected: @@ -171,11 +176,8 @@ }); } - // Initially set up Fuse with the current data - updateFuse(); - // Reactively update Fuse when `data` or `columnSummary` changes - $: { + $: if (browser) { updateFuse(); if (searchValue !== '') { runSearch(searchValue); @@ -224,9 +226,9 @@ (forceTopOfAscending(a[column]) && !forceTopOfAscending(b[column])) || a[column] < b[column] ? -1 * sortModifier : (forceTopOfAscending(b[column]) && !forceTopOfAscending(a[column])) || - a[column] > b[column] - ? 1 * sortModifier - : 0; + a[column] > b[column] + ? 1 * sortModifier + : 0; data.sort(sort); filteredData = filteredData.sort(sort); @@ -311,7 +313,7 @@ ? dataSubset( data, $props.columns.map((d) => d.id) - ) + ) : data; const weightedMean = (data, valueCol, weightCol) => { @@ -327,8 +329,33 @@ return totalWeight > 0 ? totalWeightedValue / totalWeight : 0; }; + + let fullscreen = false; + /** @type {number} */ + let innerHeight; + + +{#if !isFullPage} + + + {@const ROW_HEIGHT = 23} + {@const Y_AXIS_PADDING = 45 + 234} +
+ + {#each $props.columns as column} + + {/each} + +
+
+{/if} + {#if error === undefined} @@ -340,6 +367,7 @@ {/each}
{/if} @@ -435,10 +463,10 @@ ? column.customColor ? `color-mix(in srgb, ${column.customColor} ${ Math.max(0, Math.min(1, percentage)) * 100 - }%, transparent)` + }%, transparent)` : `${column.useColor} ${Math.max(0, Math.min(1, percentage))})` : // closing bracket needed to close unclosed color string from Column component - ''} + ''} > {#if column.contentType === 'image' && row[column.id] !== undefined} 1}