From 7144cc0126ba79e85e3fc28f1c39981dd0cae431 Mon Sep 17 00:00:00 2001 From: Nicholas Bollweg Date: Tue, 2 May 2023 09:10:48 -0500 Subject: [PATCH] Postmortem for 0.1.0 (#6) --- .github/workflows/ci.yml | 43 +- CHANGELOG.md | 4 + README.md | 44 +- docs/_static/img/anvil.svg | 3 + docs/conf.py | 6 + docs/reference/api.md | 2 +- docs/reference/schema.md | 2 +- examples/py-js-web/.gitignore | 2 + examples/py-js-web/environment.yml | 2 +- examples/py-js-web/package.json | 8 +- examples/py-js-web/pyproject.toml | 5 +- examples/py-js-web/yarn.lock | 1429 ---------------------------- pyproject.toml | 24 +- src/doitoml/config.py | 117 +-- src/doitoml/schema/__init__.py | 87 -- src/doitoml/schema/validator.py | 88 ++ src/doitoml/utils/json.py | 11 +- test/test_examples.py | 11 +- test/test_schema.py | 5 +- 19 files changed, 268 insertions(+), 1625 deletions(-) create mode 100644 docs/_static/img/anvil.svg delete mode 100644 examples/py-js-web/yarn.lock create mode 100644 src/doitoml/schema/validator.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4036f6a..7c00589 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,8 @@ jobs: matrix: os: [ubuntu] python-version: ["3.11"] + outputs: + wheel: ${{ steps.wheel.outputs.wheel }} steps: - uses: actions/checkout@v3 @@ -71,11 +73,15 @@ jobs: run: doit list --all --status | sort if: always() - - name: Upload (dist) + - name: upload (dist) uses: actions/upload-artifact@v3 with: name: doitoml-dist-${{ github.run_number }} path: ./dist + - id: wheel + name: get wheel name + run: | + echo "wheel=$(ls dist/*.whl)" >> $GITHUB_OUTPUT docs: name: docs @@ -129,7 +135,7 @@ jobs: os: ["ubuntu", "macos", "windows"] python-version: ["3.8", "3.11"] env: - SKIP_CODEGEN: 1 + DOITOML_SKIP_CODEGEN: 1 steps: - name: configure line endings run: | @@ -188,3 +194,36 @@ jobs: - name: Rename uncached conda packages shell: bash run: mv "${CONDA_PKGS_DIR}" "${CONDA_PKGS_DIR}_do_not_cache" + + smoke: + runs-on: ${{ matrix.os }}-latest + needs: [build] + name: smoke (${{ matrix.os }} ${{ matrix.python-version }}) + strategy: + max-parallel: 2 + fail-fast: false + matrix: + os: ["ubuntu", "macos", "windows"] + python-version: ["3.11"] + steps: + - name: download (dist) + uses: actions/download-artifact@v3 + with: + name: doitoml-dist-${{ github.run_number }} + path: ./dist + + - name: setup (python) + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + architecture: x64 + + - name: install dist + run: | + ls "${{ needs.build.outputs.wheel }}" || dir "${{ needs.build.outputs.wheel }}" + pip install -vv "${{ needs.build.outputs.wheel }}" + pip check + + - name: cli smoke test + run: | + python -c "__import__('doitoml')" diff --git a/CHANGELOG.md b/CHANGELOG.md index ecd95ea..68ce14e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.1.1 + +- fix schema import + ## 0.1.0 - initial release diff --git a/README.md b/README.md index 69b0d3c..5ec4dc2 100644 --- a/README.md +++ b/README.md @@ -2,34 +2,51 @@ > Load declarative tasks for [doit] from TOML, JSON, YAML, and other files. +| docs | install | build | +| :-------------------------: | :----------------------------------------------------------------------------------------: | :----------------------------------: | +| [![docs][docs-badge]][docs] | [![install from pypi][pypi-badge]][pypi] [![install from conda-forge][conda-badge]][conda] | [![build][workflow-badge]][workflow] | + +> See the [full documentation][docs] for more information. + ## Install -> > **TBD** for now, see the [contributing guide] for a development install. -> -> | `pip` | `conda` (or `mamba`, `micromamba`) | -> | :-------------------: | :------------------------------------: | -> | `pip install doitoml` | `conda install -c conda-forge doitoml` | +| `pip` | `conda` (or `mamba`, `micromamba`) | +| :-------------------: | :------------------------------------: | +| `pip install doitoml` | `conda install -c conda-forge doitoml` | ## Features - **declarative** automation in a **single** `pyproject.toml`, or... - - well-known configuration paths like `package.json` - - any number of namespaced TOML, JSON, or YAML files + - other well-known configuration paths like `package.json` + - any number of namespaced TOML, JSON, [YAML](#extras) files - from any key inside them - augment and simplify existing `dodo.py` workflows - reuse and transform **paths** and shell tokens - use **globs** and transforms to capture relationships between transformed files - flexibly configure **environment** variables -- use **templates** like Jinja2 and JSON-e for advanced use cases - user-defined Python-based **actions** and **up-to-date** checkers - control the **working directory** and **log paths** of processes and actions +- use [**templates**](#extras) like Jinja2 and JSON-e for advanced use cases - **extensibility** in any part of the task definition process - all core functionality implemented as `entry_point`-based **plugins** +### Extras + +These features require additional `pip` or `conda` packages + +| `pip` | `conda` | feature | +| --------------------: | ------------------------- | ------------------------------ | +| `doitoml[all]` | `doitoml-with-all` | all optional features | +| `doitoml[jinja2]` | `doitoml-with-jinja2` | Jinja2 task templates | +| `doitoml[json-e]` | `doitoml-with-json-e` | JSON-e task templates | +| `doitoml[jsonschema]` | `doitoml-with-jsonschema` | extra configuration validation | +| `doitoml[yaml]` | `doitoml-with-yaml` | YAML-based task sources | + ## Usage `doitoml` provides no additional command line abilities, and is meant to drop in to the -existing `doit` CLI. +existing [`doit run`](https://pydoit.org/cmd-run.html) CLI and +[other commands](https://pydoit.org/cmd-other.html). ### A Simple Example @@ -97,3 +114,12 @@ do everything _The Hard Way_: [docs]: https://doitoml.rtfd.io [doit]: https://github.com/pydoit/doit [github]: https://github.com/deathbeds/doitoml +[docs-badge]: https://readthedocs.org/projects/doitoml/badge/?version=latest +[conda-badge]: https://img.shields.io/conda/vn/conda-forge/doitoml +[conda]: https://anaconda.org/conda-forge/doitoml +[pypi-badge]: https://img.shields.io/pypi/v/doitoml +[pypi]: https://pypi.org/project/doitoml +[workflow-badge]: + https://github.com/deathbeds/doitoml/actions/workflows/ci.yml/badge.svg?branch=main +[workflow]: + https://github.com/deathbeds/doitoml/actions/workflows/ci.yml?query=branch%3Amain diff --git a/docs/_static/img/anvil.svg b/docs/_static/img/anvil.svg new file mode 100644 index 0000000..d21bbd7 --- /dev/null +++ b/docs/_static/img/anvil.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/conf.py b/docs/conf.py index 712f88e..f201c2c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -117,6 +117,12 @@ def transform_add_class(self: Any, schema: Any) -> Tuple[Any, Any]: "url": PROJ_DATA["project"]["urls"]["PyPI"], "icon": "fa-brands fa-python", }, + { + "name": "conda-forge", + "url": "https://github.com/conda-forge/doitoml-feedstock#about-doitoml", + "icon": "_static/img/anvil.svg", + "type": "local", + }, ], "footer_end": ["mermaid10"], } diff --git a/docs/reference/api.md b/docs/reference/api.md index 3fca3b8..9a508c8 100644 --- a/docs/reference/api.md +++ b/docs/reference/api.md @@ -23,7 +23,7 @@ ```{eval-rst} .. currentmodule:: doitoml -.. automodule:: doitoml.schema +.. automodule:: doitoml.schema.validator ``` ### Schema Types diff --git a/docs/reference/schema.md b/docs/reference/schema.md index 73e9057..c2db6c3 100644 --- a/docs/reference/schema.md +++ b/docs/reference/schema.md @@ -1,5 +1,5 @@ # Schema ```{eval-rst} -.. jsonschema:: doitoml.schema.DOITOML_SCHEMA +.. jsonschema:: doitoml.schema.validator.DOITOML_SCHEMA ``` diff --git a/examples/py-js-web/.gitignore b/examples/py-js-web/.gitignore index 8662b2c..3799120 100644 --- a/examples/py-js-web/.gitignore +++ b/examples/py-js-web/.gitignore @@ -8,3 +8,5 @@ dist lib node_modules static +# a real project _would_ check this ins +yarn.lock diff --git a/examples/py-js-web/environment.yml b/examples/py-js-web/environment.yml index fa3e9b7..2f07172 100644 --- a/examples/py-js-web/environment.yml +++ b/examples/py-js-web/environment.yml @@ -10,7 +10,7 @@ dependencies: # build - flit - python-build - - yarn >=3,<4 + - yarn ==3.5 # test - pytest-cov - pytest-html diff --git a/examples/py-js-web/package.json b/examples/py-js-web/package.json index 7870813..6392a0d 100644 --- a/examples/py-js-web/package.json +++ b/examples/py-js-web/package.json @@ -16,7 +16,8 @@ "doitoml": { "env": { "EXAMPLE_JS_VERSION": ":get::json::package.json::version", - "EXAMPLE_JS_DIST": "deathbeds-example-frontend-${EXAMPLE_JS_VERSION}.tgz" + "EXAMPLE_JS_DIST": "deathbeds-example-frontend-${EXAMPLE_JS_VERSION}.tgz", + "YARN_ENABLE_IMMUTABLE_INSTALLS": "false" }, "prefix": "frontend", "paths": { @@ -70,10 +71,11 @@ ], "file_dep": [ "::backend::venv_history", - "::y_lock" + "::pj" ], "targets": [ - "::y_install_state" + "::y_install_state", + "::y_lock" ], "actions": [ [ diff --git a/examples/py-js-web/pyproject.toml b/examples/py-js-web/pyproject.toml index ce54294..5caebd4 100644 --- a/examples/py-js-web/pyproject.toml +++ b/examples/py-js-web/pyproject.toml @@ -104,8 +104,8 @@ file_dep = ["::all_dist"] targets = ["::dist_hash"] [tool.__doitoml_tests__.steps.00_list] -after = {files = {"*" = 10}} -before = {files = {"**/*" = 17, "*" = 10}} +after = {files = {"*" = 9}} +before = {files = {"**/*" = 16, "*" = 9}} rc = 0 run = ["doit", "list"] tasks = 10 @@ -117,6 +117,7 @@ run = ["doit"] [tool.__doitoml_tests__.steps.01_run.after.files] "*" = 12 +"yarn.lock" = 1 "dist/*.tar.gz" = 1 "dist/*.whl" = 1 "dist/SHA256SUMS" = 1 diff --git a/examples/py-js-web/yarn.lock b/examples/py-js-web/yarn.lock deleted file mode 100644 index 5298b5f..0000000 --- a/examples/py-js-web/yarn.lock +++ /dev/null @@ -1,1429 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 6 - cacheKey: 8 - -"@deathbeds/example-frontend@workspace:.": - version: 0.0.0-use.local - resolution: "@deathbeds/example-frontend@workspace:." - dependencies: - html-webpack-plugin: ^5.5.0 - typescript: ~5.0.0 - webpack: ^5.76.3 - webpack-cli: ^5.0.1 - languageName: unknown - linkType: soft - -"@discoveryjs/json-ext@npm:^0.5.0": - version: 0.5.7 - resolution: "@discoveryjs/json-ext@npm:0.5.7" - checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.0": - version: 0.3.3 - resolution: "@jridgewell/gen-mapping@npm:0.3.3" - dependencies: - "@jridgewell/set-array": ^1.0.1 - "@jridgewell/sourcemap-codec": ^1.4.10 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:3.1.0": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e - languageName: node - linkType: hard - -"@jridgewell/source-map@npm:^0.3.2": - version: 0.3.3 - resolution: "@jridgewell/source-map@npm:0.3.3" - dependencies: - "@jridgewell/gen-mapping": ^0.3.0 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: ae1302146339667da5cd6541260ecbef46ae06819a60f88da8f58b3e64682f787c09359933d050dea5d2173ea7fa40f40dd4d4e7a8d325c5892cccd99aaf8959 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:1.4.14": - version: 1.4.14 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" - checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.18 - resolution: "@jridgewell/trace-mapping@npm:0.3.18" - dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 - checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 - languageName: node - linkType: hard - -"@types/eslint-scope@npm:^3.7.3": - version: 3.7.4 - resolution: "@types/eslint-scope@npm:3.7.4" - dependencies: - "@types/eslint": "*" - "@types/estree": "*" - checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 - languageName: node - linkType: hard - -"@types/eslint@npm:*": - version: 8.37.0 - resolution: "@types/eslint@npm:8.37.0" - dependencies: - "@types/estree": "*" - "@types/json-schema": "*" - checksum: 06d3b3fba12004294591b5c7a52e3cec439472195da54e096076b1f2ddfbb8a445973b9681046dd530a6ac31eca502f635abc1e3ce37d03513089358e6f822ee - languageName: node - linkType: hard - -"@types/estree@npm:*, @types/estree@npm:^1.0.0": - version: 1.0.1 - resolution: "@types/estree@npm:1.0.1" - checksum: e9aa175eacb797216fafce4d41e8202c7a75555bc55232dee0f9903d7171f8f19f0ae7d5191bb1a88cb90e65468be508c0df850a9fb81b4433b293a5a749899d - languageName: node - linkType: hard - -"@types/html-minifier-terser@npm:^6.0.0": - version: 6.1.0 - resolution: "@types/html-minifier-terser@npm:6.1.0" - checksum: eb843f6a8d662d44fb18ec61041117734c6aae77aa38df1be3b4712e8e50ffaa35f1e1c92fdd0fde14a5675fecf457abcd0d15a01fae7506c91926176967f452 - languageName: node - linkType: hard - -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8": - version: 7.0.11 - resolution: "@types/json-schema@npm:7.0.11" - checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 18.16.3 - resolution: "@types/node@npm:18.16.3" - checksum: 816b39d45b05ebdc6f362b630970df3f6d82f71d418a2555353522f4eeeb078fa201de5299f02c09a09faa975e43b2745fe19c263d44069f87ddf37d6c37b717 - languageName: node - linkType: hard - -"@webassemblyjs/ast@npm:1.11.5, @webassemblyjs/ast@npm:^1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/ast@npm:1.11.5" - dependencies: - "@webassemblyjs/helper-numbers": 1.11.5 - "@webassemblyjs/helper-wasm-bytecode": 1.11.5 - checksum: 7df16d8d4364d40e2506776330f8114fddc6494e6e18e8d5ec386312a0881a564cef136b0a74cc4a6ba284e2ff6bad890ddc029a0ba6cf45cc15186e638db118 - languageName: node - linkType: hard - -"@webassemblyjs/floating-point-hex-parser@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.5" - checksum: a6f35e3035a1ec4e446fa43da01539f3ed7e0f4b53d152f36ff34be1b63b08d86c4b09b6af375c95472a75f0c37b3b98b07199d157e767b8b3274e7a3962890c - languageName: node - linkType: hard - -"@webassemblyjs/helper-api-error@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/helper-api-error@npm:1.11.5" - checksum: 717a6ffb3283bd24a7b74710c9bd3d71ec331a26c15446441af19fae9f087e36acb8dcf25b900b6897a1d1eff838e463fe678d66281e7eccee9a3ac0e3447372 - languageName: node - linkType: hard - -"@webassemblyjs/helper-buffer@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/helper-buffer@npm:1.11.5" - checksum: 2c0925b1c3c9b115c183b88d9cf1a12e87fa4fc83ef985aa2a65d72cda543eba6b73b378d231b4feb810b17d3aa6cd297bd603199854346f8a50e3458d7ebbc0 - languageName: node - linkType: hard - -"@webassemblyjs/helper-numbers@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/helper-numbers@npm:1.11.5" - dependencies: - "@webassemblyjs/floating-point-hex-parser": 1.11.5 - "@webassemblyjs/helper-api-error": 1.11.5 - "@xtuc/long": 4.2.2 - checksum: 49c8bbf561d4df38009e38e6357c396f4454773fd31a03579a8e050a2b28053f5c47f675f00a37f79a65082c938c2159fa603049688ac01b1bafdb472c21110c - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-bytecode@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.5" - checksum: 4e868de92587e131a7f22bc4eb44eee60c178d4c2c3eeabcb973b4eac73ec477f25d5f838394797265dbe4b600e781c6e150c762a45f249b94bf0711e73409a7 - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-section@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.5" - dependencies: - "@webassemblyjs/ast": 1.11.5 - "@webassemblyjs/helper-buffer": 1.11.5 - "@webassemblyjs/helper-wasm-bytecode": 1.11.5 - "@webassemblyjs/wasm-gen": 1.11.5 - checksum: 1752d7e0dbbf236a5cdc2257e1626a3562bfb0a7d2e967dc5e798c73088f18f20a991491565e2ffee61615f08035b4760e7aa080380bb60b86b393b6eb7486ae - languageName: node - linkType: hard - -"@webassemblyjs/ieee754@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/ieee754@npm:1.11.5" - dependencies: - "@xtuc/ieee754": ^1.2.0 - checksum: 68a855a3e3dd488fff4d2d100e491cb6ac07f728c9432f3216b8e1bb0a374b397b0a5f58fd3b71195e525d49c0c827db15c18897e1c220c629e759b19978e64c - languageName: node - linkType: hard - -"@webassemblyjs/leb128@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/leb128@npm:1.11.5" - dependencies: - "@xtuc/long": 4.2.2 - checksum: 555314708b6615c203c31a9dd810141c6de728e0043c2169ca69905ccf4d8603102994cb74ac5d057ac229bfc2be40f69cad2edd134ef2b909ef694eefe7bba6 - languageName: node - linkType: hard - -"@webassemblyjs/utf8@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/utf8@npm:1.11.5" - checksum: d8f67a5650d9bf26810da76e72d0547211a44f30f35657953f547e08185facb39ff326920bddec96d35b5cc65e4e66b1f23c6461847e2f93fad2a60b0bb20211 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-edit@npm:^1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/wasm-edit@npm:1.11.5" - dependencies: - "@webassemblyjs/ast": 1.11.5 - "@webassemblyjs/helper-buffer": 1.11.5 - "@webassemblyjs/helper-wasm-bytecode": 1.11.5 - "@webassemblyjs/helper-wasm-section": 1.11.5 - "@webassemblyjs/wasm-gen": 1.11.5 - "@webassemblyjs/wasm-opt": 1.11.5 - "@webassemblyjs/wasm-parser": 1.11.5 - "@webassemblyjs/wast-printer": 1.11.5 - checksum: 790142a1e282848201c7b68860aabc0141ee44a98a62c3f0af05f8de3cc69b439c3af54ae9a06acbbfbf7fd192b30ee97fb31eda3e08973cae373534ad2135c7 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-gen@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/wasm-gen@npm:1.11.5" - dependencies: - "@webassemblyjs/ast": 1.11.5 - "@webassemblyjs/helper-wasm-bytecode": 1.11.5 - "@webassemblyjs/ieee754": 1.11.5 - "@webassemblyjs/leb128": 1.11.5 - "@webassemblyjs/utf8": 1.11.5 - checksum: 0122df4e5ce52d873f19f34b3ebe8237072e9e6a69667cbec42a2d98ba49f85ea2ed3d935195e6a7ad4f64b9dd7da42883f057fe1103d2062bc90f3428b063fe - languageName: node - linkType: hard - -"@webassemblyjs/wasm-opt@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/wasm-opt@npm:1.11.5" - dependencies: - "@webassemblyjs/ast": 1.11.5 - "@webassemblyjs/helper-buffer": 1.11.5 - "@webassemblyjs/wasm-gen": 1.11.5 - "@webassemblyjs/wasm-parser": 1.11.5 - checksum: f9416b0dece071e308616fb30e560f0c3c53b5bb23cc4409781b8c47d31e935b27e9a248c65aee9dd9136271e37a4c5cb0971b27e5adf623020fbb298423fe55 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-parser@npm:1.11.5, @webassemblyjs/wasm-parser@npm:^1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/wasm-parser@npm:1.11.5" - dependencies: - "@webassemblyjs/ast": 1.11.5 - "@webassemblyjs/helper-api-error": 1.11.5 - "@webassemblyjs/helper-wasm-bytecode": 1.11.5 - "@webassemblyjs/ieee754": 1.11.5 - "@webassemblyjs/leb128": 1.11.5 - "@webassemblyjs/utf8": 1.11.5 - checksum: 094b3df07532cd2a1db91710622cbaf3d7467a361f9f73dc564999385a472fcc08497d8ccf9294bd7c8813d5e2056c06a81e032abb60520168899605fde9b12c - languageName: node - linkType: hard - -"@webassemblyjs/wast-printer@npm:1.11.5": - version: 1.11.5 - resolution: "@webassemblyjs/wast-printer@npm:1.11.5" - dependencies: - "@webassemblyjs/ast": 1.11.5 - "@xtuc/long": 4.2.2 - checksum: c2995224c56b403be7fce7afbb3ad6b2ceadce07a47b28bce745eabb0435fa363c0180bca907d28703ece02422d0de219e689253b55de288c79b8f92416c1d71 - languageName: node - linkType: hard - -"@webpack-cli/configtest@npm:^2.0.1": - version: 2.0.1 - resolution: "@webpack-cli/configtest@npm:2.0.1" - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - checksum: 15d0ca835f2e16ec99e9f295f07b676435b9e706d7700df0ad088692fea065e34772fc44b96a4f6a86178b9ca8cf1ff941fbce15269587cf0925d70b18928cea - languageName: node - linkType: hard - -"@webpack-cli/info@npm:^2.0.1": - version: 2.0.1 - resolution: "@webpack-cli/info@npm:2.0.1" - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - checksum: b8fba49fee10d297c2affb0b064c9a81e9038d75517c6728fb85f9fb254cae634e5d33e696dac5171e6944ae329d85fddac72f781c7d833f7e9dfe43151ce60d - languageName: node - linkType: hard - -"@webpack-cli/serve@npm:^2.0.2": - version: 2.0.2 - resolution: "@webpack-cli/serve@npm:2.0.2" - peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - peerDependenciesMeta: - webpack-dev-server: - optional: true - checksum: f74c8cc7d3e4de58e1261c6d09af0e8b8a23f53ada4ec336140f30fa16d57d9f56de954e87125947c090c06a30b10a243ca1e093c3e4bd60ba3f19c852cb20b7 - languageName: node - linkType: hard - -"@xtuc/ieee754@npm:^1.2.0": - version: 1.2.0 - resolution: "@xtuc/ieee754@npm:1.2.0" - checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a - languageName: node - linkType: hard - -"@xtuc/long@npm:4.2.2": - version: 4.2.2 - resolution: "@xtuc/long@npm:4.2.2" - checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec - languageName: node - linkType: hard - -"acorn-import-assertions@npm:^1.7.6": - version: 1.8.0 - resolution: "acorn-import-assertions@npm:1.8.0" - peerDependencies: - acorn: ^8 - checksum: 5c4cf7c850102ba7ae0eeae0deb40fb3158c8ca5ff15c0bca43b5c47e307a1de3d8ef761788f881343680ea374631ae9e9615ba8876fee5268dbe068c98bcba6 - languageName: node - linkType: hard - -"acorn@npm:^8.5.0, acorn@npm:^8.7.1": - version: 8.8.2 - resolution: "acorn@npm:8.8.2" - bin: - acorn: bin/acorn - checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 - languageName: node - linkType: hard - -"ajv-keywords@npm:^3.5.2": - version: 3.5.2 - resolution: "ajv-keywords@npm:3.5.2" - peerDependencies: - ajv: ^6.9.1 - checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 - languageName: node - linkType: hard - -"ajv@npm:^6.12.5": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: ^3.1.1 - fast-json-stable-stringify: ^2.0.0 - json-schema-traverse: ^0.4.1 - uri-js: ^4.2.2 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"boolbase@npm:^1.0.0": - version: 1.0.0 - resolution: "boolbase@npm:1.0.0" - checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 - languageName: node - linkType: hard - -"browserslist@npm:^4.14.5": - version: 4.21.5 - resolution: "browserslist@npm:4.21.5" - dependencies: - caniuse-lite: ^1.0.30001449 - electron-to-chromium: ^1.4.284 - node-releases: ^2.0.8 - update-browserslist-db: ^1.0.10 - bin: - browserslist: cli.js - checksum: 9755986b22e73a6a1497fd8797aedd88e04270be33ce66ed5d85a1c8a798292a65e222b0f251bafa1c2522261e237d73b08b58689d4920a607e5a53d56dc4706 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - -"camel-case@npm:^4.1.2": - version: 4.1.2 - resolution: "camel-case@npm:4.1.2" - dependencies: - pascal-case: ^3.1.2 - tslib: ^2.0.3 - checksum: bcbd25cd253b3cbc69be3f535750137dbf2beb70f093bdc575f73f800acc8443d34fd52ab8f0a2413c34f1e8203139ffc88428d8863e4dfe530cfb257a379ad6 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001449": - version: 1.0.30001481 - resolution: "caniuse-lite@npm:1.0.30001481" - checksum: 8200a043c191b4fd4fe0beda37a58fd61869c895ab93f87bdd0420e5927453f48434d716ce9da8552ff6c3ecc4dcd1366354cda3a134f3cc844af741574a7cab - languageName: node - linkType: hard - -"chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 - languageName: node - linkType: hard - -"clean-css@npm:^5.2.2": - version: 5.3.2 - resolution: "clean-css@npm:5.3.2" - dependencies: - source-map: ~0.6.0 - checksum: 8787b281acc9878f309b5f835d410085deedfd4e126472666773040a6a8a72f472a1d24185947d23b87b1c419bf2c5ed429395d5c5ff8279c98b05d8011e9758 - languageName: node - linkType: hard - -"clone-deep@npm:^4.0.1": - version: 4.0.1 - resolution: "clone-deep@npm:4.0.1" - dependencies: - is-plain-object: ^2.0.4 - kind-of: ^6.0.2 - shallow-clone: ^3.0.0 - checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 - languageName: node - linkType: hard - -"colorette@npm:^2.0.14": - version: 2.0.20 - resolution: "colorette@npm:2.0.20" - checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d - languageName: node - linkType: hard - -"commander@npm:^10.0.1": - version: 10.0.1 - resolution: "commander@npm:10.0.1" - checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 - languageName: node - linkType: hard - -"commander@npm:^2.20.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e - languageName: node - linkType: hard - -"commander@npm:^8.3.0": - version: 8.3.0 - resolution: "commander@npm:8.3.0" - checksum: 0f82321821fc27b83bd409510bb9deeebcfa799ff0bf5d102128b500b7af22872c0c92cb6a0ebc5a4cf19c6b550fba9cedfa7329d18c6442a625f851377bacf0 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: ^3.1.0 - shebang-command: ^2.0.0 - which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 - languageName: node - linkType: hard - -"css-select@npm:^4.1.3": - version: 4.3.0 - resolution: "css-select@npm:4.3.0" - dependencies: - boolbase: ^1.0.0 - css-what: ^6.0.1 - domhandler: ^4.3.1 - domutils: ^2.8.0 - nth-check: ^2.0.1 - checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 - languageName: node - linkType: hard - -"css-what@npm:^6.0.1": - version: 6.1.0 - resolution: "css-what@npm:6.1.0" - checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe - languageName: node - linkType: hard - -"dom-converter@npm:^0.2.0": - version: 0.2.0 - resolution: "dom-converter@npm:0.2.0" - dependencies: - utila: ~0.4 - checksum: ea52fe303f5392e48dea563abef0e6fb3a478b8dbe3c599e99bb5d53981c6c38fc4944e56bb92a8ead6bb989d10b7914722ae11febbd2fd0910e33b9fc4aaa77 - languageName: node - linkType: hard - -"dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" - dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.2.0 - entities: ^2.0.0 - checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 - languageName: node - linkType: hard - -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" - dependencies: - domelementtype: ^2.2.0 - checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa - languageName: node - linkType: hard - -"domutils@npm:^2.5.2, domutils@npm:^2.8.0": - version: 2.8.0 - resolution: "domutils@npm:2.8.0" - dependencies: - dom-serializer: ^1.0.1 - domelementtype: ^2.2.0 - domhandler: ^4.2.0 - checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 - languageName: node - linkType: hard - -"dot-case@npm:^3.0.4": - version: 3.0.4 - resolution: "dot-case@npm:3.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - checksum: a65e3519414856df0228b9f645332f974f2bf5433370f544a681122eab59e66038fc3349b4be1cdc47152779dac71a5864f1ccda2f745e767c46e9c6543b1169 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.284": - version: 1.4.377 - resolution: "electron-to-chromium@npm:1.4.377" - checksum: a38a09385701f1dd74b849f6265ed0dd9ab973b1a6acea78825c2dc162948cc795797e0aacea0176dd0c4d891decc4b81838a0996351dd294ffa5f08163d78d6 - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.13.0": - version: 5.13.0 - resolution: "enhanced-resolve@npm:5.13.0" - dependencies: - graceful-fs: ^4.2.4 - tapable: ^2.2.0 - checksum: 76d6844c4393d76beed5b3ce6cf5a98dee3ad5c84a9887f49ccde1224e3b7af201dfbd5a57ebf2b49f623b74883df262d50ff480d3cc02fc2881fc58b84e1bbe - languageName: node - linkType: hard - -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 - languageName: node - linkType: hard - -"envinfo@npm:^7.7.3": - version: 7.8.1 - resolution: "envinfo@npm:7.8.1" - bin: - envinfo: dist/cli.js - checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648 - languageName: node - linkType: hard - -"es-module-lexer@npm:^1.2.1": - version: 1.2.1 - resolution: "es-module-lexer@npm:1.2.1" - checksum: c4145b853e1491eaa5d591e4580926d242978c38071ad3d09165c3b6d50314cc0ae3bf6e1dec81a9e53768b9299df2063d2e4a67d7742a5029ddeae6c4fc26f0 - languageName: node - linkType: hard - -"escalade@npm:^3.1.1": - version: 3.1.1 - resolution: "escalade@npm:3.1.1" - checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 - languageName: node - linkType: hard - -"eslint-scope@npm:5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^4.1.1 - checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: ^5.2.0 - checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 - languageName: node - linkType: hard - -"estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"events@npm:^3.2.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb - languageName: node - linkType: hard - -"fastest-levenshtein@npm:^1.0.12": - version: 1.0.16 - resolution: "fastest-levenshtein@npm:1.0.16" - checksum: a78d44285c9e2ae2c25f3ef0f8a73f332c1247b7ea7fb4a191e6bb51aa6ee1ef0dfb3ed113616dcdc7023e18e35a8db41f61c8d88988e877cf510df8edafbc71 - languageName: node - linkType: hard - -"find-up@npm:^4.0.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a - languageName: node - linkType: hard - -"glob-to-regexp@npm:^0.4.1": - version: 0.4.1 - resolution: "glob-to-regexp@npm:0.4.1" - checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.9": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad - languageName: node - linkType: hard - -"has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: ^1.1.1 - checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 - languageName: node - linkType: hard - -"he@npm:^1.2.0": - version: 1.2.0 - resolution: "he@npm:1.2.0" - bin: - he: bin/he - checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 - languageName: node - linkType: hard - -"html-minifier-terser@npm:^6.0.2": - version: 6.1.0 - resolution: "html-minifier-terser@npm:6.1.0" - dependencies: - camel-case: ^4.1.2 - clean-css: ^5.2.2 - commander: ^8.3.0 - he: ^1.2.0 - param-case: ^3.0.4 - relateurl: ^0.2.7 - terser: ^5.10.0 - bin: - html-minifier-terser: cli.js - checksum: ac52c14006476f773204c198b64838477859dc2879490040efab8979c0207424da55d59df7348153f412efa45a0840a1ca3c757bf14767d23a15e3e389d37a93 - languageName: node - linkType: hard - -"html-webpack-plugin@npm:^5.5.0": - version: 5.5.1 - resolution: "html-webpack-plugin@npm:5.5.1" - dependencies: - "@types/html-minifier-terser": ^6.0.0 - html-minifier-terser: ^6.0.2 - lodash: ^4.17.21 - pretty-error: ^4.0.0 - tapable: ^2.0.0 - peerDependencies: - webpack: ^5.20.0 - checksum: f4b43271171e6374b10a49b5231bbab94610a344d58f4f7d95cd130520feb474f98006e1ab71ea102c57fe5a107b273ff7c19e7e1bc2314d611dbb791fcc0a98 - languageName: node - linkType: hard - -"htmlparser2@npm:^6.1.0": - version: 6.1.0 - resolution: "htmlparser2@npm:6.1.0" - dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.0.0 - domutils: ^2.5.2 - entities: ^2.0.0 - checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e - languageName: node - linkType: hard - -"import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - -"interpret@npm:^3.1.1": - version: 3.1.1 - resolution: "interpret@npm:3.1.1" - checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82 - languageName: node - linkType: hard - -"is-core-module@npm:^2.12.0": - version: 2.12.0 - resolution: "is-core-module@npm:2.12.0" - dependencies: - has: ^1.0.3 - checksum: f7f7eb2ab71fd769ee9fb2385c095d503aa4b5ce0028c04557de03f1e67a87c85e5bac1f215945fc3c955867a139a415a3ec4c4234a0bffdf715232660f440a6 - languageName: node - linkType: hard - -"is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: ^3.0.1 - checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 - languageName: node - linkType: hard - -"jest-worker@npm:^27.4.5": - version: 27.5.1 - resolution: "jest-worker@npm:27.5.1" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.1": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - -"kind-of@npm:^6.0.2": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b - languageName: node - linkType: hard - -"loader-runner@npm:^4.2.0": - version: 4.3.0 - resolution: "loader-runner@npm:4.3.0" - checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - -"lodash@npm:^4.17.20, lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 - languageName: node - linkType: hard - -"lower-case@npm:^2.0.2": - version: 2.0.2 - resolution: "lower-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-types@npm:^2.1.27": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - -"neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 - languageName: node - linkType: hard - -"no-case@npm:^3.0.4": - version: 3.0.4 - resolution: "no-case@npm:3.0.4" - dependencies: - lower-case: ^2.0.2 - tslib: ^2.0.3 - checksum: 0b2ebc113dfcf737d48dde49cfebf3ad2d82a8c3188e7100c6f375e30eafbef9e9124aadc3becef237b042fd5eb0aad2fd78669c20972d045bbe7fea8ba0be5c - languageName: node - linkType: hard - -"node-releases@npm:^2.0.8": - version: 2.0.10 - resolution: "node-releases@npm:2.0.10" - checksum: d784ecde25696a15d449c4433077f5cce620ed30a1656c4abf31282bfc691a70d9618bae6868d247a67914d1be5cc4fde22f65a05f4398cdfb92e0fc83cadfbc - languageName: node - linkType: hard - -"nth-check@npm:^2.0.1": - version: 2.1.1 - resolution: "nth-check@npm:2.1.1" - dependencies: - boolbase: ^1.0.0 - checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: ^2.0.0 - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - -"param-case@npm:^3.0.4": - version: 3.0.4 - resolution: "param-case@npm:3.0.4" - dependencies: - dot-case: ^3.0.4 - tslib: ^2.0.3 - checksum: b34227fd0f794e078776eb3aa6247442056cb47761e9cd2c4c881c86d84c64205f6a56ef0d70b41ee7d77da02c3f4ed2f88e3896a8fefe08bdfb4deca037c687 - languageName: node - linkType: hard - -"pascal-case@npm:^3.1.2": - version: 3.1.2 - resolution: "pascal-case@npm:3.1.2" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - checksum: ba98bfd595fc91ef3d30f4243b1aee2f6ec41c53b4546bfa3039487c367abaa182471dcfc830a1f9e1a0df00c14a370514fa2b3a1aacc68b15a460c31116873e - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 - languageName: node - linkType: hard - -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 - languageName: node - linkType: hard - -"pretty-error@npm:^4.0.0": - version: 4.0.0 - resolution: "pretty-error@npm:4.0.0" - dependencies: - lodash: ^4.17.20 - renderkid: ^3.0.0 - checksum: a5b9137365690104ded6947dca2e33360bf55e62a4acd91b1b0d7baa3970e43754c628cc9e16eafbdd4e8f8bcb260a5865475d4fc17c3106ff2d61db4e72cdf3 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 - languageName: node - linkType: hard - -"randombytes@npm:^2.1.0": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: ^5.1.0 - checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 - languageName: node - linkType: hard - -"rechoir@npm:^0.8.0": - version: 0.8.0 - resolution: "rechoir@npm:0.8.0" - dependencies: - resolve: ^1.20.0 - checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 - languageName: node - linkType: hard - -"relateurl@npm:^0.2.7": - version: 0.2.7 - resolution: "relateurl@npm:0.2.7" - checksum: 5891e792eae1dfc3da91c6fda76d6c3de0333a60aa5ad848982ebb6dccaa06e86385fb1235a1582c680a3d445d31be01c6bfc0804ebbcab5aaf53fa856fde6b6 - languageName: node - linkType: hard - -"renderkid@npm:^3.0.0": - version: 3.0.0 - resolution: "renderkid@npm:3.0.0" - dependencies: - css-select: ^4.1.3 - dom-converter: ^0.2.0 - htmlparser2: ^6.1.0 - lodash: ^4.17.21 - strip-ansi: ^6.0.1 - checksum: 77162b62d6f33ab81f337c39efce0439ff0d1f6d441e29c35183151f83041c7850774fb904da163d6c844264d440d10557714e6daa0b19e4561a5cd4ef305d41 - languageName: node - linkType: hard - -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - -"resolve@npm:^1.20.0": - version: 1.22.3 - resolution: "resolve@npm:1.22.3" - dependencies: - is-core-module: ^2.12.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: fb834b81348428cb545ff1b828a72ea28feb5a97c026a1cf40aa1008352c72811ff4d4e71f2035273dc536dcfcae20c13604ba6283c612d70fa0b6e44519c374 - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.20.0#~builtin": - version: 1.22.3 - resolution: "resolve@patch:resolve@npm%3A1.22.3#~builtin::version=1.22.3&hash=c3c19d" - dependencies: - is-core-module: ^2.12.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: ad59734723b596d0891321c951592ed9015a77ce84907f89c9d9307dd0c06e11a67906a3e628c4cae143d3e44898603478af0ddeb2bba3f229a9373efe342665 - languageName: node - linkType: hard - -"safe-buffer@npm:^5.1.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - -"schema-utils@npm:^3.1.1, schema-utils@npm:^3.1.2": - version: 3.1.2 - resolution: "schema-utils@npm:3.1.2" - dependencies: - "@types/json-schema": ^7.0.8 - ajv: ^6.12.5 - ajv-keywords: ^3.5.2 - checksum: 39683edfe3beff018cdb1ae4fa296fc55cea13a080aa2b4d9351895cd64b22ba4d87e2e548c2a2ac1bc76e60980670adb0f413a58104479f1a0c12e5663cb8ca - languageName: node - linkType: hard - -"serialize-javascript@npm:^6.0.1": - version: 6.0.1 - resolution: "serialize-javascript@npm:6.0.1" - dependencies: - randombytes: ^2.1.0 - checksum: 3c4f4cb61d0893b988415bdb67243637333f3f574e9e9cc9a006a2ced0b390b0b3b44aef8d51c951272a9002ec50885eefdc0298891bc27eb2fe7510ea87dc4f - languageName: node - linkType: hard - -"shallow-clone@npm:^3.0.0": - version: 3.0.1 - resolution: "shallow-clone@npm:3.0.1" - dependencies: - kind-of: ^6.0.2 - checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: ^3.0.0 - checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"source-map-support@npm:~0.5.20": - version: 0.5.21 - resolution: "source-map-support@npm:0.5.21" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 - languageName: node - linkType: hard - -"source-map@npm:^0.6.0, source-map@npm:~0.6.0": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 - languageName: node - linkType: hard - -"strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae - languageName: node - linkType: hard - -"tapable@npm:^2.0.0, tapable@npm:^2.1.1, tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 - languageName: node - linkType: hard - -"terser-webpack-plugin@npm:^5.3.7": - version: 5.3.7 - resolution: "terser-webpack-plugin@npm:5.3.7" - dependencies: - "@jridgewell/trace-mapping": ^0.3.17 - jest-worker: ^27.4.5 - schema-utils: ^3.1.1 - serialize-javascript: ^6.0.1 - terser: ^5.16.5 - peerDependencies: - webpack: ^5.1.0 - peerDependenciesMeta: - "@swc/core": - optional: true - esbuild: - optional: true - uglify-js: - optional: true - checksum: 095e699fdeeb553cdf2c6f75f983949271b396d9c201d7ae9fc633c45c1c1ad14c7257ef9d51ccc62213dd3e97f875870ba31550f6d4f1b6674f2615562da7f7 - languageName: node - linkType: hard - -"terser@npm:^5.10.0, terser@npm:^5.16.5": - version: 5.17.1 - resolution: "terser@npm:5.17.1" - dependencies: - "@jridgewell/source-map": ^0.3.2 - acorn: ^8.5.0 - commander: ^2.20.0 - source-map-support: ~0.5.20 - bin: - terser: bin/terser - checksum: 69b0e80e3c4084db2819de4d6ae8a2ba79f2fcd7ed6df40fe4b602ec7bfd8e889cc63c7d5268f30990ffecbf6eeda18f857adad9386fe2c2331b398d58ed855c - languageName: node - linkType: hard - -"tslib@npm:^2.0.3": - version: 2.5.0 - resolution: "tslib@npm:2.5.0" - checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 - languageName: node - linkType: hard - -"typescript@npm:~5.0.0": - version: 5.0.4 - resolution: "typescript@npm:5.0.4" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 - languageName: node - linkType: hard - -"typescript@patch:typescript@~5.0.0#~builtin": - version: 5.0.4 - resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=85af82" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: bb309d320c59a26565fb3793dba550576ab861018ff3fd1b7fccabbe46ae4a35546bc45f342c0a0b6f265c801ccdf64ffd68f548f117ceb7f0eac4b805cd52a9 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.0.10": - version: 1.0.11 - resolution: "update-browserslist-db@npm:1.0.11" - dependencies: - escalade: ^3.1.1 - picocolors: ^1.0.0 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: b98327518f9a345c7cad5437afae4d2ae7d865f9779554baf2a200fdf4bac4969076b679b1115434bd6557376bdd37ca7583d0f9b8f8e302d7d4cc1e91b5f231 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 - languageName: node - linkType: hard - -"utila@npm:~0.4": - version: 0.4.0 - resolution: "utila@npm:0.4.0" - checksum: 97ffd3bd2bb80c773429d3fb8396469115cd190dded1e733f190d8b602bd0a1bcd6216b7ce3c4395ee3c79e3c879c19d268dbaae3093564cb169ad1212d436f4 - languageName: node - linkType: hard - -"watchpack@npm:^2.4.0": - version: 2.4.0 - resolution: "watchpack@npm:2.4.0" - dependencies: - glob-to-regexp: ^0.4.1 - graceful-fs: ^4.1.2 - checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 - languageName: node - linkType: hard - -"webpack-cli@npm:^5.0.1": - version: 5.0.2 - resolution: "webpack-cli@npm:5.0.2" - dependencies: - "@discoveryjs/json-ext": ^0.5.0 - "@webpack-cli/configtest": ^2.0.1 - "@webpack-cli/info": ^2.0.1 - "@webpack-cli/serve": ^2.0.2 - colorette: ^2.0.14 - commander: ^10.0.1 - cross-spawn: ^7.0.3 - envinfo: ^7.7.3 - fastest-levenshtein: ^1.0.12 - import-local: ^3.0.2 - interpret: ^3.1.1 - rechoir: ^0.8.0 - webpack-merge: ^5.7.3 - peerDependencies: - webpack: 5.x.x - peerDependenciesMeta: - "@webpack-cli/generators": - optional: true - webpack-bundle-analyzer: - optional: true - webpack-dev-server: - optional: true - bin: - webpack-cli: bin/cli.js - checksum: 98816d84c51487b90e1008ddbcda8827dcb7ae9ab7892f4d742f0d7b93f90a4a18a6ec2671b380e5a7ee4b0917cf0c43921119419d8ba9e1b14ea060115684fd - languageName: node - linkType: hard - -"webpack-merge@npm:^5.7.3": - version: 5.8.0 - resolution: "webpack-merge@npm:5.8.0" - dependencies: - clone-deep: ^4.0.1 - wildcard: ^2.0.0 - checksum: 88786ab91013f1bd2a683834ff381be81c245a4b0f63304a5103e90f6653f44dab496a0768287f8531761f8ad957d1f9f3ccb2cb55df0de1bd9ee343e079da26 - languageName: node - linkType: hard - -"webpack-sources@npm:^3.2.3": - version: 3.2.3 - resolution: "webpack-sources@npm:3.2.3" - checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 - languageName: node - linkType: hard - -"webpack@npm:^5.76.3": - version: 5.81.0 - resolution: "webpack@npm:5.81.0" - dependencies: - "@types/eslint-scope": ^3.7.3 - "@types/estree": ^1.0.0 - "@webassemblyjs/ast": ^1.11.5 - "@webassemblyjs/wasm-edit": ^1.11.5 - "@webassemblyjs/wasm-parser": ^1.11.5 - acorn: ^8.7.1 - acorn-import-assertions: ^1.7.6 - browserslist: ^4.14.5 - chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.13.0 - es-module-lexer: ^1.2.1 - eslint-scope: 5.1.1 - events: ^3.2.0 - glob-to-regexp: ^0.4.1 - graceful-fs: ^4.2.9 - json-parse-even-better-errors: ^2.3.1 - loader-runner: ^4.2.0 - mime-types: ^2.1.27 - neo-async: ^2.6.2 - schema-utils: ^3.1.2 - tapable: ^2.1.1 - terser-webpack-plugin: ^5.3.7 - watchpack: ^2.4.0 - webpack-sources: ^3.2.3 - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack: bin/webpack.js - checksum: 1a6eecaffac3226d80f4e8f330b32e0ff117d9dafd8700166d230afbc171d68ea1ff55a9939fa789307f7b9d11881889ccb8e6cd79d4ccbaeef916788ce73fdb - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: ^2.0.0 - bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 - languageName: node - linkType: hard - -"wildcard@npm:^2.0.0": - version: 2.0.1 - resolution: "wildcard@npm:2.0.1" - checksum: e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c - languageName: node - linkType: hard diff --git a/pyproject.toml b/pyproject.toml index 69bb51e..9f25141 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ requires = ["flit_core<4,>=3.7.1"] [project] name = "doitoml" -version = "0.1.0" +version = "0.1.1" description = "Load declarative tasks for doit from TOML, JSON, YAML, and other files." readme = "README.md" authors = [{name = "doitoml contributors", email = "deathbeds@googlegroups.com"}] @@ -14,12 +14,13 @@ classifiers = [ "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", ] -dependencies = ["doit", "typing_extensions", "tomli ; python_version<\"3.11\""] +dependencies = ["doit >=0.36.0", "typing_extensions", "tomli ; python_version<\"3.11\""] [project.optional-dependencies] -json-e = ["json-e"] -jinja2 = ["jinja2"] -jsonschema = ["jsonschema[format]"] -yaml = ["pyyaml"] +all = ["doitoml[json-e]", "doitoml[jinja2]", "doitoml[jsonschema]", "doitoml[pyyaml]"] +json-e = ["json-e >=4"] +jinja2 = ["jinja2 >=3"] +jsonschema = ["jsonschema >=4"] +yaml = ["pyyaml >=5"] [project.urls] "Bug Tracker" = "https://github.com/deathbeds/doitoml/issues" "Changelog" = "https://github.com/deathbeds/doitoml/blob/main/CHANGELOG.md" @@ -87,6 +88,7 @@ exclude_lines = [ "if TYPE_CHECKING:", "pragma: no cover", ] + [tool.coverage.run] data_file = "build/reports/coverage/.coverage" @@ -199,6 +201,7 @@ select = [ [tool.doitoml] prefix = "" config_paths = ["js/package.json"] +validate = true [tool.doitoml.env] BLACK_CACHE_DIR = "./build/.cache/black" @@ -208,7 +211,7 @@ DOITOML_WHEEL = "doitoml-${DOITOML_VERSION}-py3-none-any.whl" PIP_DOWNLOAD_CACHE = "./build/.cache/pip" RUST_LOG = "error" SOURCE_DATE_EPOCH = ":get|0::json::build/source_date_epoch.json::SOURCE_DATE_EPOCH" -SKIP_CODEGEN = "0" +DOITOML_SKIP_CODEGEN = "0" COV_FAIL_UNDER = "100" [tool.doitoml.tokens] @@ -379,13 +382,14 @@ actions = [ doc = "Run unit tests with pytest" file_dep = ["::ppt", "::all_py", "::all_py_test", "::all_examples"] task_dep = ["test:preflight"] -actions = [["pytest", "-k", "not subprocess"]] +actions = [["pytest"]] [tool.doitoml.tasks.test.full] doc = "Run all tests with pytest" file_dep = ["::ppt", "::all_py", "::all_py_test", "::all_examples"] task_dep = ["test:unit"] actions = [["pytest", "--cov-fail-under=${COV_FAIL_UNDER}"]] +meta = {doitoml = {env = {DOITOML_TEST_FULL_EXAMPLES = 1}}} [tool.doitoml.tasks.docs.sphinx] doc = "Build documentation with `sphinx`" @@ -413,14 +417,14 @@ actions = [["sphinx-autobuild", "::sphinx_opts", "--no-initial", "--watch=src"]] # these will get templated [tool.doitoml.tasks.gen.schema] -meta = {doitoml = {skip = "${SKIP_CODEGEN}"}} +meta = {doitoml = {skip = "${DOITOML_SKIP_CODEGEN}"}} doc = "build JSON Schema from TOML Schema" file_dep = ["::schema_toml"] targets = ["::schema_json"] actions = [{py = {"_actions:toml2json" = {args = ["::schema_toml", "::schema_json"]}}}] [tool.doitoml.tasks.gen.types] -meta = {doitoml = {skip = "${SKIP_CODEGEN}"}} +meta = {doitoml = {skip = "${DOITOML_SKIP_CODEGEN}"}} doc = "build typings from JSON Schema" file_dep = ["::schema_toml"] targets = ["::schema_py"] diff --git a/src/doitoml/config.py b/src/doitoml/config.py index 1a133ad..8786389 100644 --- a/src/doitoml/config.py +++ b/src/doitoml/config.py @@ -1,5 +1,6 @@ """Handles discovering, loading, and normalizing configuration.""" import os +import warnings from copy import deepcopy from pathlib import Path from pprint import pformat @@ -15,20 +16,14 @@ cast, ) -from doitoml.utils.json import to_json - -if TYPE_CHECKING: - from doitoml.doitoml import DoiTOML - - -from doitoml.constants import ( +from .constants import ( DEFAULTS, DOIT_TASK, DOITOML_META, FALSEY, NAME, ) -from doitoml.errors import ( +from .errors import ( ActionError, ConfigError, DoitomlError, @@ -40,7 +35,10 @@ TemplaterError, UnresolvedError, ) -from doitoml.types import ( +from .schema._v0_schema import DoitomlSchema +from .sources._config import ConfigParser, ConfigSource +from .sources._source import Source +from .types import ( Action, LogPaths, PathOrStrings, @@ -52,10 +50,11 @@ Strings, Task, ) +from .utils.json import to_json + +if TYPE_CHECKING: + from .doitoml import DoiTOML -from .schema._v0_schema import DoitomlSchema -from .sources._config import ConfigParser, ConfigSource -from .sources._source import Source Parsers = Dict[str, Type[Source]] @@ -68,16 +67,6 @@ RETRIES = 11 -try: - from . import schema - - HAS_JSONSCHEMA = True - JSONSCHEMA_ERROR = None -except MissingDependencyError as err: - HAS_JSONSCHEMA = False - JSONSCHEMA_ERROR = f"cannot validate: {err}" - - class Config: """A composite configuration loaded from multiple ConfigSource.""" @@ -93,7 +82,7 @@ class Config: update_env: Optional[bool] fail_quietly: Optional[bool] discover_config_paths: Optional[bool] - validate: bool + validate: Optional[bool] def __init__( self, @@ -106,7 +95,7 @@ def __init__( validate: Optional[bool] = None, ) -> None: """Create empty configuration and discover sources.""" - self.validate = HAS_JSONSCHEMA if validate is None else validate + self.validate = validate self.doitoml = doitoml self.config_paths = config_paths self.sources = {} @@ -124,45 +113,17 @@ def to_dict(self) -> DoitomlSchema: env = dict(**self.env) env.update(os.environ) - return cast( - DoitomlSchema, - to_json( - { - "env": env, - "tokens": {":".join(k): v for k, v in self.tokens.items()}, - "paths": {":".join(k): v for k, v in self.paths.items()}, - "tasks": { - ":".join(k): self.task_to_dict(v) for k, v in self.tasks.items() - }, - "templates": self.templates, - }, - ), + as_dict: DoitomlSchema = to_json( + { + "env": env, + "tokens": {":".join(k): v for k, v in self.tokens.items()}, + "paths": {":".join(k): v for k, v in self.paths.items()}, + "templates": self.templates, + "tasks": {":".join(k): v for k, v in self.tasks.items()}, + }, ) - def task_to_dict(self, task: Task) -> Dict[str, Any]: - """Make a 'dumb' JSON object of a task.""" - new_task = deepcopy(task) - if DOIT_TASK.ACTIONS in new_task: - new_actions: List[Action] = [] - for action in new_task[DOIT_TASK.ACTIONS]: - if not isinstance(action, str) and isinstance(action, list): - new_actions += [list(map(str, action))] - continue - new_actions += [action] - new_task[DOIT_TASK.ACTIONS] = new_actions - - for key in DOIT_TASK.RELATIVE_LISTS: - if key in new_task: - new_task[key] = list(map(str, new_task[key])) # type: ignore - - meta = new_task.setdefault(DOIT_TASK.META, {}) # type: ignore - dt_meta = meta.setdefault(NAME, {}) - - dt_log = dt_meta[DOITOML_META.LOG] - dt_meta[DOITOML_META.LOG] = [str(log) if log else None for log in dt_log] - dt_meta[DOITOML_META.SOURCE] = str(dt_meta[DOITOML_META.SOURCE]) - - return dict(new_task) + return as_dict def initialize(self) -> None: """Perform a few passes to configure everything.""" @@ -199,12 +160,30 @@ def initialize(self) -> None: # .. then find the tasks self.init_tasks() - if self.validate: - self.validate_all() + self.maybe_validate() + + def maybe_validate(self) -> None: + """Validate if requested, or.""" + if self.validate is False: + return + + try: + from .schema.validator import latest + + has_jsonschema = True + jsonschema_error = None + except MissingDependencyError as err: + has_jsonschema = False + jsonschema_error = str(err) + + if not has_jsonschema: # pragma: no cover + message = ( + f"Validation was requested, but cannot validate: {jsonschema_error}" + ) + warnings.warn(message, stacklevel=1) + return - def validate_all(self) -> None: - """Check for validation errors.""" - schema.latest.validate(self.to_dict()) + latest.validate(self.to_dict()) def find_config_sources(self) -> ConfigSources: """Find all directly and referenced configuration sources.""" @@ -309,11 +288,11 @@ def init_source_env(self, source: ConfigSource, unresolved_env: EnvDict) -> None env[env_key] = new_key_value unresolved_env.pop(env_key, None) - def resolve_one_env(self, source: ConfigSource, env_value: str) -> Optional[str]: + def resolve_one_env(self, source: ConfigSource, env_value: Any) -> Optional[str]: """Resolve a single env member.""" - new_value = env_value + new_value = str(env_value) for dsl in self.doitoml.entry_points.dsl.values(): - match = dsl.pattern.search(env_value) + match = dsl.pattern.search(new_value) if match is not None: try: new_value = str(dsl.transform_token(source, match, env_value)[0]) diff --git a/src/doitoml/schema/__init__.py b/src/doitoml/schema/__init__.py index f641294..e695de9 100644 --- a/src/doitoml/schema/__init__.py +++ b/src/doitoml/schema/__init__.py @@ -1,88 +1 @@ """optional schema for ``doitoml``.""" - -import os -from pathlib import Path -from pprint import pformat -from typing import Any, Mapping, Optional, cast - -from doitoml.errors import MissingDependencyError, SchemaError -from doitoml.sources.toml._toml import tomllib - -HAS_JSONSCHEMA = False - -try: - from jsonschema import Draft7Validator, ValidationError - - HAS_JSONSCHEMA = True -except ImportError as err: - message = "install `doitoml[jsonschema]` or `jsonschema[format]`" - raise MissingDependencyError(message) from err - -HERE = Path(__file__).parent - -AnyMapping = Mapping[str, Any] - - -__all__ = ["v0", "latest"] - - -class Version: - - """A schema for ``doitoml``.""" - - path: Path - #: the cached schema - _schema: Optional[AnyMapping] - #: the cached validator - _validator: Optional[Draft7Validator] - - def __init__(self, version: str) -> None: - """Initialize a validator.""" - self.path = HERE / f"v{version}.schema.toml" - self._schema = None - self._validator = None - - @property - def schema(self) -> AnyMapping: - """Get the cached schema.""" - if self._schema is None: # pragma: no cover - self._schema = cast(AnyMapping, tomllib.load(self.path.open("rb"))) - return self._schema - - @property - def validator(self) -> Draft7Validator: - """Get the cached validator.""" - if self._validator is None: # pragma: no cover - self._validator = Draft7Validator(schema=self.schema) - return self._validator - - def validate(self, instance: Any) -> None: - """Validate an instance. - - Something better would be https://json-schema.org/draft/2020-12/output/schema - """ - errors = [] - error: ValidationError - - for error in self.validator.iter_errors(instance): - schema_path = "/".join(list(map(str, error.relative_schema_path))) - data_path = "/".join(list(map(str, error.relative_path))) - errors += [ - { - "schema_path": f"#/{schema_path}", - "data_path": f"#/{data_path}", - "message": error.message, - }, - ] - - if errors: - message = f"Invalid doitoml data: {pformat(errors)}" - raise SchemaError(message) - - -v0 = Version("0") - -latest = v0 - -if os.environ.get("IN_SPHINX"): # pragma: no cover - DOITOML_SCHEMA = latest.schema diff --git a/src/doitoml/schema/validator.py b/src/doitoml/schema/validator.py new file mode 100644 index 0000000..f641294 --- /dev/null +++ b/src/doitoml/schema/validator.py @@ -0,0 +1,88 @@ +"""optional schema for ``doitoml``.""" + +import os +from pathlib import Path +from pprint import pformat +from typing import Any, Mapping, Optional, cast + +from doitoml.errors import MissingDependencyError, SchemaError +from doitoml.sources.toml._toml import tomllib + +HAS_JSONSCHEMA = False + +try: + from jsonschema import Draft7Validator, ValidationError + + HAS_JSONSCHEMA = True +except ImportError as err: + message = "install `doitoml[jsonschema]` or `jsonschema[format]`" + raise MissingDependencyError(message) from err + +HERE = Path(__file__).parent + +AnyMapping = Mapping[str, Any] + + +__all__ = ["v0", "latest"] + + +class Version: + + """A schema for ``doitoml``.""" + + path: Path + #: the cached schema + _schema: Optional[AnyMapping] + #: the cached validator + _validator: Optional[Draft7Validator] + + def __init__(self, version: str) -> None: + """Initialize a validator.""" + self.path = HERE / f"v{version}.schema.toml" + self._schema = None + self._validator = None + + @property + def schema(self) -> AnyMapping: + """Get the cached schema.""" + if self._schema is None: # pragma: no cover + self._schema = cast(AnyMapping, tomllib.load(self.path.open("rb"))) + return self._schema + + @property + def validator(self) -> Draft7Validator: + """Get the cached validator.""" + if self._validator is None: # pragma: no cover + self._validator = Draft7Validator(schema=self.schema) + return self._validator + + def validate(self, instance: Any) -> None: + """Validate an instance. + + Something better would be https://json-schema.org/draft/2020-12/output/schema + """ + errors = [] + error: ValidationError + + for error in self.validator.iter_errors(instance): + schema_path = "/".join(list(map(str, error.relative_schema_path))) + data_path = "/".join(list(map(str, error.relative_path))) + errors += [ + { + "schema_path": f"#/{schema_path}", + "data_path": f"#/{data_path}", + "message": error.message, + }, + ] + + if errors: + message = f"Invalid doitoml data: {pformat(errors)}" + raise SchemaError(message) + + +v0 = Version("0") + +latest = v0 + +if os.environ.get("IN_SPHINX"): # pragma: no cover + DOITOML_SCHEMA = latest.schema diff --git a/src/doitoml/utils/json.py b/src/doitoml/utils/json.py index 6f277ca..64cc9e2 100644 --- a/src/doitoml/utils/json.py +++ b/src/doitoml/utils/json.py @@ -3,6 +3,8 @@ import pathlib from typing import Any +from doitoml.sources._source import Source + class DoitomlEncoder(json.JSONEncoder): @@ -13,10 +15,13 @@ class DoitomlEncoder(json.JSONEncoder): def default(self, obj: Any) -> Any: """Handle a single object.""" - if not isinstance(obj, pathlib.Path): # pragma: no cover - return json.JSONEncoder.default(self, obj) + if isinstance(obj, pathlib.Path): + return obj.as_posix() + + if isinstance(obj, Source): + return obj.path.as_posix() if obj.path else None - return obj.as_posix() + return json.JSONEncoder.default(self, obj) # pragma: no cover def to_json(obj: Any) -> Any: diff --git a/test/test_examples.py b/test/test_examples.py index e5fbccd..9e05d70 100644 --- a/test/test_examples.py +++ b/test/test_examples.py @@ -12,9 +12,10 @@ import tomli as tomllib -from .conftest import ( - TDataExample, -) +from .conftest import TDataExample + +#: run all examples, whcih use additional resources +TEST_FULL_EXAMPLES = bool(json.loads(os.environ.get("DOITOML_TEST_FULL_EXAMPLES", "0"))) def _count_files( @@ -107,7 +108,7 @@ def test_example_task_counts(a_data_example: TDataExample, script_runner: Any) - break -def test_slow_example( +def test_example( a_data_example: TDataExample, script_runner: Any, ) -> None: @@ -139,3 +140,5 @@ def test_slow_example( skip = step.get("skip_os", []) if os.name in skip: return + if not TEST_FULL_EXAMPLES: + return diff --git a/test/test_schema.py b/test/test_schema.py index 91c44f6..b82dc69 100644 --- a/test/test_schema.py +++ b/test/test_schema.py @@ -1,7 +1,5 @@ """Tests for ``doitoml`` schema.""" -import pytest from doitoml import DoiTOML -from doitoml.errors import SchemaError from .conftest import TPyprojectMaker @@ -16,5 +14,4 @@ def test_no_validate(a_pyproject_with: TPyprojectMaker) -> None: a_pyproject_with({"tasks": {}}) doitoml = DoiTOML(validate=False) doitoml.config.tasks = {("0",): BAD_TASK} # type: ignore - with pytest.raises(SchemaError): - doitoml.config.validate_all() + doitoml.config.maybe_validate()