From 4f65a781033e8672222f6b7a60d673d6e5c8bd39 Mon Sep 17 00:00:00 2001 From: Kacper Kula Date: Fri, 31 Jan 2025 13:44:21 +0000 Subject: [PATCH] feat: initial version --- .github/FUNDING.yml | 1 + .github/workflows/tag-and-publish.yml | 88 + .github/workflows/test.yml | 49 + .gitignore | 26 + CHANGELOG.md | 2 + README.md | 85 + docs/line_chart.png | Bin 0 -> 69587 bytes docs/pie_chart.png | Bin 0 -> 84552 bytes esbuild.config.mjs | 37 + jest.config.js | 9 + manifest.json | 10 + package.json | 53 + pnpm-lock.yaml | 3938 ++++++++++++++++++++++++ scripts/data_generator.js | 52 + src/chartRenderer.ts | 57 + src/main.ts | 17 + src/utils/configParser.test.ts | 94 + src/utils/configParser.ts | 205 ++ src/utils/prepareDataVariables.test.ts | 32 + src/utils/prepareDataVariables.ts | 58 + styles.css | 11 + tsconfig.json | 24 + version-bump.mjs | 14 + versions.json | 3 + 24 files changed, 4865 insertions(+) create mode 100644 .github/FUNDING.yml create mode 100644 .github/workflows/tag-and-publish.yml create mode 100644 .github/workflows/test.yml create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 README.md create mode 100644 docs/line_chart.png create mode 100644 docs/pie_chart.png create mode 100644 esbuild.config.mjs create mode 100644 jest.config.js create mode 100644 manifest.json create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 scripts/data_generator.js create mode 100644 src/chartRenderer.ts create mode 100644 src/main.ts create mode 100644 src/utils/configParser.test.ts create mode 100644 src/utils/configParser.ts create mode 100644 src/utils/prepareDataVariables.test.ts create mode 100644 src/utils/prepareDataVariables.ts create mode 100644 styles.css create mode 100644 tsconfig.json create mode 100644 version-bump.mjs create mode 100644 versions.json diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..6679069 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +ko_fi: hypersphere \ No newline at end of file diff --git a/.github/workflows/tag-and-publish.yml b/.github/workflows/tag-and-publish.yml new file mode 100644 index 0000000..129300b --- /dev/null +++ b/.github/workflows/tag-and-publish.yml @@ -0,0 +1,88 @@ +name: Check Version and Release + +on: + push: + branches: + - main + paths: + - 'package.json' + +jobs: + check-and-release: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: "18.x" + + - name: Get package version + id: package-version + run: | + VERSION=$(node -p "require('./package.json').version") + echo "VERSION=$VERSION" >> $GITHUB_OUTPUT + + - name: Check if tag exists + id: check-tag + run: | + if git rev-parse "${{ steps.package-version.outputs.VERSION }}" >/dev/null 2>&1; then + echo "EXISTS=true" >> $GITHUB_OUTPUT + else + echo "EXISTS=false" >> $GITHUB_OUTPUT + fi + + - name: Install packages + if: steps.check-tag.outputs.EXISTS == 'false' + run: npm install + + - name: Build plugin + if: steps.check-tag.outputs.EXISTS == 'false' + run: | + npm run build + + - name: Extract release notes + if: steps.check-tag.outputs.EXISTS == 'false' + id: release-notes + run: | + version="${{ steps.package-version.outputs.VERSION }}" + + # Use awk to extract the section for the current version + awk -v version="$version" ' + BEGIN { found=0; content="" } + /^# [0-9]+\.[0-9]+\.[0-9]+/ { + if (found) { exit } + if ($2 ~ "^"version"($| \\()") { found=1; next } + } + found { content = content $0 "\n" } + END { printf "%s", content } + ' CHANGELOG.md > release_notes.txt + + # Escape multiline output for GitHub Actions + echo "NOTES<> $GITHUB_OUTPUT + cat release_notes.txt >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + - name: Create tag and release + if: steps.check-tag.outputs.EXISTS == 'false' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Create and push tag + git config user.name "GitHub Actions" + git config user.email "actions@github.com" + git tag -a "${{ steps.package-version.outputs.VERSION }}" -m "Release version ${{ steps.package-version.outputs.VERSION }}" + git push origin "${{ steps.package-version.outputs.VERSION }}" + + # Create release + gh release create "${{ steps.package-version.outputs.VERSION }}" \ + --title="${{ steps.package-version.outputs.VERSION }}" \ + --notes="${{ steps.release-notes.outputs.NOTES }}" \ + main.js manifest.json styles.css diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..fc89bff --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,49 @@ +name: Run Tests on Pull Request + +on: + pull_request: + branches: [ main ] + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: '18' + + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: 9 + + - name: Install dependencies + run: pnpm install + + - name: Run tests + run: pnpm run test + typecheck: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: '18' + + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: 9 + + - name: Install dependencies + run: pnpm install + + - name: Run typecheck + run: pnpm run typecheck \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5c5d0f --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# vscode +.vscode + +# Intellij +*.iml +.idea + +# npm +node_modules + +# Don't include the compiled main.js file in the repo. +# They should be uploaded to GitHub releases instead. +main.js + +# Exclude sourcemaps +*.map + +# obsidian +data.json + +# Exclude macOS Finder (System Explorer) View States +.DS_Store +docs/.vitepress/dist +docs/.vitepress/cache +coverage/ +dist/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..f293655 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,2 @@ +# 0.1.0 (2025-01-31) +Initial release! \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..7c8319f --- /dev/null +++ b/README.md @@ -0,0 +1,85 @@ +# SQLSeal Charts + +SQLSeal Charts is an extension for SQLSeal Obsidian Plugin allowing to visualise your data using charts! + +Powered by [ECharts](https://echarts.apache.org/en/index.html). Check their documentation for more examples of usage. + +## Features +- Support for basic charts: line, bar, pie charts +- Support for compex charts like scatterplot, heatmap, etc. + +## Getting started +Install the plugin by downloading latest release and unpacking it in `.obsidian/plugins/sqlseal-charts`. Make sure you have SQLSeal plugin already installed. + +## Example query + +### Pie Chart + +Query below takes the first table in your current markdown tile and displays it as a piechart. + +| Category | Amount | +| ------------- | ------ | +| Rent | 1500 | +| Groceries | 200 | +| Entertainment | 150 | +| Repairs | 200 | + +```sqlseal +TABLE finances = table(0) + +CHART { + series: [{ + type: 'pie' + }] +} +SELECT * FROM finances +``` + +![Pie Chart Example](./docs/pie_chart.png) + +### Line Chart +```sqlseal +CHART { + xAxis: { + type: 'category' + }, + yAxis: {}, + series: [{ + type: 'bar', + }] +} +SELECT + strftime("%Y-%m-%d", created_at) as created_date, + COUNT(*) as count +FROM files +GROUP BY created_date +ORDER BY created_date +``` + +![Line Chart Example](./docs/line_chart.png) + + +## Syntax +SQLSeal Charts uses [ECharts](https://echarts.apache.org/en/index.html) under the hood. It automatically exposes data returned by your SQL query as a `data` dataset in ECharts. This means you can generate plenty of charts without worrying too much about how the data is being passed down. For more complex use-cases, you can always refer to the data by column name, it's index or even filter it down to create separate data-sets for different series. +To read more about datasets, [check out ECharts documentation](https://apache.github.io/echarts-handbook/en/concepts/dataset/). + +For more advanced transformations, SQLSeal Charts exposes the following data and functions to be used to transform data further. + +### Data +| Variable Name | Description | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `data` | Array of objects containing raw data | +| `columns` | array of column names | +| Object for each column | You can refer to each of the column data by their name, i.e. for `SELECT category, amount FROM data` you can use `category` and `amount` columns | + +### Functions +The following functions are exposed in your query to allow you to further process data. + +| Function | Description | +| ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `column(name: string)` | Returns array of the values for a specified column | +| `mean, max, min, uniq, uniqBy` | [Lodash](https://lodash.com/docs/4.17.15) functions to help with data processing | +| `array(...arrays)` | creates subarrays from arrays, i.e. `array([1,2], [3,4 ]) == [[1,3], [2,4]]`. Useful when grouping multiple columns together when reshaping the data | +| Repairs | 200 | +| `assembleObjects(...definitions: { key: string, values: array }[])` | Assembles multiple arrays into array of objects using provided key values | +| `assemble(definition: Record)` | Assembles multiple arrays into array of objects using a key=>value map | diff --git a/docs/line_chart.png b/docs/line_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..378939cd5f4c8e4c005c480c224ed32198b7daeb GIT binary patch literal 69587 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≦y}4LRiIO-U-LxE@ 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 literal 0 HcmV?d00001 diff --git a/docs/pie_chart.png b/docs/pie_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..0fe74e1034924409f68174cf8d54342c389859ac GIT binary patch literal 84552 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.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.5': + resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.5': + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.5': + resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.5': + resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.5': + resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@codemirror/state@6.5.1': + resolution: {integrity: sha512-3rA9lcwciEB47ZevqvD8qgbzhM9qMb8vCcQCNmDfVRPQG4JT9mSb0Jg8H7YjKGGQcFnLN323fj9jdnG59Kx6bg==} + + '@codemirror/view@6.36.2': + resolution: {integrity: sha512-DZ6ONbs8qdJK0fdN7AB82CgI6tYXf4HWk1wSVa0+9bhVznCuuvhQtX8bFBoy3dv8rZSQqUd8GvhVAcielcidrA==} + + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.18.0': + resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@marijn/find-cluster-break@1.0.2': + resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@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'} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@types/acorn@6.0.4': + resolution: {integrity: sha512-DafqcBAjbOOmgqIx3EF9EAdBKAKgspv00aQVIW3fVQ0TXo5ZPBeSRey1SboVAUzjw8Ucm7cd1gtTSlosYoEQLA==} + deprecated: This is a stub types definition. acorn provides its own type definitions, so you do not need this installed. + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/codemirror@5.60.8': + resolution: {integrity: sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/leaflet@1.9.16': + resolution: {integrity: sha512-wzZoyySUxkgMZ0ihJ7IaUIblG8Rdc8AbbZKLneyn+QjYsj5q1QU7TEKYqwTr10BGSzY5LI7tJk9Ifo+mEjdFRw==} + + '@types/lodash@4.17.14': + resolution: {integrity: sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==} + + '@types/node@22.10.10': + resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/tern@0.23.9': + resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/eslint-plugin@8.21.0': + resolution: {integrity: sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.21.0': + resolution: {integrity: sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/scope-manager@8.21.0': + resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/type-utils@8.21.0': + resolution: {integrity: sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/types@8.21.0': + resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.21.0': + resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/utils@8.21.0': + resolution: {integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/visitor-keys@8.21.0': + resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vanakat/plugin-api@0.2.1': + resolution: {integrity: sha512-m2gVJFTPoIG+fUDAWYPPW/XoywBXrGtYOZFZdQHZmL62Zoc9NntCID76/Wu17DAanQ4aiZN8yRHHXlfq6sPvsQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builtin-modules@4.0.0: + resolution: {integrity: sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==} + engines: {node: '>=18.20'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001695: + resolution: {integrity: sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + + claygl@1.3.0: + resolution: {integrity: sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + echarts-gl@2.0.9: + resolution: {integrity: sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==} + peerDependencies: + echarts: ^5.1.2 + + echarts@5.6.0: + resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.87: + resolution: {integrity: sha512-mPFwmEWmRivw2F8x3w3l2m6htAUN97Gy0kwpO++2m9iT1Gt8RCFVUfv9U/sIbHJ6rY4P6/ooqFL/eL7ock+pPg==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + 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} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.18.0: + resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.18.0: + resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + 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-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + moment@2.29.4: + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + obsidian@1.7.2: + resolution: {integrity: sha512-k9hN9brdknJC+afKr5FQzDRuEFGDKbDjfCazJwpgibwCAoZNYHYV8p/s3mM8I6AsnKrPKNXf8xGuMZ4enWelZQ==} + peerDependencies: + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + 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'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-mod@4.1.2: + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-jest@29.2.5: + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + + zrender@5.6.1: + resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.5': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.5 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.5': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.5 + + '@babel/parser@7.26.5': + dependencies: + '@babel/types': 7.26.5 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + + '@babel/traverse@7.26.5': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.5 + '@babel/template': 7.25.9 + '@babel/types': 7.26.5 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.5': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@codemirror/state@6.5.1': + dependencies: + '@marijn/find-cluster-break': 1.0.2 + + '@codemirror/view@6.36.2': + dependencies: + '@codemirror/state': 6.5.1 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 + + '@esbuild/aix-ppc64@0.24.2': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + + '@esbuild/android-arm@0.24.2': + optional: true + + '@esbuild/android-x64@0.24.2': + optional: true + + '@esbuild/darwin-arm64@0.24.2': + optional: true + + '@esbuild/darwin-x64@0.24.2': + optional: true + + '@esbuild/freebsd-arm64@0.24.2': + optional: true + + '@esbuild/freebsd-x64@0.24.2': + optional: true + + '@esbuild/linux-arm64@0.24.2': + optional: true + + '@esbuild/linux-arm@0.24.2': + optional: true + + '@esbuild/linux-ia32@0.24.2': + optional: true + + '@esbuild/linux-loong64@0.24.2': + optional: true + + '@esbuild/linux-mips64el@0.24.2': + optional: true + + '@esbuild/linux-ppc64@0.24.2': + optional: true + + '@esbuild/linux-riscv64@0.24.2': + optional: true + + '@esbuild/linux-s390x@0.24.2': + optional: true + + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': + optional: true + + '@esbuild/netbsd-x64@0.24.2': + optional: true + + '@esbuild/openbsd-arm64@0.24.2': + optional: true + + '@esbuild/openbsd-x64@0.24.2': + optional: true + + '@esbuild/sunos-x64@0.24.2': + optional: true + + '@esbuild/win32-arm64@0.24.2': + optional: true + + '@esbuild/win32-ia32@0.24.2': + optional: true + + '@esbuild/win32-x64@0.24.2': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.18.0)': + dependencies: + eslint: 9.18.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.1': + dependencies: + '@eslint/object-schema': 2.1.5 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.18.0': {} + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.5': + dependencies: + '@eslint/core': 0.10.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.10.10) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.10.10 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.10.10 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.26.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.10.10 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@marijn/find-cluster-break@1.0.2': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.18.0 + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@types/acorn@6.0.4': + dependencies: + acorn: 8.14.0 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.5 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.5 + + '@types/codemirror@5.60.8': + dependencies: + '@types/tern': 0.23.9 + + '@types/estree@1.0.6': {} + + '@types/geojson@7946.0.16': {} + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.10.10 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/json-schema@7.0.15': {} + + '@types/leaflet@1.9.16': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/lodash@4.17.14': {} + + '@types/node@22.10.10': + dependencies: + undici-types: 6.20.0 + + '@types/stack-utils@2.0.3': {} + + '@types/tern@0.23.9': + dependencies: + '@types/estree': 1.0.6 + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.18.0)(typescript@5.4.5))(eslint@9.18.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 7.18.0(eslint@9.18.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@9.18.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.18.0(eslint@9.18.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 9.18.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.4.3(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3))(eslint@9.18.0)(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.21.0(eslint@9.18.0)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/type-utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.21.0 + eslint: 9.18.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.18.0(eslint@9.18.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.4.0 + eslint: 9.18.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.21.0 + debug: 4.4.0 + eslint: 9.18.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + + '@typescript-eslint/scope-manager@8.21.0': + dependencies: + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/visitor-keys': 8.21.0 + + '@typescript-eslint/type-utils@7.18.0(eslint@9.18.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.18.0(eslint@9.18.0)(typescript@5.4.5) + debug: 4.4.0 + eslint: 9.18.0 + ts-api-utils: 1.4.3(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.21.0(eslint@9.18.0)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.18.0 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@7.18.0': {} + + '@typescript-eslint/types@8.21.0': {} + + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.4.0 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.4.3(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.21.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/visitor-keys': 8.21.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@7.18.0(eslint@9.18.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + eslint: 9.18.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.21.0(eslint@9.18.0)(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0) + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + eslint: 9.18.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.21.0': + dependencies: + '@typescript-eslint/types': 8.21.0 + eslint-visitor-keys: 4.2.0 + + '@vanakat/plugin-api@0.2.1(@codemirror/state@6.5.1)(@codemirror/view@6.36.2)(eslint@9.18.0)': + dependencies: + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.18.0)(typescript@5.4.5))(eslint@9.18.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@9.18.0)(typescript@5.4.5) + obsidian: 1.7.2(@codemirror/state@6.5.1)(@codemirror/view@6.36.2) + typescript: 5.4.5 + transitivePeerDependencies: + - '@codemirror/state' + - '@codemirror/view' + - eslint + - supports-color + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + ajv@6.12.6: + 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 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-union@2.1.0: {} + + async@3.2.6: {} + + babel-jest@29.7.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.0) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.5 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) + + babel-preset-jest@29.6.3(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + + balanced-match@1.0.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001695 + electron-to-chromium: 1.5.87 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + builtin-modules@4.0.0: {} + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001695: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + char-regex@1.0.2: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.1: {} + + claygl@1.3.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + create-jest@29.7.0(@types/node@22.10.10): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.10.10) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + dedent@1.5.3: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + detect-newline@3.1.0: {} + + diff-sequences@29.6.3: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + echarts-gl@2.0.9(echarts@5.6.0): + dependencies: + claygl: 1.3.0 + echarts: 5.6.0 + zrender: 5.6.1 + + echarts@5.6.0: + dependencies: + tslib: 2.3.0 + zrender: 5.6.1 + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.87: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + + escalade@3.2.0: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.18.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.18.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + 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.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.18.0: + dependencies: + reusify: 1.0.4 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + + flatted@3.3.2: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-package-type@0.1.0: {} + + get-stream@6.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + 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 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + html-escaper@2.0.2: {} + + human-signals@2.1.0: {} + + ignore@5.3.2: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-arrayish@0.2.1: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-stream@2.0.1: {} + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.10.10): + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.10.10) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.10.10) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.10.10): + dependencies: + '@babel/core': 7.26.0 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.10.10 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.10.10 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + chalk: 4.1.2 + cjs-module-lexer: 1.4.1 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.26.0 + '@babel/generator': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.5 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.10.10 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.10.10): + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.10.10) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mimic-fn@2.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + moment@2.29.4: {} + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + node-int64@0.4.0: {} + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + obsidian@1.7.2(@codemirror/state@6.5.1)(@codemirror/view@6.36.2): + dependencies: + '@codemirror/state': 6.5.1 + '@codemirror/view': 6.36.2 + '@types/codemirror': 5.60.8 + moment: 2.29.4 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@2.2.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pirates@4.0.6: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + prelude-ls@1.2.1: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + punycode@2.3.1: {} + + pure-rand@6.1.0: {} + + queue-microtask@1.2.3: {} + + react-is@18.3.1: {} + + require-directory@2.1.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve.exports@2.0.3: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + semver@6.3.1: {} + + semver@7.6.3: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + sprintf-js@1.0.3: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-json-comments@3.1.1: {} + + style-mod@4.1.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + tmpl@1.0.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@1.4.3(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + + ts-api-utils@2.0.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.2)(jest@29.7.0(@types/node@22.10.10))(typescript@5.7.3): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@22.10.10) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.3 + typescript: 5.7.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + esbuild: 0.24.2 + + tslib@2.3.0: {} + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.21.3: {} + + typescript@5.4.5: {} + + typescript@5.7.3: {} + + undici-types@6.20.0: {} + + update-browserslist-db@1.1.2(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + w3c-keyname@2.2.8: {} + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + 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 + + yocto-queue@0.1.0: {} + + zod@3.24.1: {} + + zrender@5.6.1: + dependencies: + tslib: 2.3.0 diff --git a/scripts/data_generator.js b/scripts/data_generator.js new file mode 100644 index 0000000..0b43b95 --- /dev/null +++ b/scripts/data_generator.js @@ -0,0 +1,52 @@ +const fs = require('fs'); +const path = require('path'); + +const OUTPUT_FILE = path.join(__dirname, '../../../../obsidianPlayground/My\ Vault/test_data.csv'); +const TOTAL_RECORDS = 50; +const UPDATE_INTERVAL = 1 * 1000; // 10 seconds + +// Generate dates starting from today +function generateDates() { + const dates = []; + const today = new Date(); + + for(let i = 0; i < TOTAL_RECORDS; i++) { + const date = new Date(today); + date.setDate(today.getDate() + i); + dates.push(date.toISOString().split('T')[0]); // YYYY-MM-DD format + } + + return dates; +} + +// Generate random values between 1 and 100 +function generateValues() { + return Array(TOTAL_RECORDS).fill(0) + .map(() => Math.floor(Math.random() * 100) + 1); +} + +// Create CSV content +function createCSV(dates, values, values2) { + const headers = ['date', 'value1', 'value2']; + const rows = dates.map((date, index) => `${date},${values[index]},${values2[index]}`); + return [headers.join(','), ...rows].join('\n'); +} + +// Main function to update data +function updateData() { + const dates = generateDates(); + const values = generateValues(); + const values2 = generateValues() + const csvContent = createCSV(dates, values, values2); + + fs.writeFileSync(OUTPUT_FILE, csvContent, 'utf-8'); + console.log(`Data updated at ${new Date().toLocaleTimeString()}`); +} + +// Initial update +updateData(); + +// Schedule updates +setInterval(updateData, UPDATE_INTERVAL); + +console.log(`Data generator started. Writing to ${OUTPUT_FILE}`); \ No newline at end of file diff --git a/src/chartRenderer.ts b/src/chartRenderer.ts new file mode 100644 index 0000000..e916779 --- /dev/null +++ b/src/chartRenderer.ts @@ -0,0 +1,57 @@ +import { App } from "obsidian"; +import { parseCode } from "./utils/configParser"; +import { prepareDataVariables } from "./utils/prepareDataVariables"; +import * as echarts from 'echarts'; +import type { RendererConfig } from "@hypersphere/sqlseal"; + +interface Config { + config: string +} + +export class ChartRenderer implements RendererConfig { + + constructor(private readonly app: App) { + } + + get rendererKey() { + return 'chart' + } + + validateConfig(config: string): Config { + return { config } + } + + render(config: Config, el: HTMLElement) { + let isRendered: boolean = false + let chart: echarts.ECharts | null = null + return { + render: ({ columns, data }: { columns: string[], data: Record[]}) => { + const { functions, variables } = prepareDataVariables({ columns, data }) + const parsedConfig = parseCode(config.config, functions, variables) + const dataset = [{ id: 'data', source: data }, ...(parsedConfig.dataset ?? [])] + parsedConfig.dataset = dataset + + if (isRendered) { + // Data update + chart?.setOption(parsedConfig) + return + } + + el.empty() + const container = el.createDiv({ cls: 'sqlseal-charts-container' }) + const chartDiv = container.createDiv() + requestAnimationFrame(() => { + const box = container.getBoundingClientRect() + const width = box.width + const height = box.height + chart = echarts.init(chartDiv, null, { height: height, width: width, }) + chart.setOption(parsedConfig) + isRendered = true + }) + }, + error: (error: string) => { + return createDiv({ text: error, cls: 'sqlseal-error' }) + } + } + } +} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..da51ab5 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,17 @@ +import { Plugin } from 'obsidian'; +import { ChartRenderer } from './chartRenderer'; +import { pluginApi } from '@vanakat/plugin-api'; +import type { SQLSealRegisterApi } from '@hypersphere/sqlseal' + +export default class SQLSealCharts extends Plugin { + + async onload() { + this.registerWithSQLSeal(); + } + + private registerWithSQLSeal() { + const api = pluginApi('sqlseal') as SQLSealRegisterApi + const registar = api.registerForPlugin(this) + registar.registerView('sqlseal-charts', new ChartRenderer(this.app)) + } +} diff --git a/src/utils/configParser.test.ts b/src/utils/configParser.test.ts new file mode 100644 index 0000000..f78d38d --- /dev/null +++ b/src/utils/configParser.test.ts @@ -0,0 +1,94 @@ +import { parseCode } from "./configParser"; + +describe('config parser', () => { + it('should properly parse basic data', () => { + // Example usage: + const dot = (config: any) => ({ type: 'dot', ...config }); + + // Test the parser + const testCode = `{ + a: 'test', + marks: [ + dot({ x: 'x', y: 'something' }) + ] + }`; + + const res = parseCode(testCode, { dot }) + expect(res).toEqual({ + a: 'test', + marks: [{ + type: 'dot', + x: 'x', + y: 'something' + }] + }) + + }) + + it('should properly parse config with data provided', () => { + const variables = { + data: [1, 2, 3, 4], + config: { value: 42 } + }; + + const functions = { + dot: (config: any) => ({ type: 'dot', ...config }) + }; + + // This will work: + const code1 = `{ + a: data[0], + b: data[1], + marks: [ + dot({ x: data[2], y: data[3] }) + ] + }`; + + const res = parseCode(code1, functions, variables) + expect(res).toEqual({ + a: 1, + b: 2, + marks: [{ + type: 'dot', + x: 3, + y: 4 + }] + }) + }) + + it('should properly parse config with arrow functions and template literals', () => { + const variables = { + data: [1, 2, 3, 4], + config: { value: 42 } + }; + + const functions = { + dot: (config: any) => ({ type: 'dot', ...config }), + column: (name: string) => ([1,2,3]) + }; + + // This will work: + const code1 = `{ + a: data[0], + b: data[1], + fn: (x) => \`\${x.a.b[0]} DATA\`, + data: column('data'), + marks: [ + dot({ x: data[2], y: data[3] }) + ] + }`; + + const res = parseCode(code1, functions, variables) + expect(res).toEqual({ + a: 1, + b: 2, + fn: expect.any(Function), + data: [1,2,3], + marks: [{ + type: 'dot', + x: 3, + y: 4 + }] + }) + }) +}) \ No newline at end of file diff --git a/src/utils/configParser.ts b/src/utils/configParser.ts new file mode 100644 index 0000000..126c12c --- /dev/null +++ b/src/utils/configParser.ts @@ -0,0 +1,205 @@ +import * as acorn from 'acorn'; +import { Node, ObjectExpression, Property, CallExpression, Identifier, Literal, + ArrayExpression, MemberExpression, ArrowFunctionExpression, BlockStatement, + TemplateLiteral } from 'estree'; + +type AllowedFunctions = Record any>; +type AllowedVariables = Record; + +// Extended to include function scope +interface EvaluationContext { + allowedFunctions: AllowedFunctions; + allowedVariables: AllowedVariables; + scope: Record; +} + +export function parseCode( + code: string, + allowedFunctions: AllowedFunctions = {}, + allowedVariables: AllowedVariables = {} +) { + const wrappedCode = `(${code})`; + + const ast = acorn.parse(wrappedCode, { + ecmaVersion: 2020, + sourceType: 'module' + }) as any; + + const context: EvaluationContext = { + allowedFunctions, + allowedVariables, + scope: {} + }; + + function evaluateNode(node: Node, context: EvaluationContext): any { + if (!node) { + throw new Error('Null node encountered'); + } + + switch (node.type) { + case 'ObjectExpression': + return evaluateObject(node as ObjectExpression, context); + case 'ArrayExpression': + return evaluateArray(node as ArrayExpression, context); + case 'CallExpression': + return evaluateCall(node as CallExpression, context); + case 'Identifier': + return evaluateIdentifier(node as Identifier, context); + case 'Literal': + return (node as Literal).value; + case 'MemberExpression': + return evaluateMemberExpression(node as MemberExpression, context); + case 'ArrowFunctionExpression': + return evaluateArrowFunction(node as ArrowFunctionExpression, context); + case 'BlockStatement': + return evaluateBlockStatement(node as BlockStatement, context); + case 'TemplateLiteral': + return evaluateTemplateLiteral(node as any, context); + case 'TemplateElement': + return (node as any).value.cooked; + default: + throw new Error(`Unsupported node type: ${node.type}`); + } + } + + function evaluateArrowFunction(node: ArrowFunctionExpression, context: EvaluationContext): Function { + return (...args: any[]) => { + // Create a new scope for the function execution + const functionContext: EvaluationContext = { + ...context, + scope: { ...context.scope } + }; + + // Bind parameters to arguments + node.params.forEach((param, index) => { + if (param.type === 'Identifier') { + functionContext.scope[param.name] = args[index]; + } else { + throw new Error('Only simple parameter names are supported'); + } + }); + + // Handle both expression and block body + if (node.body.type === 'BlockStatement') { + return evaluateBlockStatement(node.body, functionContext); + } else { + return evaluateNode(node.body, functionContext); + } + }; + } + + function evaluateBlockStatement(node: BlockStatement, context: EvaluationContext): any { + let result: any; + for (const statement of node.body) { + result = evaluateNode(statement, context); + } + return result; // Returns the value of the last statement + } + + function evaluateTemplateLiteral(node: TemplateLiteral, context: EvaluationContext): string { + let result = ''; + const expressions = node.expressions; + const quasis = node.quasis; + + for (let i = 0; i < quasis.length; i++) { + // Add the template string part + result += evaluateNode(quasis[i], context); + + // Add the expression value if there is one + if (i < expressions.length) { + const value = evaluateNode(expressions[i], context); + result += value != null ? String(value) : ''; + } + } + + return result; + } + + function evaluateIdentifier(node: Identifier, context: EvaluationContext): any { + const varName = node.name; + // Check scope first, then allowed variables + if (context.scope.hasOwnProperty(varName)) { + return context.scope[varName]; + } + if (context.allowedVariables.hasOwnProperty(varName)) { + return context.allowedVariables[varName]; + } + throw new Error(`Variable "${varName}" is not allowed`); + } + + function evaluateMemberExpression(node: MemberExpression, context: EvaluationContext): any { + // Evaluate the object part of the member expression + const object = node.object.type === 'MemberExpression' + ? evaluateMemberExpression(node.object, context) + : node.object.type === 'Identifier' + ? evaluateIdentifier(node.object, context) + : evaluateNode(node.object, context); + + if (object == null) { + throw new Error('Cannot access properties of null or undefined'); + } + + // Handle computed (bracket notation) access + if (node.computed) { + const propertyValue = evaluateNode(node.property, context); + if (typeof propertyValue !== 'number' && typeof propertyValue !== 'string') { + throw new Error('Property access must use number or string'); + } + return object[propertyValue]; + } + + // Handle dot notation access + if (node.property.type === 'Identifier') { + return object[node.property.name]; + } + + throw new Error('Invalid property access'); + } + + function evaluateObject(node: ObjectExpression, context: EvaluationContext): Record { + const result: Record = {}; + + for (const prop of node.properties) { + const property = prop as Property; + const key = property.key.type === 'Identifier' ? + property.key.name : + (property.key as Literal).value; + + result[key as string] = evaluateNode(property.value, context); + } + + return result; + } + + function evaluateArray(node: ArrayExpression, context: EvaluationContext): any[] { + return node.elements.map(element => + element ? evaluateNode(element, context) : null + ); + } + + function evaluateCall(node: CallExpression, context: EvaluationContext): any { + let func: Function; + + if (node.callee.type === 'Identifier') { + const callee = node.callee.name; + if (!context.allowedFunctions[callee]) { + throw new Error(`Function "${callee}" is not allowed`); + } + func = context.allowedFunctions[callee]; + } else if (node.callee.type === 'ArrowFunctionExpression') { + func = evaluateArrowFunction(node.callee as ArrowFunctionExpression, context); + } else { + throw new Error('Unsupported function call type'); + } + + const args = node.arguments.map(arg => evaluateNode(arg, context)); + return func(...args); + } + + const expressionStatement = ast.body[0]; + if (!expressionStatement || expressionStatement.type !== 'ExpressionStatement') { + throw new Error('Invalid input structure'); + } + + return evaluateNode(expressionStatement.expression, context); +} \ No newline at end of file diff --git a/src/utils/prepareDataVariables.test.ts b/src/utils/prepareDataVariables.test.ts new file mode 100644 index 0000000..f1ca3df --- /dev/null +++ b/src/utils/prepareDataVariables.test.ts @@ -0,0 +1,32 @@ +import { prepareDataVariables } from "./prepareDataVariables" + +describe('prepare data variables', () => { + it('should properly prepare variables for the dataset', () => { + const { functions, variables } = prepareDataVariables({ + data: [{a: 5, b: 9}, { a: 6, b: 10}], + columns: ['a', 'b'] + }) + expect(variables.data).toHaveLength(2) + expect(variables.columns).toHaveLength(2) + expect(variables['a']).toEqual([5, 6]) + expect(variables['b']).toEqual([9, 10]) + + expect(functions.max([1,2,3])).toEqual(3) + expect(functions.min([1,2,3])).toEqual(1) + + expect(functions.mean([1, 2, 3])).toEqual(2) + expect(functions.column('a')).toEqual([5,6]) + expect(functions.array(functions.column('a'), functions.column('b'))).toEqual([[5, 9], [6, 10]]) + + // Assemble and Assemble Objects + const { assemble, assembleObjects } = functions + const result = [ + { id: 1, value: 50 }, + { id: 2, value: 51 }, + { id: 3, value: 52 } + ] + expect(assembleObjects({ key: 'id', values: [1,2,3]}, { key: 'value', values: [50, 51, 52 ]})).toEqual(result) + + expect(assemble({ id: [1,2,3], value: [50, 51, 52]})).toEqual(result) + }) +}) \ No newline at end of file diff --git a/src/utils/prepareDataVariables.ts b/src/utils/prepareDataVariables.ts new file mode 100644 index 0000000..9d7dd63 --- /dev/null +++ b/src/utils/prepareDataVariables.ts @@ -0,0 +1,58 @@ +import { min, max, uniq, uniqBy, mean } from 'lodash' + +interface Config { + data: Record[]; + columns: string[]; +} + +export function prepareDataVariables({ data, columns }: Config) { + const column = (f: string) => { + return data.map((d: any) => d[f]) + } + + function array(...arrays: T[][]): T[][] { + const minLength = Math.min(...arrays.map(arr => arr.length)); + + return Array.from({ length: minLength }, (_, i) => + arrays.map(arr => arr[i]) + ); + } + + interface ValueDefinition { + key: string; + values: any[]; + } + + function assembleObjects(...definitions: ValueDefinition[]): Record[] { + const minLength = Math.min(...definitions.map(def => def.values.length)); + + return Array.from({ length: minLength }, (_, index) => { + return definitions.reduce((obj, def) => { + obj[def.key] = def.values[index]; + return obj; + }, {} as Record); + }); + } + + function assemble(def: Record): Record[] { + const definitions = Object.values(def) + const minLength = Math.min(...definitions.map(def => def.length)); + + return Array.from({ length: minLength }, (_, index) => { + return Object.entries(def).reduce((obj, [key, value]) => { + obj[key] = value[index] + return obj; + }, {} as Record); + }); + } + + const columnsData: Record = columns.reduce((acc, col) => ({ + ...acc, + [col]: column(col) + }), {}) + + return { + functions: { column, array, assembleObjects, min, max, uniq, uniqBy, assemble, mean }, + variables: { ...columnsData, data, columns } as Record + } +} \ No newline at end of file diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..7e497fa --- /dev/null +++ b/styles.css @@ -0,0 +1,11 @@ +.sqlseal-charts-container { + display: grid; + justify-content: center; + width: 100%; + aspect-ratio: 16 / 9; +} + +.sqlseal-charts-container > div { + width: 100%; + height: 100%; +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..12a65f1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "inlineSourceMap": true, + "inlineSources": true, + "module": "ESNext", + "target": "ES6", + "allowJs": true, + "noImplicitAny": true, + "moduleResolution": "node", + "importHelpers": true, + "isolatedModules": true, + "strictNullChecks": true, + "lib": [ + "DOM", + "ES5", + "ES6", + "ES7" + ] + }, + "include": [ + "**/*.ts" + ] +} \ No newline at end of file diff --git a/version-bump.mjs b/version-bump.mjs new file mode 100644 index 0000000..d409fa0 --- /dev/null +++ b/version-bump.mjs @@ -0,0 +1,14 @@ +import { readFileSync, writeFileSync } from "fs"; + +const targetVersion = process.env.npm_package_version; + +// read minAppVersion from manifest.json and bump version to target version +let manifest = JSON.parse(readFileSync("manifest.json", "utf8")); +const { minAppVersion } = manifest; +manifest.version = targetVersion; +writeFileSync("manifest.json", JSON.stringify(manifest, null, "\t")); + +// update versions.json with target version and minAppVersion from manifest.json +let versions = JSON.parse(readFileSync("versions.json", "utf8")); +versions[targetVersion] = minAppVersion; +writeFileSync("versions.json", JSON.stringify(versions, null, "\t")); diff --git a/versions.json b/versions.json new file mode 100644 index 0000000..37d5abe --- /dev/null +++ b/versions.json @@ -0,0 +1,3 @@ +{ + "0.1.0": "0.15.0" +} \ No newline at end of file