diff --git a/.eslintrc.json b/.eslintrc.json index 41a5fdc..7f4a56a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,131 +1,92 @@ { "extends": [ - "eslint:recommended", - "./package.json" + "plugin:import/warnings", + "plugin:import/typescript", + "plugin:unicorn/recommended" ], - - "env": { - "browser": false, - "es6": true, - "node": true, - "mocha": true - }, - - "parserOptions":{ - "ecmaVersion": 9, + "plugins": [ + "@typescript-eslint", + "import", + "promise", + "unicorn" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "parser": "@typescript-eslint/parser", "sourceType": "module", - "ecmaFeatures": { - "modules": true, - "experimentalObjectRestSpread": true - } - }, - - "globals": { - "document": false, - "navigator": false, - "window": false + "ecmaVersion": 12 }, - "rules": { - "accessor-pairs": 2, - "arrow-spacing": [2, { "before": true, "after": true }], - "block-spacing": [2, "always"], - "brace-style": [2, "1tbs", { "allowSingleLine": true }], - "comma-dangle": [2, "never"], - "comma-spacing": [2, { "before": false, "after": true }], - "comma-style": [2, "last"], - "constructor-super": 2, - "curly": [2, "multi-line"], - "dot-location": [2, "property"], - "eol-last": 2, - "eqeqeq": [2, "allow-null"], - "generator-star-spacing": [2, { "before": true, "after": true }], - "handle-callback-err": [2, "^(err|error)$" ], - "indent": [2, 2, { "SwitchCase": 1 }], - "key-spacing": [2, { "beforeColon": false, "afterColon": true }], - "keyword-spacing": [2, { "before": true, "after": true }], - "new-cap": [2, { "newIsCap": true, "capIsNew": false }], - "new-parens": 2, - "no-array-constructor": 2, - "no-caller": 2, - "no-class-assign": 2, - "no-cond-assign": 2, - "no-const-assign": 2, - "no-control-regex": 2, - "no-debugger": 2, - "no-delete-var": 2, - "no-dupe-args": 2, - "no-dupe-class-members": 2, - "no-dupe-keys": 2, - "no-duplicate-case": 2, - "no-empty-character-class": 2, - "no-eval": 2, - "no-ex-assign": 2, - "no-extend-native": 2, - "no-extra-bind": 2, - "no-extra-boolean-cast": 2, - "no-extra-parens": [2, "functions"], - "no-fallthrough": 2, - "no-floating-decimal": 2, - "no-func-assign": 2, - "no-implied-eval": 2, - "no-inner-declarations": [2, "functions"], - "no-invalid-regexp": 2, - "no-irregular-whitespace": 2, - "no-iterator": 2, - "no-label-var": 2, - "no-labels": 2, - "no-lone-blocks": 2, - "no-mixed-spaces-and-tabs": 2, - "no-multi-spaces": 2, - "no-multi-str": 2, - "no-multiple-empty-lines": [2, { "max": 1 }], - "no-native-reassign": 0, - "no-negated-in-lhs": 2, - "no-new": 2, - "no-new-func": 2, - "no-new-object": 2, - "no-new-require": 2, - "no-new-wrappers": 2, - "no-obj-calls": 2, - "no-octal": 2, - "no-octal-escape": 2, - "no-proto": 0, - "no-redeclare": 2, - "no-regex-spaces": 2, - "no-return-assign": 2, - "no-self-compare": 2, - "no-sequences": 2, - "no-shadow-restricted-names": 2, - "no-spaced-func": 2, - "no-sparse-arrays": 2, - "no-this-before-super": 2, - "no-throw-literal": 2, - "no-trailing-spaces": 0, - "no-undef": 2, - "no-undef-init": 2, - "no-unexpected-multiline": 2, - "no-unneeded-ternary": [2, { "defaultAssignment": false }], - "no-unreachable": 2, - "no-unused-vars": [2, { "vars": "all", "args": "none" }], - "no-useless-call": 0, - "no-with": 2, - "one-var": [0, { "initialized": "never" }], - "operator-linebreak": [0, "after", { "overrides": { "?": "before", ":": "before" } }], - "padded-blocks": [0, "never"], - "quotes": [2, "single", "avoid-escape"], - "radix": 2, - "semi": [2, "always"], - "semi-spacing": [2, { "before": false, "after": true }], - "space-before-blocks": [2, "always"], - "space-before-function-paren": [2, "never"], - "space-in-parens": [2, "never"], - "space-infix-ops": 2, - "space-unary-ops": [2, { "words": true, "nonwords": false }], - "spaced-comment": [0, "always", { "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!", ","] }], - "use-isnan": 2, - "valid-typeof": 2, - "wrap-iife": [2, "any"], - "yoda": [2, "never"] + "prefer-const": "error", + "semi": [ + "error", + "always" + ], + "quotes": [ + "warn", + "double", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ], + "no-unused-vars": "off", + "curly": "error", + "brace-style": [ + "error", + "1tbs", + { + "allowSingleLine": true + } + ], + // our use of `-spec` files for testing prevents us using this + "unicorn/filename-case": "off", + // reduce has been getting a bad rap lately; its true that often + // a filter or map would be clearer and equally as effective but + // there are still some legit cases to use reduce + "unicorn/no-array-reduce": "off", + "unicorn/prevent-abbreviations": "off", + "unicorn/no-null": "off", + "no-nested-ternary": "off", + // doesn't play well with prettier + "unicorn/no-nested-ternary": "off", + // this is kind of nice sometimes + "unicorn/no-array-callback-reference": "off", + "unicorn/prefer-logical-operator-over-ternary": "off", + // we need exceptions to be only "warn" because + // there are valid use cases for generic variables being + // used before being defined + "no-use-before-define": [ + "warn" + ], + "@typescript-eslint/semi": [ + "error", + "always" + ], + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/member-delimiter-style": [ + "error", + { + "multiline": { + "delimiter": "semi", + "requireLast": true + }, + "singleline": { + "delimiter": "semi", + "requireLast": false + } + } + ], + // "cases" allows for graceful use of that variable + // name in Typescript test cases + "@typescript-eslint/no-unused-vars": [ + "error", + { + "varsIgnorePattern": "cases|^_", + "argsIgnorePattern": "^_" + } + ] } -} +} \ No newline at end of file diff --git a/.github/workflows/features.yml b/.github/workflows/features.yml new file mode 100644 index 0000000..579bbde --- /dev/null +++ b/.github/workflows/features.yml @@ -0,0 +1,17 @@ +name: CI (features & PRs) + +on: + push: + branches: + - feature/* + + pull_request: + branches: + - main + - master + - develop + - feature/* + +jobs: + testing: + uses: yankeeinlondon/gha/.github/workflows/test.yml@main diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml new file mode 100644 index 0000000..abfcedc --- /dev/null +++ b/.github/workflows/master.yml @@ -0,0 +1,33 @@ +name: Continuous Integration + +on: + push: + branches: + - main + - master + +jobs: + testing: + uses: yankeeinlondon/gha/.github/workflows/test.yml@main + + publish: + name: npm + if: contains(github.event.head_commit.message, 'release v') + needs: + - testing + uses: yankeeinlondon/gha/.github/workflows/npm.yml@main + with: + nodeVersion: 16 + secrets: + npm_token: ${{secrets.NPM_TOKEN}} + + do_not_publish: + if: ( !contains(github.event.head_commit.message, 'release v') ) + needs: + - testing + name: npm / no publication + runs-on: ubuntu-latest + steps: + - name: Done + run: | + echo "no publication to NPM required" diff --git a/.gitignore b/.gitignore index f969a2c..08016fd 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,5 @@ vendor temp tmp TODO.md -package-lock.json \ No newline at end of file +package-lock.json +.tsbuildinfo \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index eebdf42..2095b5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,17 @@ # Release history +## 5.0.0 - 2022-07-20 + +- Core code moved to ES Modules syntax +- All dependencies updated to latest versions (including some major version bumps) +- Library now exports ESM, CJS, and types +- Note: _types_ were manually handcrafted in prior releases but not included in the package.json's "types" property. + ## 4.0.0 - 2018-04-01 ### Breaking changes -- Now requires node v4 or higher. - +- Now requires node v4 or higher. ## 3.0.0 - 2017-06-30 diff --git a/README.md b/README.md index d5d1e0a..87de2a5 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,17 @@ Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. +> NOTE: in this release we have switched over to ES Modules in the core code but both ESM and CJS are exported for users of this library. + ## Install Install with [npm](https://www.npmjs.com/): ```sh -$ npm install --save gray-matter +npm install --save gray-matter ``` -## Heads up! +## Heads up Please see the [changelog](CHANGELOG.md) to learn about breaking changes that were made in v3.0. @@ -24,8 +26,8 @@ Please see the [changelog](CHANGELOG.md) to learn about breaking changes that we Add the HTML in the following example to `example.html`, then add the following code to `example.js` and run `$ node example` (without the `$`): ```js -const fs = require('fs'); -const matter = require('gray-matter'); +import fs from 'node:fs'; +import matter from 'gray-matter'; const str = fs.readFileSync('example.html', 'utf8'); console.log(matter(str)); ``` @@ -86,26 +88,18 @@ Some libraries met most of the requirements, but _none met all of them_. * Support stringifying back to front-matter. This is useful for linting, updating properties, etc. * Allow custom delimiters, when it's necessary for avoiding delimiter collision. * Should return an object with at least these three properties: - - `data`: the parsed YAML front matter, as a JSON object - - `content`: the contents as a string, without the front matter - - `orig`: the "original" content (for debugging) + * `data`: the parsed YAML front matter, as a JSON object + * `content`: the contents as a string, without the front matter + * `orig`: the "original" content (for debugging) ## Usage -Using Node's `require()` system: - -```js -const matter = require('gray-matter'); -``` - -Or with [typescript](https://www.typescriptlang.org) +Both JS and TS use the modern "import" signature that hopefully you are familiar with: ```js -import matter = require('gray-matter'); -// OR -import * as matter from 'gray-matter'; +import matter from 'gray-matter'; ``` Pass a string and [options](#options) to gray-matter: @@ -133,7 +127,7 @@ More about the returned object in the following section. gray-matter returns a `file` object with the following properties. -**Enumerable** +### Enumerable * `file.data` **{Object}**: the object created by parsing front-matter * `file.content` **{String}**: the input string, with `matter` stripped @@ -141,7 +135,7 @@ gray-matter returns a `file` object with the following properties. * `file.empty` **{String}**: when the front-matter is "empty" (either all whitespace, nothing at all, or just comments and no data), the original string is set on this property. See [#65](https://github.com/jonschlinkert/gray-matter/issues/65) for details regarding use case. * `file.isEmpty` **{Boolean}**: true if front-matter is empty. -**Non-enumerable** +### Non-enumerable In addition, the following non-enumberable properties are added to the object to help with debugging. @@ -155,22 +149,22 @@ In addition, the following non-enumberable properties are added to the object to If you'd like to test-drive the examples, first clone gray-matter into `my-project` (or wherever you want): ```sh -$ git clone https://github.com/jonschlinkert/gray-matter my-project +git clone https://github.com/jonschlinkert/gray-matter my-project ``` CD into `my-project` and install dependencies: ```sh -$ cd my-project && npm install +cd my-project && npm install ``` Then run any of the [examples](./examples) to see how gray-matter works: ```sh -$ node examples/ +node examples/ ``` -**Links to examples** +### Links to examples * [coffee](examples/coffee.js) * [excerpt-separator](examples/excerpt-separator.js) @@ -201,7 +195,7 @@ Takes a string or object with `content` property, extracts and parses front-matt **Example** ```js -const matter = require('gray-matter'); +import matter from 'gray-matter'; console.log(matter('---\ntitle: Home\n---\nOther stuff')); //=> { data: { title: 'Home'}, content: 'Other stuff' } ``` @@ -502,7 +496,7 @@ Pull requests and stars are always welcome. For bugs and feature requests, [plea Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: ```sh -$ npm install && npm test +npm install && npm test ``` @@ -515,7 +509,7 @@ _(This project's readme.md is generated by [verb](https://github.com/verbose/ver To generate the readme, run the following command: ```sh -$ npm install -g verbose/verb#dev verb-generate-readme && verb +npm install -g verbose/verb#dev verb-generate-readme && verb ``` @@ -531,21 +525,21 @@ You might also be interested in these projects: ### Contributors -| **Commits** | **Contributor** | -| --- | --- | -| 174 | [jonschlinkert](https://github.com/jonschlinkert) | -| 7 | [RobLoach](https://github.com/RobLoach) | -| 5 | [heymind](https://github.com/heymind) | -| 4 | [doowb](https://github.com/doowb) | -| 3 | [aljopro](https://github.com/aljopro) | -| 2 | [reccanti](https://github.com/reccanti) | -| 2 | [onokumus](https://github.com/onokumus) | -| 2 | [moozzyk](https://github.com/moozzyk) | -| 1 | [Ajedi32](https://github.com/Ajedi32) | -| 1 | [caesar](https://github.com/caesar) | -| 1 | [ianstormtaylor](https://github.com/ianstormtaylor) | -| 1 | [qm3ster](https://github.com/qm3ster) | -| 1 | [zachwhaley](https://github.com/zachwhaley) | +| **Commits** | **Contributor** | +| ----------- | --------------------------------------------------- | +| 174 | [jonschlinkert](https://github.com/jonschlinkert) | +| 7 | [RobLoach](https://github.com/RobLoach) | +| 5 | [heymind](https://github.com/heymind) | +| 4 | [doowb](https://github.com/doowb) | +| 3 | [aljopro](https://github.com/aljopro) | +| 2 | [reccanti](https://github.com/reccanti) | +| 2 | [onokumus](https://github.com/onokumus) | +| 2 | [moozzyk](https://github.com/moozzyk) | +| 1 | [Ajedi32](https://github.com/Ajedi32) | +| 1 | [caesar](https://github.com/caesar) | +| 1 | [ianstormtaylor](https://github.com/ianstormtaylor) | +| 1 | [qm3ster](https://github.com/qm3ster) | +| 1 | [zachwhaley](https://github.com/zachwhaley) | ### Author @@ -562,4 +556,4 @@ Released under the [MIT License](LICENSE). *** -_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on April 01, 2018._ \ No newline at end of file +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on April 01, 2018._ diff --git a/benchmark/bulk/code/front-matter.js b/benchmark/bulk/code/front-matter.js index d7d8a10..deb11d9 100644 --- a/benchmark/bulk/code/front-matter.js +++ b/benchmark/bulk/code/front-matter.js @@ -1,6 +1,4 @@ -'use strict'; - -var frontMatter = require('front-matter'); +import frontMatter from 'front-matter'; module.exports = function(arr) { var len = arr.length; diff --git a/benchmark/bulk/code/gray-matter.js b/benchmark/bulk/code/gray-matter.js index 148616a..7b68178 100644 --- a/benchmark/bulk/code/gray-matter.js +++ b/benchmark/bulk/code/gray-matter.js @@ -1,6 +1,4 @@ -'use strict'; - -var matter = require('../../..'); +import matter from '../../lib/index.js'; module.exports = function(arr) { var len = arr.length; diff --git a/benchmark/bulk/fixtures/posts.js b/benchmark/bulk/fixtures/posts.js index 6314932..16a8b8d 100644 --- a/benchmark/bulk/fixtures/posts.js +++ b/benchmark/bulk/fixtures/posts.js @@ -1,14 +1,12 @@ -'use strict'; - -var fs = require('fs'); -var path = require('path'); +import fs from 'node:fs'; +import path from 'node:path'; var fp = path.join(process.cwd(), 'vendor/bootstrap-blog/_posts'); if (!fs.existsSync(fp)) { var msg = [ ' to run this benchmark you need to pull down the', ' the bootstrap-blog first. To do so, run:', - ' git clone https://github.com/twbs/bootstrap-blog.git "vendor/bootstrap-blog"', + ' git clone https://github.com/twbs/bootstrap-blog.git "vendor/bootstrap-blog"' ].join('\n'); console.log(msg); process.exit(0); diff --git a/benchmark/code/0.5.3.js b/benchmark/code/0.5.3.js index 208f671..a041aa4 100644 --- a/benchmark/code/0.5.3.js +++ b/benchmark/code/0.5.3.js @@ -1,8 +1,6 @@ -'use strict'; - -var delims = require('delimiter-regex'); -var extend = require('extend-shallow'); -var parse = require('../../lib/parse'); +import delims from 'delimiter-regex'; +import extend from 'extend-shallow'; +import parse from '../../lib/parse.js'; module.exports = function matter(str, options) { if (str.length === 0) { diff --git a/benchmark/code/charAt.js b/benchmark/code/charAt.js index 3a283fb..f0863ef 100644 --- a/benchmark/code/charAt.js +++ b/benchmark/code/charAt.js @@ -1,7 +1,5 @@ -'use strict'; - -var extend = require('extend-shallow'); -var engines = require('../../lib/engines'); +import extend from 'extend-shallow'; +import engines from '../../lib/engines.js'; module.exports = function matter(str, options) { var res = {orig: str, data: {}, content: ''}; diff --git a/benchmark/code/front-matter.js b/benchmark/code/front-matter.js deleted file mode 100644 index 6cf520a..0000000 --- a/benchmark/code/front-matter.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('front-matter'); diff --git a/benchmark/code/gray-matter.js b/benchmark/code/gray-matter.js deleted file mode 100644 index bf59a72..0000000 --- a/benchmark/code/gray-matter.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../..'); diff --git a/benchmark/code/read.js b/benchmark/code/read.js index a1c87ae..6d26586 100644 --- a/benchmark/code/read.js +++ b/benchmark/code/read.js @@ -1,5 +1,5 @@ -var extend = require('extend-shallow'); -var engines = require('../../lib/engines'); +import extend from 'extend-shallow'; +import engines from '../../lib/engines.js'; module.exports = function matter(str, options) { var defaults = {orig: str, data: {}, content: str}; diff --git a/benchmark/code/regex.js b/benchmark/code/regex.js index 08d9966..9a074f9 100644 --- a/benchmark/code/regex.js +++ b/benchmark/code/regex.js @@ -1,4 +1,4 @@ -var engines = require('../../lib/engines'); +import engines from '../../lib/engines.js'; module.exports = function matter(str, options) { if (str.length === 0) { diff --git a/benchmark/code/split.js b/benchmark/code/split.js index 244cd39..3c89770 100644 --- a/benchmark/code/split.js +++ b/benchmark/code/split.js @@ -1,5 +1,5 @@ -var extend = require('extend-shallow'); -var engines = require('../../lib/engines'); +import extend from 'extend-shallow'; +import engines from '../../lib/engines.js'; module.exports = function matter(str, options) { var defaults = {orig: str, data: {}, content: str}; diff --git a/benchmark/code/substr.js b/benchmark/code/substr.js index 8ee42f2..444a8dd 100644 --- a/benchmark/code/substr.js +++ b/benchmark/code/substr.js @@ -1,5 +1,5 @@ -var extend = require('extend-shallow'); -var engines = require('../../lib/engines'); +import extend from 'extend-shallow'; +import engines from '../../lib/engines'; module.exports = function matter(str, options) { var defaults = {orig: str, data: {}, content: str}; diff --git a/benchmark/code/while.js b/benchmark/code/while.js index 0bedead..7e072d7 100644 --- a/benchmark/code/while.js +++ b/benchmark/code/while.js @@ -1,5 +1,5 @@ -var extend = require('extend-shallow'); -var engines = require('../../lib/engines'); +import extend from 'extend-shallow'; +import engines from '../../lib/engines'; module.exports = function matter(str, options) { if (str.length === 0) { diff --git a/benchmark/code/while2.js b/benchmark/code/while2.js index 56b64c9..010cf3e 100644 --- a/benchmark/code/while2.js +++ b/benchmark/code/while2.js @@ -1,5 +1,5 @@ -var extend = require('extend-shallow'); -var engines = require('../../lib/engines'); +import extend from 'extend-shallow'; +import engines from '../../lib/engines.js'; module.exports = function matter(str, options) { if (str === '') { diff --git a/benchmark/code/while3.js b/benchmark/code/while3.js index 9a06dd5..5ecdf87 100644 --- a/benchmark/code/while3.js +++ b/benchmark/code/while3.js @@ -1,5 +1,5 @@ -var extend = require('extend-shallow'); -var engines = require('../../lib/engines'); +import extend from 'extend-shallow'; +import engines from '../../lib/engines.js'; module.exports = function matter(str, options) { if (str.length === 0) { diff --git a/benchmark/fixtures/coffee.js b/benchmark/fixtures/coffee.js index c7cefab..93fa3ca 100644 --- a/benchmark/fixtures/coffee.js +++ b/benchmark/fixtures/coffee.js @@ -1,4 +1,4 @@ -'use strict'; + module.exports = ['---coffee\ndata =\ntitle: "autodetect-coffee"\nuser: "jonschlinkert"\n---\nContent\n']; diff --git a/benchmark/fixtures/complex.js b/benchmark/fixtures/complex.js index 50a4d63..a63a5a0 100644 --- a/benchmark/fixtures/complex.js +++ b/benchmark/fixtures/complex.js @@ -1,6 +1,3 @@ -'use strict'; - -var fs = require('fs'); +import * as fs from 'node:fs'; module.exports = [fs.readFileSync(__dirname + '/complex.md', 'utf8')]; - diff --git a/benchmark/fixtures/cson.js b/benchmark/fixtures/cson.js index 99cd0a1..3c9bc72 100644 --- a/benchmark/fixtures/cson.js +++ b/benchmark/fixtures/cson.js @@ -1,4 +1,4 @@ -'use strict'; + module.exports = ['---cson\ntitle: "autodetect-CSON"\nuser: "jonschlinkert"\n---\nContent\n']; diff --git a/benchmark/fixtures/empty.js b/benchmark/fixtures/empty.js index 0529857..107d81b 100644 --- a/benchmark/fixtures/empty.js +++ b/benchmark/fixtures/empty.js @@ -1,3 +1,3 @@ -'use strict'; + module.exports = ['']; diff --git a/benchmark/fixtures/lang.js b/benchmark/fixtures/lang.js index cba22cc..7ed727c 100644 --- a/benchmark/fixtures/lang.js +++ b/benchmark/fixtures/lang.js @@ -1,3 +1,3 @@ -'use strict'; + module.exports = ['---yaml\ntitle: autodetect-yaml\nuser: jonschlinkert\n---\nContent\n']; diff --git a/benchmark/fixtures/matter.js b/benchmark/fixtures/matter.js index dcd20a6..3cf1163 100644 --- a/benchmark/fixtures/matter.js +++ b/benchmark/fixtures/matter.js @@ -1,3 +1,3 @@ -'use strict'; + module.exports = ['---\ntitle: autodetect-no-lang\nuser: jonschlinkert\n---\nContent\n']; diff --git a/benchmark/fixtures/no-content.js b/benchmark/fixtures/no-content.js index d4cc493..f27a801 100644 --- a/benchmark/fixtures/no-content.js +++ b/benchmark/fixtures/no-content.js @@ -1,3 +1,3 @@ -'use strict'; + module.exports = ['---\ntitle: autodetect-no-lang\nuser: jonschlinkert\n---']; diff --git a/benchmark/fixtures/no-matter.js b/benchmark/fixtures/no-matter.js index dd99b44..2a44fef 100644 --- a/benchmark/fixtures/no-matter.js +++ b/benchmark/fixtures/no-matter.js @@ -1,3 +1,3 @@ -'use strict'; + module.exports = ['# No front matter here.']; diff --git a/benchmark/fixtures/toml.js b/benchmark/fixtures/toml.js index 432dfa6..e5534d4 100644 --- a/benchmark/fixtures/toml.js +++ b/benchmark/fixtures/toml.js @@ -1,3 +1,3 @@ -'use strict'; + module.exports = ['--- toml\ntitle = "autodetect-TOML"\n\n[props]\nuser = "jonschlinkert"\n---\nContent\n']; diff --git a/benchmark/index.js b/benchmark/index.js index 7876ee3..79f56c7 100644 --- a/benchmark/index.js +++ b/benchmark/index.js @@ -1,15 +1,24 @@ -'use strict'; +import path from 'path'; +import minimist from 'minimist'; +import suite from 'benchmarked'; +import { dirname } from 'node:path'; +import { fileURLToPath } from 'url'; + +import write from 'write'; + +const argv = minimist(process.argv.slice(2)); +const _dirname = + typeof __dirname !== 'undefined' + ? __dirname + : dirname(fileURLToPath(import.meta.url)); -const path = require('path'); -const argv = require('minimist')(process.argv.slice(2)); -const suite = require('benchmarked'); -const write = require('write'); const cwd = path.join.bind(path, argv.cwd || ''); -const dir = path.join.bind(path, __dirname); +const dir = path.join.bind(path, _dirname); const code = argv.c || argv.code || '{gray,front}-matter.js'; const fixtures = argv.f || argv.fixtures || '{complex*,empty,matter,no-*}.js'; -suite.run({code: `code/${cwd(code)}`, fixtures: `fixtures/${cwd(fixtures)}`}) +suite + .run({ code: `code/${cwd(code)}`, fixtures: `fixtures/${cwd(fixtures)}` }) .then(function(stats) { write.sync(dir('stats.json'), JSON.stringify(stats, null, 2)); write.sync(dir('stats.md'), suite.render(stats)); diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..9b136e9 --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,147 @@ +import yaml from 'js-yaml'; + +type Input = string | Buffer; +interface GrayMatterFile { + path: string; + data: { + [key: string]: any; + }; + content: string; + contents: any; + excerpt?: string; + orig: I; + language: string; + matter: string; + isEmpty?: boolean; + empty?: any; + stringify(lang: string): string; +} +interface GrayMatterOption> { + parser?: (...args: A) => R; + eval?: boolean; + excerpt?: boolean | ((input: GrayMatterFile, options: O) => string); + excerpt_separator?: string; + sections?: boolean; + section?: any; + safeLoad?: boolean; + engines?: { + [index: string]: ((input: string) => object) | { + parse: (input: string) => object; + stringify?: (data: object) => string; + }; + }; + language?: string; + /** @deprecated use `language` instead */ + lang?: string; + delimiters?: string | string[]; + /** @deprecated use `delimiters` instead */ + delims?: string | string[]; +} +/** + * Takes a string or object with `content` property, extracts + * and parses front-matter from the string, then returns an object + * with `data`, `content` and other [useful properties](#returned-object). + * + * ```js + * var matter = require('gray-matter'); + * console.log(matter('---\ntitle: Home\n---\nOther stuff')); + * //=> { data: { title: 'Home'}, content: 'Other stuff' } + * ``` + */ +type GrayMatterFn = >(input: I | { + content: I; +}, options?: O) => GrayMatterFile; +interface GrayMatterApi { + /** + * Detect the language to use, if on eis defined after the first + * front-matter delimiter. + */ + language>(str: string, options?: GrayMatterOption): { + name: string; + raw: string; + [key: string]: any; + }; + /** + * Returns `true` if the given _string_ has front-matter. + */ + test>(str: string, options?: GrayMatterOption): boolean; + /** + * Synchronously read a file from the file system and parse + * front matter. Returns the same object as the [main function](#matter). + * + * ```js + * var file = matter.read('./content/blog-post.md'); + * ``` + */ + read>(fp: string, options?: GrayMatterOption): GrayMatterFile; + /** + * Stringify an object to YAML or the specified language, and + * append it to the given string. By default, only YAML and JSON + * can be stringified. See the [engines](#engines) section to learn + * how to stringify other languages. + * + * ```js + * console.log(matter.stringify('foo bar baz', {title: 'Home'})); + * // results in: + * // --- + * // title: Home + * // --- + * // foo bar baz + * ``` + */ + stringify>(file: string | GrayMatterFile, data?: object, options?: GrayMatterOption): string; + /** + * Parses the gray-matter + */ + parseMatter>(file: string | GrayMatterFile, options?: GrayMatterOption): any; + clearCache(): void; + cache: Record; +} + +/** + * Default engines + */ +declare const engines: { + yaml: { + parse: typeof yaml.load; + stringify: typeof yaml.dump; + }; + json: { + parse: (text: string, reviver?: ((this: any, key: string, value: any) => any) | undefined) => any; + stringify: (obj: any, options: any) => string; + }; + javascript(str: any, options: any, wrap: any): any; + stringify(): never; +}; + +declare const utils: { + define: (obj: any, key: any, val: any) => void; + /** + * Returns true if `val` is a buffer + */ + isBuffer: (val: any) => boolean; + /** + * Returns true if `val` is an object + */ + isObject: (val: any) => boolean; + /** + * Cast `input` to a buffer + */ + toBuffer(input: any): any; + /** + * Cast `val` to a string. + */ + toString(input: any): any; + /** + * Cast `val` to an array. + */ + arrayify(val: any): any[]; + /** + * Returns true if `str` starts with `substr`. + */ + startsWith(str: string, substr: string, len?: number): boolean; +}; + +declare const matter: GrayMatterApi & GrayMatterFn; + +export { matter as default, engines, matter, utils }; diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..7f93f78 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,371 @@ +// src/index.ts +import * as fs from "fs"; + +// src/engines.ts +import yaml from "js-yaml"; + +// src/engine.ts +function aliase(name) { + switch (name.toLowerCase()) { + case "js": + case "javascript": { + return "javascript"; + } + case "coffee": + case "coffeescript": + case "cson": { + return "coffee"; + } + case "yaml": + case "yml": { + return "yaml"; + } + default: { + return name; + } + } +} +var engine = (name, options3) => { + let engine2 = options3.engines[name] || options3.engines[aliase(name)]; + if (engine2 === void 0) { + throw new TypeError('gray-matter engine "' + name + '" is not registered'); + } + if (typeof engine2 === "function") { + engine2 = { parse: engine2 }; + } + return engine2; +}; +var engine_default = engine; + +// src/parse.ts +var parse = (language, str2, options3) => { + const opts = defaults_default(options3); + const engine2 = engine_default(language, opts); + if (typeof engine2.parse !== "function") { + throw new TypeError('expected "' + language + '.parse" to be a function'); + } + return engine2.parse(str2, opts); +}; +var parse_default = parse; + +// src/engines.ts +var engines = { + yaml: { + parse: yaml.load.bind(yaml), + stringify: yaml.dump.bind(yaml) + }, + json: { + parse: JSON.parse.bind(JSON), + stringify: function(obj, options3) { + const opts = Object.assign({ replacer: null, space: 2 }, options3); + return JSON.stringify(obj, opts.replacer, opts.space); + } + }, + javascript(str, options, wrap) { + try { + if (wrap !== false) { + str = "(function() {\nreturn " + str.trim() + ";\n}());"; + } + return eval(str) || {}; + } catch (error) { + if (wrap !== false && /(unexpected|identifier)/i.test(error.message)) { + return parse_default(str, options, false); + } + throw new SyntaxError(error.message); + } + }, + stringify() { + throw new Error("stringifying JavaScript is not supported"); + } +}; +var engines_default = engines; + +// src/utils.ts +import stripBom from "strip-bom-string"; +import typeOf from "kind-of"; +var utils = { + define: (obj, key, val) => { + Reflect.defineProperty(obj, key, { + enumerable: false, + configurable: true, + writable: true, + value: val + }); + }, + /** + * Returns true if `val` is a buffer + */ + isBuffer: (val) => { + return typeOf(val) === "buffer"; + }, + /** + * Returns true if `val` is an object + */ + isObject: (val) => { + return typeOf(val) === "object"; + }, + /** + * Cast `input` to a buffer + */ + toBuffer(input) { + return typeof input === "string" ? Buffer.from(input) : input; + }, + /** + * Cast `val` to a string. + */ + toString(input) { + if (utils.isBuffer(input)) { + return stripBom(String(input)); + } + if (typeof input !== "string") { + throw new TypeError("expected input to be a string or buffer"); + } + return stripBom(input); + }, + /** + * Cast `val` to an array. + */ + arrayify(val) { + return val ? Array.isArray(val) ? val : [val] : []; + }, + /** + * Returns true if `str` starts with `substr`. + */ + startsWith(str2, substr, len) { + if (typeof len !== "number") { + len = substr.length; + } + return str2.slice(0, len) === substr; + } +}; + +// src/defaults.ts +var options2 = (options3) => { + const opts = Object.assign({}, options3); + opts.delimiters = utils.arrayify(opts.delims || opts.delimiters || "---"); + if (opts.delimiters.length === 1) { + opts.delimiters.push(opts.delimiters[0]); + } + opts.language = (opts.language || opts.lang || "yaml").toLowerCase(); + opts.engines = Object.assign({}, engines_default, opts.parser, opts.engines); + return opts; +}; +var defaults_default = options2; + +// src/stringify.ts +import typeOf2 from "kind-of"; +function newline(str2) { + return str2.slice(-1) === "\n" ? str2 : str2 + "\n"; +} +var stringify = (file, data = {}, options3 = {}) => { + if (data == null && options3 == null) { + switch (typeOf2(file)) { + case "object": { + data = file.data; + options3 = {}; + break; + } + case "string": { + return file; + } + default: { + throw new TypeError("expected file to be a string or object"); + } + } + } + const str2 = file.content; + const opts = defaults_default(options3); + if (data == null) { + if (!opts.data) { + return file; + } + data = opts?.data; + } + const language = file.language || opts.language; + const engine2 = engine_default(language, opts); + if (typeof engine2.stringify !== "function") { + throw new TypeError('expected "' + language + '.stringify" to be a function'); + } + data = Object.assign({}, file.data, data); + const open = opts?.delimiters ? opts.delimiters[0] : opts?.delims ? opts?.delims[0] : void 0; + const close = opts?.delimiters ? opts.delimiters[1] ? opts.delimiters[1] : opts?.delims ? opts.delims[1] : void 0 : void 0; + const matter2 = engine2.stringify(data, options3).trim(); + let buf = ""; + if (matter2 !== "{}") { + buf = newline(open) + newline(matter2) + newline(close); + } + if (typeof file.excerpt === "string" && file.excerpt !== "" && !str2.includes(file.excerpt.trim())) { + buf += newline(file.excerpt) + newline(close); + } + return buf + newline(str2); +}; +var stringify_default = stringify; + +// src/excerpt.ts +var excerpt = (file, options3) => { + const opts = defaults_default(options3); + if (file.data == null) { + file.data = {}; + } + if (typeof opts.excerpt === "function") { + return opts.excerpt(file, opts); + } + const sep = file.data.excerpt_separator || opts.excerpt_separator; + if (sep == null && (opts.excerpt === false || opts.excerpt == null)) { + return file; + } + const delimiter = typeof opts.excerpt === "string" ? opts.excerpt : sep || opts.delimiters[0]; + const idx = file.content.indexOf(delimiter); + if (idx !== -1) { + file.excerpt = file.content.slice(0, idx); + } + return file; +}; +var excerpt_default = excerpt; + +// src/to-file.ts +import typeOf3 from "kind-of"; +var toFile = (file) => { + if (typeOf3(file) !== "object") { + file = { content: file }; + } + if (typeOf3(file.data) !== "object") { + file.data = {}; + } + if (file.contents && file.content == null) { + file.content = file.contents; + } + utils.define(file, "orig", utils.toBuffer(file.content)); + utils.define(file, "language", file.language || ""); + utils.define(file, "matter", file.matter || ""); + utils.define(file, "stringify", (data, options3) => { + if (options3 && options3.language) { + file.language = options3.language; + } + return stringify_default(file, data, options3); + }); + file.content = utils.toString(file.content); + file.isEmpty = false; + file.excerpt = ""; + return file; +}; +var to_file_default = toFile; + +// src/index.ts +import { createFnWithProps } from "inferred-types"; +import sections from "section-matter"; +var matterDict = { + cache: {}, + read(filepath, options3) { + const str2 = fs.readFileSync(filepath, "utf8"); + const file = matterFn(str2, options3); + file.path = filepath; + return file; + }, + stringify(file, data, options3) { + return typeof file === "string" ? stringify_default(matterFn(file, options3), data, options3) : stringify_default(file, data, options3); + }, + language(str2, options3) { + const opts = defaults_default(options3); + const open = opts?.delimiters ? opts.delimiters[0] : "---"; + if (matterDict.test(str2)) { + str2 = str2.slice(open.length); + } + const language = str2.slice(0, str2.search(/\r?\n/)); + return { + raw: language, + name: language ? language.trim() : "" + }; + }, + parseMatter(file, options3) { + const opts = defaults_default(options3); + const open = opts.delimiters ? opts.delimiters[0] : "---"; + const close = "\n" + opts.delimiters[1]; + const f = typeof file === "string" ? { + content: file, + path: "", + language: "", + data: {}, + contents: void 0, + matter: "", + orig: "" + } : file; + if (opts.language) { + f.language = opts.language; + } + const openLen = open.length; + if (!utils.startsWith(f.content, open, openLen)) { + excerpt_default(file, opts); + return file; + } + if (f.content.charAt(openLen) === open.slice(-1)) { + return file; + } + f.content = f.content.slice(openLen); + const len = f.content.length; + const language = matter.language(f.content, opts) || opts.language; + if (language.name) { + f.language = language.name; + f.content = f.content.slice(language.raw.length); + } + let closeIndex = f.content.indexOf(close); + if (closeIndex === -1) { + closeIndex = len; + } + f.matter = f.content.slice(0, closeIndex); + const block = f.matter.replace(/^\s*#[^\n]+/gm, "").trim(); + if (block === "") { + f.isEmpty = true; + f.empty = f.content; + f.data = {}; + } else { + f.data = parse_default(f.language, f.matter, opts); + } + if (closeIndex === len) { + f.content = ""; + } else { + f.content = f.content.slice(closeIndex + close.length); + if (f.content[0] === "\r") { + f.content = f.content.slice(1); + } + if (f.content[0] === "\n") { + f.content = f.content.slice(1); + } + } + excerpt_default(f, opts); + if (opts?.sections === true || typeof opts.section === "function") { + sections(f, opts.section); + } + return f; + }, + test(str2, options3) { + return utils.startsWith(str2, defaults_default(options3).delimiters[0]); + }, + clearCache() { + matterDict.cache = {}; + } +}; +var matterFn = (input, options3) => { + if (input === "") { + return { data: {}, content: input, excerpt: "", orig: input }; + } + let file = to_file_default(input); + const cached = matterDict.cache[file.content]; + if (!options3) { + if (cached) { + file = Object.assign({}, cached); + file.orig = cached.orig; + return file; + } + matterDict.cache[file.content] = file; + } + return matterDict.parseMatter(file, options3); +}; +var matter = createFnWithProps(matterFn, matterDict); +var src_default = matter; +export { + src_default as default, + engines_default as engines, + matter, + utils +}; diff --git a/examples/coffee.js b/examples/coffee.js index 0934114..05acff2 100644 --- a/examples/coffee.js +++ b/examples/coffee.js @@ -1,7 +1,8 @@ -const path = require('path'); -const matter = require('..'); -const coffee = require('coffeescript'); -const green = require('ansi-green'); +import path from 'path'; +import matter from '..'; +import coffee from 'coffeescript'; +import green from 'ansi-green'; + const fixture = path.join.bind(path, __dirname, 'fixtures'); let file; diff --git a/examples/helper.js b/examples/helper.js index b4ea5eb..a463be2 100644 --- a/examples/helper.js +++ b/examples/helper.js @@ -3,8 +3,8 @@ * the list of links to examples in the readme. */ -const fs = require('fs'); -const path = require('path'); +import * as fs from 'node:fs'; +import * as path from 'path:fs'; module.exports = function() { const files = fs.readdirSync(__dirname); diff --git a/examples/sections-excerpt.js b/examples/sections-excerpt.js index c870234..a8297d3 100644 --- a/examples/sections-excerpt.js +++ b/examples/sections-excerpt.js @@ -1,4 +1,4 @@ -'use strict'; + const fs = require('fs'); const path = require('path'); diff --git a/examples/sections.js b/examples/sections.js index bc6a6f3..bb7f59e 100644 --- a/examples/sections.js +++ b/examples/sections.js @@ -1,15 +1,14 @@ -'use strict'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import * as yaml from 'js-yaml'; -const fs = require('fs'); -const path = require('path'); -const yaml = require('js-yaml'); const matter = require('..'); const str = fs.readFileSync(path.join(__dirname, 'fixtures', 'sections.md')); const file = matter(str, { section: function(section, file) { if (typeof section.data === 'string' && section.data.trim() !== '') { - section.data = yaml.safeLoad(section.data); + section.data = yaml.load(section.data); } section.content = section.content.trim() + '\n'; } diff --git a/gray-matter.d.ts b/gray-matter.d.ts deleted file mode 100644 index dec9c09..0000000 --- a/gray-matter.d.ts +++ /dev/null @@ -1,114 +0,0 @@ -/** - * Takes a string or object with `content` property, extracts - * and parses front-matter from the string, then returns an object - * with `data`, `content` and other [useful properties](#returned-object). - * - * ```js - * var matter = require('gray-matter'); - * console.log(matter('---\ntitle: Home\n---\nOther stuff')); - * //=> { data: { title: 'Home'}, content: 'Other stuff' } - * ``` - * @param {Object|String} `input` String, or object with `content` string - * @param {Object} `options` - * @return {Object} - * @api public - */ -declare function matter< - I extends matter.Input, - O extends matter.GrayMatterOption ->(input: I | { content: I }, options?: O): matter.GrayMatterFile - -declare namespace matter { - type Input = string | Buffer - interface GrayMatterOption< - I extends Input, - O extends GrayMatterOption - > { - parser?: () => void - eval?: boolean - excerpt?: boolean | ((input: I, options: O) => string) - excerpt_separator?: string - engines?: { - [index: string]: - | ((input: string) => object) - | { parse: (input: string) => object; stringify?: (data: object) => string } - } - language?: string - delimiters?: string | [string, string] - } - interface GrayMatterFile { - data: { [key: string]: any } - content: string - excerpt?: string - orig: Buffer | I - language: string - matter: string - stringify(lang: string): string - } - - /** - * Stringify an object to YAML or the specified language, and - * append it to the given string. By default, only YAML and JSON - * can be stringified. See the [engines](#engines) section to learn - * how to stringify other languages. - * - * ```js - * console.log(matter.stringify('foo bar baz', {title: 'Home'})); - * // results in: - * // --- - * // title: Home - * // --- - * // foo bar baz - * ``` - * @param {String|Object} `file` The content string to append to stringified front-matter, or a file object with `file.content` string. - * @param {Object} `data` Front matter to stringify. - * @param {Object} `options` [Options](#options) to pass to gray-matter and [js-yaml]. - * @return {String} Returns a string created by wrapping stringified yaml with delimiters, and appending that to the given string. - */ - export function stringify>( - file: string | { content: string }, - data: object, - options?: GrayMatterOption - ): string - - /** - * Synchronously read a file from the file system and parse - * front matter. Returns the same object as the [main function](#matter). - * - * ```js - * var file = matter.read('./content/blog-post.md'); - * ``` - * @param {String} `filepath` file path of the file to read. - * @param {Object} `options` [Options](#options) to pass to gray-matter. - * @return {Object} Returns [an object](#returned-object) with `data` and `content` - */ - export function read>( - fp: string, - options?: GrayMatterOption - ): matter.GrayMatterFile - - /** - * Returns true if the given `string` has front matter. - * @param {String} `string` - * @param {Object} `options` - * @return {Boolean} True if front matter exists. - */ - export function test>( - str: string, - options?: GrayMatterOption - ): boolean - - /** - * Detect the language to use, if one is defined after the - * first front-matter delimiter. - * @param {String} `string` - * @param {Object} `options` - * @return {Object} Object with `raw` (actual language string), and `name`, the language with whitespace trimmed - */ - export function language>( - str: string, - options?: GrayMatterOption - ): { name: string; raw: string } -} - -export = matter diff --git a/index.js b/index.js deleted file mode 100644 index 7d49331..0000000 --- a/index.js +++ /dev/null @@ -1,228 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const sections = require('section-matter'); -const defaults = require('./lib/defaults'); -const stringify = require('./lib/stringify'); -const excerpt = require('./lib/excerpt'); -const engines = require('./lib/engines'); -const toFile = require('./lib/to-file'); -const parse = require('./lib/parse'); -const utils = require('./lib/utils'); - -/** - * Takes a string or object with `content` property, extracts - * and parses front-matter from the string, then returns an object - * with `data`, `content` and other [useful properties](#returned-object). - * - * ```js - * const matter = require('gray-matter'); - * console.log(matter('---\ntitle: Home\n---\nOther stuff')); - * //=> { data: { title: 'Home'}, content: 'Other stuff' } - * ``` - * @param {Object|String} `input` String, or object with `content` string - * @param {Object} `options` - * @return {Object} - * @api public - */ - -function matter(input, options) { - if (input === '') { - return { data: {}, content: input, excerpt: '', orig: input }; - } - - let file = toFile(input); - const cached = matter.cache[file.content]; - - if (!options) { - if (cached) { - file = Object.assign({}, cached); - file.orig = cached.orig; - return file; - } - - // only cache if there are no options passed. if we cache when options - // are passed, we would need to also cache options values, which would - // negate any performance benefits of caching - matter.cache[file.content] = file; - } - - return parseMatter(file, options); -} - -/** - * Parse front matter - */ - -function parseMatter(file, options) { - const opts = defaults(options); - const open = opts.delimiters[0]; - const close = '\n' + opts.delimiters[1]; - let str = file.content; - - if (opts.language) { - file.language = opts.language; - } - - // get the length of the opening delimiter - const openLen = open.length; - if (!utils.startsWith(str, open, openLen)) { - excerpt(file, opts); - return file; - } - - // if the next character after the opening delimiter is - // a character from the delimiter, then it's not a front- - // matter delimiter - if (str.charAt(openLen) === open.slice(-1)) { - return file; - } - - // strip the opening delimiter - str = str.slice(openLen); - const len = str.length; - - // use the language defined after first delimiter, if it exists - const language = matter.language(str, opts); - if (language.name) { - file.language = language.name; - str = str.slice(language.raw.length); - } - - // get the index of the closing delimiter - let closeIndex = str.indexOf(close); - if (closeIndex === -1) { - closeIndex = len; - } - - // get the raw front-matter block - file.matter = str.slice(0, closeIndex); - - const block = file.matter.replace(/^\s*#[^\n]+/gm, '').trim(); - if (block === '') { - file.isEmpty = true; - file.empty = file.content; - file.data = {}; - } else { - - // create file.data by parsing the raw file.matter block - file.data = parse(file.language, file.matter, opts); - } - - // update file.content - if (closeIndex === len) { - file.content = ''; - } else { - file.content = str.slice(closeIndex + close.length); - if (file.content[0] === '\r') { - file.content = file.content.slice(1); - } - if (file.content[0] === '\n') { - file.content = file.content.slice(1); - } - } - - excerpt(file, opts); - - if (opts.sections === true || typeof opts.section === 'function') { - sections(file, opts.section); - } - return file; -} - -/** - * Expose engines - */ - -matter.engines = engines; - -/** - * Stringify an object to YAML or the specified language, and - * append it to the given string. By default, only YAML and JSON - * can be stringified. See the [engines](#engines) section to learn - * how to stringify other languages. - * - * ```js - * console.log(matter.stringify('foo bar baz', {title: 'Home'})); - * // results in: - * // --- - * // title: Home - * // --- - * // foo bar baz - * ``` - * @param {String|Object} `file` The content string to append to stringified front-matter, or a file object with `file.content` string. - * @param {Object} `data` Front matter to stringify. - * @param {Object} `options` [Options](#options) to pass to gray-matter and [js-yaml]. - * @return {String} Returns a string created by wrapping stringified yaml with delimiters, and appending that to the given string. - * @api public - */ - -matter.stringify = function(file, data, options) { - if (typeof file === 'string') file = matter(file, options); - return stringify(file, data, options); -}; - -/** - * Synchronously read a file from the file system and parse - * front matter. Returns the same object as the [main function](#matter). - * - * ```js - * const file = matter.read('./content/blog-post.md'); - * ``` - * @param {String} `filepath` file path of the file to read. - * @param {Object} `options` [Options](#options) to pass to gray-matter. - * @return {Object} Returns [an object](#returned-object) with `data` and `content` - * @api public - */ - -matter.read = function(filepath, options) { - const str = fs.readFileSync(filepath, 'utf8'); - const file = matter(str, options); - file.path = filepath; - return file; -}; - -/** - * Returns true if the given `string` has front matter. - * @param {String} `string` - * @param {Object} `options` - * @return {Boolean} True if front matter exists. - * @api public - */ - -matter.test = function(str, options) { - return utils.startsWith(str, defaults(options).delimiters[0]); -}; - -/** - * Detect the language to use, if one is defined after the - * first front-matter delimiter. - * @param {String} `string` - * @param {Object} `options` - * @return {Object} Object with `raw` (actual language string), and `name`, the language with whitespace trimmed - */ - -matter.language = function(str, options) { - const opts = defaults(options); - const open = opts.delimiters[0]; - - if (matter.test(str)) { - str = str.slice(open.length); - } - - const language = str.slice(0, str.search(/\r?\n/)); - return { - raw: language, - name: language ? language.trim() : '' - }; -}; - -/** - * Expose `matter` - */ - -matter.cache = {}; -matter.clearCache = function() { - matter.cache = {}; -}; -module.exports = matter; diff --git a/lib/defaults.js b/lib/defaults.js deleted file mode 100644 index 81d9e41..0000000 --- a/lib/defaults.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -const engines = require('./engines'); -const utils = require('./utils'); - -module.exports = function(options) { - const opts = Object.assign({}, options); - - // ensure that delimiters are an array - opts.delimiters = utils.arrayify(opts.delims || opts.delimiters || '---'); - if (opts.delimiters.length === 1) { - opts.delimiters.push(opts.delimiters[0]); - } - - opts.language = (opts.language || opts.lang || 'yaml').toLowerCase(); - opts.engines = Object.assign({}, engines, opts.parsers, opts.engines); - return opts; -}; diff --git a/lib/engine.js b/lib/engine.js deleted file mode 100644 index d8f6c41..0000000 --- a/lib/engine.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -module.exports = function(name, options) { - let engine = options.engines[name] || options.engines[aliase(name)]; - if (typeof engine === 'undefined') { - throw new Error('gray-matter engine "' + name + '" is not registered'); - } - if (typeof engine === 'function') { - engine = { parse: engine }; - } - return engine; -}; - -function aliase(name) { - switch (name.toLowerCase()) { - case 'js': - case 'javascript': - return 'javascript'; - case 'coffee': - case 'coffeescript': - case 'cson': - return 'coffee'; - case 'yaml': - case 'yml': - return 'yaml'; - default: { - return name; - } - } -} diff --git a/lib/engines.js b/lib/engines.js deleted file mode 100644 index 38f993d..0000000 --- a/lib/engines.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -const yaml = require('js-yaml'); - -/** - * Default engines - */ - -const engines = exports = module.exports; - -/** - * YAML - */ - -engines.yaml = { - parse: yaml.safeLoad.bind(yaml), - stringify: yaml.safeDump.bind(yaml) -}; - -/** - * JSON - */ - -engines.json = { - parse: JSON.parse.bind(JSON), - stringify: function(obj, options) { - const opts = Object.assign({replacer: null, space: 2}, options); - return JSON.stringify(obj, opts.replacer, opts.space); - } -}; - -/** - * JavaScript - */ - -engines.javascript = { - parse: function parse(str, options, wrap) { - /* eslint no-eval: 0 */ - try { - if (wrap !== false) { - str = '(function() {\nreturn ' + str.trim() + ';\n}());'; - } - return eval(str) || {}; - } catch (err) { - if (wrap !== false && /(unexpected|identifier)/i.test(err.message)) { - return parse(str, options, false); - } - throw new SyntaxError(err); - } - }, - stringify: function() { - throw new Error('stringifying JavaScript is not supported'); - } -}; diff --git a/lib/stringify.js b/lib/stringify.js deleted file mode 100644 index b4c70a4..0000000 --- a/lib/stringify.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -const typeOf = require('kind-of'); -const getEngine = require('./engine'); -const defaults = require('./defaults'); - -module.exports = function(file, data, options) { - if (data == null && options == null) { - switch (typeOf(file)) { - case 'object': - data = file.data; - options = {}; - break; - case 'string': - return file; - default: { - throw new TypeError('expected file to be a string or object'); - } - } - } - - const str = file.content; - const opts = defaults(options); - if (data == null) { - if (!opts.data) return file; - data = opts.data; - } - - const language = file.language || opts.language; - const engine = getEngine(language, opts); - if (typeof engine.stringify !== 'function') { - throw new TypeError('expected "' + language + '.stringify" to be a function'); - } - - data = Object.assign({}, file.data, data); - const open = opts.delimiters[0]; - const close = opts.delimiters[1]; - const matter = engine.stringify(data, options).trim(); - let buf = ''; - - if (matter !== '{}') { - buf = newline(open) + newline(matter) + newline(close); - } - - if (typeof file.excerpt === 'string' && file.excerpt !== '') { - if (str.indexOf(file.excerpt.trim()) === -1) { - buf += newline(file.excerpt) + newline(close); - } - } - - return buf + newline(str); -}; - -function newline(str) { - return str.slice(-1) !== '\n' ? str + '\n' : str; -} diff --git a/lib/utils.js b/lib/utils.js deleted file mode 100644 index 96e7ce0..0000000 --- a/lib/utils.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -const stripBom = require('strip-bom-string'); -const typeOf = require('kind-of'); - -exports.define = function(obj, key, val) { - Reflect.defineProperty(obj, key, { - enumerable: false, - configurable: true, - writable: true, - value: val - }); -}; - -/** - * Returns true if `val` is a buffer - */ - -exports.isBuffer = function(val) { - return typeOf(val) === 'buffer'; -}; - -/** - * Returns true if `val` is an object - */ - -exports.isObject = function(val) { - return typeOf(val) === 'object'; -}; - -/** - * Cast `input` to a buffer - */ - -exports.toBuffer = function(input) { - return typeof input === 'string' ? Buffer.from(input) : input; -}; - -/** - * Cast `val` to a string. - */ - -exports.toString = function(input) { - if (exports.isBuffer(input)) return stripBom(String(input)); - if (typeof input !== 'string') { - throw new TypeError('expected input to be a string or buffer'); - } - return stripBom(input); -}; - -/** - * Cast `val` to an array. - */ - -exports.arrayify = function(val) { - return val ? (Array.isArray(val) ? val : [val]) : []; -}; - -/** - * Returns true if `str` starts with `substr`. - */ - -exports.startsWith = function(str, substr, len) { - if (typeof len !== 'number') len = substr.length; - return str.slice(0, len) === substr; -}; diff --git a/package.json b/package.json index c5a1fff..aab08a5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,10 @@ { - "name": "gray-matter", + "name": "@yankeeinlondon/gray-matter", + "type": "module", + "typings": "./dist/index.d.ts", + "packageManager": "pnpm@7.18.2", "description": "Parse front-matter from a string or file. Fast, reliable and easy to use. Parses YAML front matter by default, but also has support for YAML, JSON, TOML or Coffee Front-Matter, with options to set custom delimiters. Used by metalsmith, assemble, verb and many other projects.", - "version": "4.0.3", + "version": "6.2.1", "homepage": "https://github.com/jonschlinkert/gray-matter", "author": "Jon Schlinkert (https://github.com/jonschlinkert)", "contributors": [ @@ -14,44 +17,82 @@ "Pawel Kadluczka (http://blog.3d-logic.com)", "Rob Loach (http://robloach.net)", "(https://github.com/heymind)", - "Zach Whaley (http://zachwhaleys.website)" + "Zach Whaley (http://zachwhaleys.website)", + "Ken Snyder (https://ken.net)" ], - "repository": "jonschlinkert/gray-matter", + "repository": "@yankeeinlondon/gray-matter", "bugs": { "url": "https://github.com/jonschlinkert/gray-matter/issues" }, "license": "MIT", "files": [ - "gray-matter.d.ts", - "index.js", - "lib" + "package.json", + "README.md", + "dist" ], - "main": "index.js", + "types": "./dist/index.d.ts", + "module": "./dist/index.js", + "exports": { + ".": { + "require": "./dist/index.cjs", + "import": "./dist/index.js" + } + }, "engines": { - "node": ">=6.0" + "node": ">=14.0" }, "scripts": { - "test": "mocha" + "audit": "pnpm audit --fix", + "build": "tsup src/index.ts --format=esm --clean --dts", + "lint": "run-p lint:*", + "lint:src": "eslint ./src/**/*.ts --fix", + "lint:test": "eslint ./test/**/*.ts --fix", + "lint:tsc": "tsc --noEmit", + "test": "vitest", + "test:ci": "vitest run", + "watch": "tsup src/index.ts --format=esm --watch", + "release": "run-s lint release:latest test:ci audit release:bump", + "release:latest": "pnpm install", + "release:bump": "bumpp" }, "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", + "inferred-types": "^0.37.6", + "js-yaml": "^4.1.0", + "kind-of": "^6.0.3", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" }, "devDependencies": { + "@types/js-yaml": "^4.0.9", + "@types/kind-of": "^6.0.3", + "@types/vinyl": "^2.0.11", + "@typescript-eslint/eslint-plugin": "^6.12.0", + "@typescript-eslint/parser": "^6.12.0", "ansi-green": "^0.1.1", "benchmarked": "^2.0.0", - "coffeescript": "^2.2.3", + "bumpp": "^9.2.0", + "coffeescript": "^2.7.0", "delimiter-regex": "^2.0.0", + "eslint": "^8.54.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-import": "^2.29.0", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-unicorn": "^49.0.0", "extend-shallow": "^3.0.2", - "front-matter": "^2.3.0", - "gulp-format-md": "^1.0.0", - "minimist": "^1.2.0", - "mocha": "^6.1.4", - "toml": "^2.3.3", - "vinyl": "^2.1.0", - "write": "^1.0.3" + "front-matter": "^4.0.2", + "gulp-format-md": "^2.0.0", + "minimist": "^1.2.8", + "npm-run-all": "^4.1.5", + "pathe": "^1.1.1", + "prettier": "^3.1.0", + "toml": "^3.0.0", + "tsup": "^8.0.1", + "typescript": "^5.3.2", + "vinyl": "^3.0.0", + "vitest": "^0.34.6", + "vite": "^5.0.2", + "write": "^2.0.0" }, "keywords": [ "assemble", @@ -88,7 +129,6 @@ "browser": { "fs": false }, - "typings": "gray-matter.d.ts", "eslintConfig": { "rules": { "no-console": 0 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..92a908d --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,5575 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + inferred-types: + specifier: ^0.37.6 + version: 0.37.6 + js-yaml: + specifier: ^4.1.0 + version: 4.1.0 + kind-of: + specifier: ^6.0.3 + version: 6.0.3 + section-matter: + specifier: ^1.0.0 + version: 1.0.0 + strip-bom-string: + specifier: ^1.0.0 + version: 1.0.0 + +devDependencies: + '@types/js-yaml': + specifier: ^4.0.9 + version: 4.0.9 + '@types/kind-of': + specifier: ^6.0.3 + version: 6.0.3 + '@types/vinyl': + specifier: ^2.0.11 + version: 2.0.11 + '@typescript-eslint/eslint-plugin': + specifier: ^6.12.0 + version: 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': + specifier: ^6.12.0 + version: 6.12.0(eslint@8.54.0)(typescript@5.3.2) + ansi-green: + specifier: ^0.1.1 + version: 0.1.1 + benchmarked: + specifier: ^2.0.0 + version: 2.0.0 + bumpp: + specifier: ^9.2.0 + version: 9.2.0 + coffeescript: + specifier: ^2.7.0 + version: 2.7.0 + delimiter-regex: + specifier: ^2.0.0 + version: 2.0.0 + eslint: + specifier: ^8.54.0 + version: 8.54.0 + eslint-config-prettier: + specifier: ^9.0.0 + version: 9.0.0(eslint@8.54.0) + eslint-plugin-import: + specifier: ^2.29.0 + version: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0) + eslint-plugin-prettier: + specifier: ^5.0.1 + version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.54.0)(prettier@3.1.0) + eslint-plugin-promise: + specifier: ^6.1.1 + version: 6.1.1(eslint@8.54.0) + eslint-plugin-unicorn: + specifier: ^49.0.0 + version: 49.0.0(eslint@8.54.0) + extend-shallow: + specifier: ^3.0.2 + version: 3.0.2 + front-matter: + specifier: ^4.0.2 + version: 4.0.2 + gulp-format-md: + specifier: ^2.0.0 + version: 2.0.0 + minimist: + specifier: ^1.2.8 + version: 1.2.8 + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 + pathe: + specifier: ^1.1.1 + version: 1.1.1 + prettier: + specifier: ^3.1.0 + version: 3.1.0 + toml: + specifier: ^3.0.0 + version: 3.0.0 + tsup: + specifier: ^8.0.1 + version: 8.0.1(typescript@5.3.2) + typescript: + specifier: ^5.3.2 + version: 5.3.2 + vinyl: + specifier: ^3.0.0 + version: 3.0.0 + vite: + specifier: ^5.0.2 + version: 5.0.2(@types/node@20.10.0) + vitest: + specifier: ^0.34.6 + version: 0.34.6 + write: + specifier: ^2.0.0 + version: 2.0.0 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@babel/code-frame@7.23.4: + resolution: {integrity: sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm64@0.19.7: + resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm@0.19.7: + resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-x64@0.19.7: + resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-arm64@0.19.7: + resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-x64@0.19.7: + resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-arm64@0.19.7: + resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-x64@0.19.7: + resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm64@0.19.7: + resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm@0.19.7: + resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ia32@0.19.7: + resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-loong64@0.19.7: + resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-mips64el@0.19.7: + resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ppc64@0.19.7: + resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-riscv64@0.19.7: + resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-s390x@0.19.7: + resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-x64@0.19.7: + resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/netbsd-x64@0.19.7: + resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/openbsd-x64@0.19.7: + resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + + /@esbuild/sunos-x64@0.19.7: + resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-arm64@0.19.7: + resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-ia32@0.19.7: + resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-x64@0.19.7: + resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.54.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.3: + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.54.0: + resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: 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} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@jsdevtools/ez-spawn@3.0.4: + resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==} + engines: {node: '>=10'} + dependencies: + call-me-maybe: 1.0.2 + cross-spawn: 7.0.3 + string-argv: 0.3.2 + type-detect: 4.0.8 + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.2 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + dev: true + + /@rollup/rollup-android-arm-eabi@4.5.2: + resolution: {integrity: sha512-ee7BudTwwrglFYSc3UnqInDDjCLWHKrFmGNi4aK7jlEyg4CyPa1DCMrZfsN1O13YT76UFEqXz2CoN7BCGpUlJw==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.5.2: + resolution: {integrity: sha512-xOuhj9HHtn8128ir8veoQsBbAUBasDbHIBniYTEx02pAmu9EXL+ZjJqngnNEy6ZgZ4h1JwL33GMNu3yJL5Mzow==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.5.2: + resolution: {integrity: sha512-NTGJWoL8bKyqyWFn9/RzSv4hQ4wTbaAv0lHHRwf4OnpiiP4P8W0jiXbm8Nc5BCXKmWAwuvJY82mcIU2TayC20g==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.5.2: + resolution: {integrity: sha512-hlKqj7bpPvU15sZo4za14u185lpMzdwWLMc9raMqPK4wywt0wR23y1CaVQ4oAFXat3b5/gmRntyfpwWTKl+vvA==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.5.2: + resolution: {integrity: sha512-7ZIZx8c3u+pfI0ohQsft/GywrXez0uR6dUP0JhBuCK3sFO5TfdLn/YApnVkvPxuTv3+YKPIZend9Mt7Cz6sS3Q==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.5.2: + resolution: {integrity: sha512-7Pk/5mO11JW/cH+a8lL/i0ZxmRGrbpYqN0VwO2DHhU+SJWWOH2zE1RAcPaj8KqiwC8DCDIJOSxjV9+9lLb6aeA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.5.2: + resolution: {integrity: sha512-KrRnuG5phJx756e62wxvWH2e+TK84MP2IVuPwfge+GBvWqIUfVzFRn09TKruuQBXzZp52Vyma7FjMDkwlA9xpg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.5.2: + resolution: {integrity: sha512-My+53GasPa2D2tU5dXiyHYwrELAUouSfkNlZ3bUKpI7btaztO5vpALEs3mvFjM7aKTvEbc7GQckuXeXIDKQ0fg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.5.2: + resolution: {integrity: sha512-/f0Q6Sc+Vw54Ws6N8fxaEe4R7at3b8pFyv+O/F2VaQ4hODUJcRUcCBJh6zuqtgQQt7w845VTkGLFgWZkP3tUoQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.5.2: + resolution: {integrity: sha512-NCKuuZWLht6zj7s6EIFef4BxCRX1GMr83S2W4HPCA0RnJ4iHE4FS1695q6Ewoa6A9nFjJe1//yUu0kgBU07Edw==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.5.2: + resolution: {integrity: sha512-J5zL3riR4AOyU/J3M/i4k/zZ8eP1yT+nTmAKztCXJtnI36jYH0eepvob22mAQ/kLwfsK2TB6dbyVY1F8c/0H5A==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.5.2: + resolution: {integrity: sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@types/chai-subset@1.3.5: + resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} + dependencies: + '@types/chai': 4.3.11 + + /@types/chai@4.3.11: + resolution: {integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==} + + /@types/expect@1.20.4: + resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} + dev: true + + /@types/js-yaml@4.0.9: + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/kind-of@6.0.3: + resolution: {integrity: sha512-JEwIR1oOC99PjUTd1LUHxq3gd6w9GGJ8nYUTHMfwOLszw6GuQB4ezsnk3WEeMOtOFx12Jk2JWrGttSnwUD4hrQ==} + dependencies: + '@types/node': 20.10.0 + dev: true + + /@types/node@20.10.0: + resolution: {integrity: sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==} + dependencies: + undici-types: 5.26.5 + + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true + + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + dev: true + + /@types/vinyl@2.0.11: + resolution: {integrity: sha512-vPXzCLmRp74e9LsP8oltnWKTH+jBwt86WgRUb4Pc9Lf3pkMVGyvIo2gm9bODeGfCay2DBB/hAWDuvf07JcK4rw==} + dependencies: + '@types/expect': 1.20.4 + '@types/node': 20.10.0 + dev: true + + /@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/scope-manager': 6.12.0 + '@typescript-eslint/type-utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.12.0 + debug: 4.3.4 + eslint: 8.54.0 + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.12.0(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.12.0 + '@typescript-eslint/types': 6.12.0 + '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.12.0 + debug: 4.3.4 + eslint: 8.54.0 + typescript: 5.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@6.12.0: + resolution: {integrity: sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.12.0 + '@typescript-eslint/visitor-keys': 6.12.0 + dev: true + + /@typescript-eslint/type-utils@6.12.0(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) + '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) + debug: 4.3.4 + eslint: 8.54.0 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.12.0: + resolution: {integrity: sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.12.0(typescript@5.3.2): + resolution: {integrity: sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.12.0 + '@typescript-eslint/visitor-keys': 6.12.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.12.0(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.12.0 + '@typescript-eslint/types': 6.12.0 + '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) + eslint: 8.54.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.12.0: + resolution: {integrity: sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.12.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /@vitest/expect@0.34.6: + resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + dependencies: + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + chai: 4.3.10 + dev: true + + /@vitest/runner@0.34.6: + resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + dependencies: + '@vitest/utils': 0.34.6 + p-limit: 4.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot@0.34.6: + resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + dependencies: + magic-string: 0.30.5 + pathe: 1.1.1 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy@0.34.6: + resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + dependencies: + tinyspy: 2.2.0 + dev: true + + /@vitest/utils@0.34.6: + resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + dependencies: + diff-sequences: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + dev: true + + /acorn-walk@8.3.0: + resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + engines: {node: '>=0.4.0'} + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + + /add-filename-increment@1.0.0: + resolution: {integrity: sha512-pFV8VZX8jxuVMIycKvGZkWF/ihnUubu9lbQVnOnZWp7noVxbKQTNj7zG2y9fXdPcuZ6lAN3Drr517HaivGCjdQ==} + engines: {node: '>=8'} + dependencies: + strip-filename-increment: 2.0.1 + dev: true + + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-bgblack@0.1.1: + resolution: {integrity: sha512-tp8M/NCmSr6/skdteeo9UgJ2G1rG88X3ZVNZWXUxFw4Wh0PAGaAAWQS61sfBt/1QNcwMTY3EBKOMPujwioJLaw==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-bgblue@0.1.1: + resolution: {integrity: sha512-R8JmX2Xv3+ichUQE99oL+LvjsyK+CDWo/BtVb4QUz3hOfmf2bdEmiDot3fQcpn2WAHW3toSRdjSLm6bgtWRDlA==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-bgcyan@0.1.1: + resolution: {integrity: sha512-6SByK9q2H978bmqzuzA5NPT1lRDXl3ODLz/DjC4URO5f/HqK7dnRKfoO/xQLx/makOz7zWIbRf6+Uf7bmaPSkQ==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-bggreen@0.1.1: + resolution: {integrity: sha512-8TRtOKmIPOuxjpklrkhUbqD2NnVb4WZQuIjXrT+TGKFKzl7NrL7wuNvEap3leMt2kQaCngIN1ZzazSbJNzF+Aw==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-bgmagenta@0.1.1: + resolution: {integrity: sha512-UZYhobiGAlV4NiwOlKAKbkCyxOl1PPZNvdIdl/Ce5by45vwiyNdBetwHk/AjIpo1Ji9z+eE29PUBAjjfVmz5SA==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-bgred@0.1.1: + resolution: {integrity: sha512-BpPHMnYmRBhcjY5knRWKjQmPDPvYU7wrgBSW34xj7JCH9+a/SEIV7+oSYVOgMFopRIadOz9Qm4zIy+mEBvUOPA==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-bgwhite@0.1.1: + resolution: {integrity: sha512-KIF19t+HOYOorUnHTOhZpeZ3bJsjzStBG2hSGM0WZ8YQQe4c7lj9CtwnucscJDPrNwfdz6GBF+pFkVfvHBq6uw==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-bgyellow@0.1.1: + resolution: {integrity: sha512-WyRoOFSIvOeM7e7YdlSjfAV82Z6K1+VUVbygIQ7C/VGzWYuO/d30F0PG7oXeo4uSvSywR0ozixDQvtXJEorq4Q==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-black@0.1.1: + resolution: {integrity: sha512-hl7re02lWus7lFOUG6zexhoF5gssAfG5whyr/fOWK9hxNjUFLTjhbU/b4UHWOh2dbJu9/STSUv+80uWYzYkbTQ==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-blue@0.1.1: + resolution: {integrity: sha512-8Um59dYNDdQyoczlf49RgWLzYgC2H/28W3JAIyOAU/+WkMcfZmaznm+0i1ikrE0jME6Ypk9CJ9CY2+vxbPs7Fg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-bold@0.1.1: + resolution: {integrity: sha512-wWKwcViX1E28U6FohtWOP4sHFyArELHJ2p7+3BzbibqJiuISeskq6t7JnrLisUngMF5zMhgmXVw8Equjzz9OlA==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-colors@0.2.0: + resolution: {integrity: sha512-ScRNUT0TovnYw6+Xo3iKh6G+VXDw2Ds7ZRnMIuKBgHY02DgvT2T2K22/tc/916Fi0W/5Z1RzDaHQwnp75hqdbA==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-bgblack: 0.1.1 + ansi-bgblue: 0.1.1 + ansi-bgcyan: 0.1.1 + ansi-bggreen: 0.1.1 + ansi-bgmagenta: 0.1.1 + ansi-bgred: 0.1.1 + ansi-bgwhite: 0.1.1 + ansi-bgyellow: 0.1.1 + ansi-black: 0.1.1 + ansi-blue: 0.1.1 + ansi-bold: 0.1.1 + ansi-cyan: 0.1.1 + ansi-dim: 0.1.1 + ansi-gray: 0.1.1 + ansi-green: 0.1.1 + ansi-grey: 0.1.1 + ansi-hidden: 0.1.1 + ansi-inverse: 0.1.1 + ansi-italic: 0.1.1 + ansi-magenta: 0.1.1 + ansi-red: 0.1.1 + ansi-reset: 0.1.1 + ansi-strikethrough: 0.1.1 + ansi-underline: 0.1.1 + ansi-white: 0.1.1 + ansi-yellow: 0.1.1 + lazy-cache: 2.0.2 + dev: true + + /ansi-cyan@0.1.1: + resolution: {integrity: sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-dim@0.1.1: + resolution: {integrity: sha512-zAfb1fokXsq4BoZBkL0eK+6MfFctbzX3R4UMcoWrL1n2WHewFKentTvOZv2P11u6P4NtW/V47hVjaN7fJiefOg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-gray@0.1.1: + resolution: {integrity: sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-green@0.1.1: + resolution: {integrity: sha512-WJ70OI4jCaMy52vGa/ypFSKFb/TrYNPaQ2xco5nUwE0C5H8piume/uAZNNdXXiMQ6DbRmiE7l8oNBHu05ZKkrw==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-grey@0.1.1: + resolution: {integrity: sha512-+J1nM4lC+whSvf3T4jsp1KR+C63lypb+VkkwtLQMc1Dlt+nOvdZpFT0wwFTYoSlSwCcLUAaOpHF6kPkYpSa24A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-hidden@0.1.1: + resolution: {integrity: sha512-8gB1bo9ym9qZ/Obvrse1flRsfp2RE+40B23DhQcKxY+GSeaOJblLnzBOxzvmLTWbi5jNON3as7wd9rC0fNK73Q==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-inverse@0.1.1: + resolution: {integrity: sha512-Kq8Z0dBRhQhDMN/Rso1Nu9niwiTsRkJncfJZXiyj7ApbfJrGrrubHXqXI37feJZkYcIx6SlTBdNCeK0OQ6X6ag==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-italic@0.1.1: + resolution: {integrity: sha512-jreCxifSAqbaBvcibeQxcwhQDbEj7gF69XnpA6x83qbECEBaRBD1epqskrmov1z4B+zzQuEdwbWxgzvhKa+PkA==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-magenta@0.1.1: + resolution: {integrity: sha512-A1Giu+HRwyWuiXKyXPw2AhG1yWZjNHWO+5mpt+P+VWYkmGRpLPry0O5gmlJQEvpjNpl4RjFV7DJQ4iozWOmkbQ==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-red@0.1.1: + resolution: {integrity: sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-reset@0.1.1: + resolution: {integrity: sha512-n+D0qD3B+h/lP0dSwXX1SZMoXufdUVotLMwUuvXa50LtBAh3f+WV8b5nFMfLL/hgoPBUt+rG/pqqzF8krlZKcw==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-strikethrough@0.1.1: + resolution: {integrity: sha512-gWkLPDvHH2pC9YEKqp8dIl0mg3sRglMPvioqGDIOXiwxjxUwIJ1gF86E2o4R5yLNh8IAkwHbaMtASkJfkQ2hIA==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /ansi-underline@0.1.1: + resolution: {integrity: sha512-D+Bzwio/0/a0Fu5vJzrIT6bFk43TW46vXfSvzysOTEHcXOAUJTVMHWDbELIzGU4AVxVw2rCTb7YyWS4my2cSKQ==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-white@0.1.1: + resolution: {integrity: sha512-DJHaF2SRzBb9wZBgqIJNjjTa7JUJTO98sHeTS1sDopyKKRopL1KpaJ20R6W2f/ZGras8bYyIZDtNwYOVXNgNFg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-wrap@0.1.0: + resolution: {integrity: sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==} + engines: {node: '>=0.10.0'} + dev: true + + /ansi-yellow@0.1.1: + resolution: {integrity: sha512-6E3D4BQLXHLl3c/NwirWVZ+BCkMq2qsYxdeAGGOijKrx09FaqU+HktFL6QwAwNvgJiMLnv6AQ2C1gFZx0h1CBg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi@0.3.1: + resolution: {integrity: sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==} + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /arr-diff@4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-flatten@1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array-unique@0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + /assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: true + + /async-array-reduce@0.2.1: + resolution: {integrity: sha512-/ywTADOcaEnwiAnOEi0UB/rAcIq5bTFfCV9euv3jLYFUMmy6KvKccTQUnLlp8Ensmfj43wHSmbGiPqjsZ6RhNA==} + engines: {node: '>=0.10.0'} + dev: true + + /atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true + + /autolinker@0.28.1: + resolution: {integrity: sha512-zQAFO1Dlsn69eXaO6+7YZc+v84aquQKbwpzCE3L0stj56ERn9hutFxPopViLjo9G+rWwjozRhgS5KJ25Xy19cQ==} + dependencies: + gulp-header: 1.8.12 + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base@0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.1 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: true + + /benchmark@2.1.4: + resolution: {integrity: sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==} + dependencies: + lodash: 4.17.21 + platform: 1.3.6 + dev: true + + /benchmarked@2.0.0: + resolution: {integrity: sha512-KeP6SAd7SpHpaWZavg1o/u3QRPpe1FKoSopxqZw8x8k21R77O02euMwetAfXjEgotxE+5ogktM0VK9tbnfpinA==} + engines: {node: '>=0.10.0'} + dependencies: + ansi: 0.3.1 + benchmark: 2.1.4 + component-emitter: 1.3.1 + define-property: 1.0.0 + file-reader: 1.1.1 + has-values: 1.0.0 + inflection: 1.13.4 + is-glob: 4.0.3 + kind-of: 5.1.0 + log-utils: 0.2.1 + micromatch: 3.1.10 + mixin-deep: 1.3.2 + resolve-glob: 1.0.0 + vinyl: 2.2.1 + transitivePeerDependencies: + - supports-color + dev: true + + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.52 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces@2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /brilliant-errors@0.7.3: + resolution: {integrity: sha512-WT9BkAze4SUOJfr7LUwJWNDAvynEAvUMvMPuFKu8QQKnRq+WMx3DAtHfOBJjHmHRxf748JY3CNVytSk6HH2yGg==} + engines: {node: '>=14.0.0'} + dependencies: + bumpp: 8.2.1 + callsites: 4.1.0 + inferred-types: 0.37.6 + vitest: 0.25.8 + transitivePeerDependencies: + - '@edge-runtime/vm' + - '@vitest/browser' + - '@vitest/ui' + - happy-dom + - jsdom + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: false + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /bumpp@8.2.1: + resolution: {integrity: sha512-4tHKsWC2mqHQvdjZ4AXgVhS2xMsz8qQ4zYt87vGRXW5tqAjrYa/UJqy7s/dGYI2OIe9ghBdiFhKpyKEX9SXffg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jsdevtools/ez-spawn': 3.0.4 + cac: 6.7.14 + fast-glob: 3.3.2 + kleur: 4.1.5 + prompts: 2.4.2 + semver: 7.5.4 + dev: false + + /bumpp@9.2.0: + resolution: {integrity: sha512-pgp7y3jp33QTaXFVDrE0IKuZF5Y8EsIz+ywZXFALW2nD+ZD+4crxJe/GypBQBoJuZrr5dc6TGrR3wl7fk3+C6w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jsdevtools/ez-spawn': 3.0.4 + c12: 1.5.1 + cac: 6.7.14 + fast-glob: 3.3.2 + prompts: 2.4.2 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + + /bundle-require@4.0.2(esbuild@0.19.7): + resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + dependencies: + esbuild: 0.19.7 + load-tsconfig: 0.2.5 + dev: true + + /c12@1.5.1: + resolution: {integrity: sha512-BWZRJgDEveT8uI+cliCwvYSSSSvb4xKoiiu5S0jaDbKBopQLQF7E+bq9xKk1pTcG+mUa3yXuFO7bD9d8Lr9Xxg==} + dependencies: + chokidar: 3.5.3 + defu: 6.1.3 + dotenv: 16.3.1 + giget: 1.1.3 + jiti: 1.21.0 + mlly: 1.4.2 + ohash: 1.1.3 + pathe: 1.1.1 + perfect-debounce: 1.0.0 + pkg-types: 1.0.3 + rc9: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + /cache-base@1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.1 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: true + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: true + + /call-me-maybe@1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /callsites@4.1.0: + resolution: {integrity: sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==} + engines: {node: '>=12.20'} + dev: false + + /camel-case@1.2.2: + resolution: {integrity: sha512-rUug78lL8mqStaLehmH2F0LxMJ2TM9fnPFxb+gFkgyUjUM/1o2wKTQtalypHnkb2cFwH/DENBw7YEAOYLgSMxQ==} + dependencies: + sentence-case: 1.1.3 + upper-case: 1.1.3 + dev: true + + /chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: true + + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + + /class-utils@0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: true + + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /clone-buffer@1.0.0: + resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} + engines: {node: '>= 0.10'} + dev: true + + /clone-stats@0.0.1: + resolution: {integrity: sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==} + dev: true + + /clone-stats@1.0.0: + resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==} + dev: true + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + + /clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + dev: true + + /cloneable-readable@1.1.3: + resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==} + dependencies: + inherits: 2.0.4 + process-nextick-args: 2.0.1 + readable-stream: 2.3.8 + dev: true + + /coffeescript@2.7.0: + resolution: {integrity: sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /collection-visit@1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /concat-with-sourcemaps@1.1.0: + resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + dependencies: + source-map: 0.6.1 + dev: true + + /copy-descriptor@0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: true + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cross-spawn@6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true + + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: true + + /define-property@0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 0.1.7 + dev: true + + /define-property@1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.3 + dev: true + + /define-property@2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.3 + isobject: 3.0.1 + dev: true + + /defu@6.1.3: + resolution: {integrity: sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==} + dev: true + + /delimiter-regex@2.0.0: + resolution: {integrity: sha512-EtGkq9TgEZlFACc/NvgwIidQ1wkEupWWbAIJTr9gi4TJUZOvHY8TdXd3i8/dan66BufB1/V6bI7rRW/zvGoVKw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 1.1.4 + isobject: 2.1.0 + dev: true + + /destr@2.0.2: + resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==} + dev: true + + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + dev: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /error-symbol@0.1.0: + resolution: {integrity: sha512-VyjaKxUmeDX/m2lxm/aknsJ1GWDWUO2Ze2Ad8S1Pb9dykAm9TjSKp5CjrNyltYqZ5W/PO6TInAmO2/BfwMyT1g==} + engines: {node: '>=0.10.0'} + dev: true + + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.13 + dev: true + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: false + + /esbuild@0.19.7: + resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.7 + '@esbuild/android-arm64': 0.19.7 + '@esbuild/android-x64': 0.19.7 + '@esbuild/darwin-arm64': 0.19.7 + '@esbuild/darwin-x64': 0.19.7 + '@esbuild/freebsd-arm64': 0.19.7 + '@esbuild/freebsd-x64': 0.19.7 + '@esbuild/linux-arm': 0.19.7 + '@esbuild/linux-arm64': 0.19.7 + '@esbuild/linux-ia32': 0.19.7 + '@esbuild/linux-loong64': 0.19.7 + '@esbuild/linux-mips64el': 0.19.7 + '@esbuild/linux-ppc64': 0.19.7 + '@esbuild/linux-riscv64': 0.19.7 + '@esbuild/linux-s390x': 0.19.7 + '@esbuild/linux-x64': 0.19.7 + '@esbuild/netbsd-x64': 0.19.7 + '@esbuild/openbsd-x64': 0.19.7 + '@esbuild/sunos-x64': 0.19.7 + '@esbuild/win32-arm64': 0.19.7 + '@esbuild/win32-ia32': 0.19.7 + '@esbuild/win32-x64': 0.19.7 + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-prettier@9.0.0(eslint@8.54.0): + resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.54.0 + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2) + debug: 3.2.7 + eslint: 8.54.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0): + resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.54.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.54.0)(prettier@3.1.0): + resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.54.0 + eslint-config-prettier: 9.0.0(eslint@8.54.0) + prettier: 3.1.0 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.5 + dev: true + + /eslint-plugin-promise@6.1.1(eslint@8.54.0): + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 8.54.0 + dev: true + + /eslint-plugin-unicorn@49.0.0(eslint@8.54.0): + resolution: {integrity: sha512-0fHEa/8Pih5cmzFW5L7xMEfUTvI9WKeQtjmKpTUmY+BiFCDxkxrTdnURJOHKykhtwIeyYsxnecbGvDCml++z4Q==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.52.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.54.0 + esquery: 1.5.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.5.4 + strip-indent: 3.0.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.54.0: + resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.54.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.23.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + 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 + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /expand-brackets@2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /expand-tilde@1.2.2: + resolution: {integrity: sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==} + engines: {node: '>=0.10.0'} + dependencies: + os-homedir: 1.0.2 + dev: true + + /expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + dependencies: + homedir-polyfill: 1.0.3 + dev: true + + /extend-shallow@1.1.4: + resolution: {integrity: sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 1.1.0 + dev: true + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + + /extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: true + + /extglob@2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + + /fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /file-reader@1.1.1: + resolution: {integrity: sha512-X0z8fkODWp6+h0UZ11Qiz7l0isieZL39KS++/a8UMsTg7PYRyz1pTumJBQP7rym2gVUrhJq5cYkWrrVDXJx69w==} + engines: {node: '>=0.10.0'} + dependencies: + camel-case: 1.2.2 + extend-shallow: 2.0.1 + lazy-cache: 1.0.4 + map-files: 0.8.2 + read-yaml: 1.1.0 + dev: true + + /fill-range@4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: true + + /fill-range@6.0.0: + resolution: {integrity: sha512-HaePWycCxz/O/VsefR6fRhhZ+64gSwUAy5GIN1gX+8Z+JPFWvNsz2qaeYLq/hS3RgC06MlkZFSE+4UObHvbpXw==} + engines: {node: '>=4.0'} + dependencies: + is-number: 7.0.0 + to-regex-range: 4.0.3 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true + + /fragment-cache@0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: true + + /front-matter@4.0.2: + resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} + dependencies: + js-yaml: 3.14.1 + dev: true + + /fs-exists-sync@0.1.0: + resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==} + engines: {node: '>=0.10.0'} + dev: true + + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: true + + /gfm-code-block-regex@1.0.0: + resolution: {integrity: sha512-aP0XZhL1LNyCT3r89k4MfUCT5FYcUAWbBb2HmFlBvOgYVtDXGYqyG6pRmxwJqwbLRGyK/kdt8IrsJVmuxPVvDw==} + engines: {node: '>=0.10.0'} + dev: true + + /gfm-code-blocks@1.0.0: + resolution: {integrity: sha512-MdJip0Y/0UArlhvBE5heNAFgR/aJr5rdcnodC6nJK1yPKmEfhe89h9LZVn724mqcslAj5rOYT07oQoHr1tmDuw==} + engines: {node: '>=0.10.0'} + dependencies: + gfm-code-block-regex: 1.0.0 + dev: true + + /giget@1.1.3: + resolution: {integrity: sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==} + hasBin: true + dependencies: + colorette: 2.0.20 + defu: 6.1.3 + https-proxy-agent: 7.0.2 + mri: 1.2.0 + node-fetch-native: 1.4.1 + pathe: 1.1.1 + tar: 6.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /global-modules@0.2.3: + resolution: {integrity: sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==} + engines: {node: '>=0.10.0'} + dependencies: + global-prefix: 0.1.5 + is-windows: 0.2.0 + dev: true + + /global-modules@1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + dev: true + + /global-prefix@0.1.5: + resolution: {integrity: sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==} + engines: {node: '>=0.10.0'} + dependencies: + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 0.2.0 + which: 1.3.1 + dev: true + + /global-prefix@1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + dev: true + + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /gulp-format-md@2.0.0: + resolution: {integrity: sha512-hn5CxC/Pzog+HYzoS5tx9404Dw3d/E3TZcPSbcCoL3PJNN2PN43rycut1AGLi1NiLAqI4E8t1xNCbLfof6mP9A==} + engines: {node: '>=8'} + dependencies: + pretty-remarkable: 1.0.0 + remarkable: 1.7.4 + sections: 1.0.0 + through2: 2.0.5 + dev: true + + /gulp-header@1.8.12: + resolution: {integrity: sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==} + deprecated: Removed event-stream from gulp-header + dependencies: + concat-with-sourcemaps: 1.1.0 + lodash.template: 4.5.0 + through2: 2.0.5 + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-glob@0.1.1: + resolution: {integrity: sha512-WMHzb7oCwDcMDngWy0b+viLjED8zvSi5d4/YdBetADHX/rLH+noJaRTytuyN6thTxxM7lK+FloogQHHdOOR+7g==} + engines: {node: '>=0.10.0'} + dependencies: + is-glob: 2.0.1 + dev: true + + /has-glob@1.0.0: + resolution: {integrity: sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==} + engines: {node: '>=0.10.0'} + dependencies: + is-glob: 3.1.0 + dev: true + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has-value@0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: true + + /has-value@1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: true + + /has-values@0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: true + + /has-values@1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: true + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + dependencies: + parse-passwd: 1.0.0 + dev: true + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inferred-types@0.37.6: + resolution: {integrity: sha512-CfL5g1wR5rVwX2K5S6wSL+h9eODScum/LBwlhGRrcBIvfYppvUQM0aeRJ1BZS+QE38kGzd3v+U526+nQR7ZUkg==} + dependencies: + brilliant-errors: 0.7.3 + transitivePeerDependencies: + - '@edge-runtime/vm' + - '@vitest/browser' + - '@vitest/ui' + - happy-dom + - jsdom + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: false + + /inflection@1.13.4: + resolution: {integrity: sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==} + engines: {'0': node >= 0.4.0} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /info-symbol@0.1.0: + resolution: {integrity: sha512-qkc9wjLDQ+dYYZnY5uJXGNNHyZ0UOMDUnhvy0SEZGVVYmQ5s4i8cPAin2MbU6OxJgi8dfj/AnwqPx0CJE6+Lsw==} + engines: {node: '>=0.10.0'} + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + + /is-accessor-descriptor@1.0.1: + resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} + engines: {node: '>= 0.10'} + dependencies: + hasown: 2.0.0 + dev: true + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: true + + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-data-descriptor@1.0.1: + resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.0 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-descriptor@0.1.7: + resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} + engines: {node: '>= 0.4'} + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + dev: true + + /is-descriptor@1.0.3: + resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} + engines: {node: '>= 0.4'} + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + dev: true + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + /is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: true + + /is-extglob@1.0.0: + resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==} + engines: {node: '>=0.10.0'} + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-glob@2.0.1: + resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 1.0.0 + dev: true + + /is-glob@3.1.0: + resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number@3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + dev: true + + /is-valid-glob@0.3.0: + resolution: {integrity: sha512-CvG8EtJZ8FyzVOGPzrDorzyN65W1Ld8BVnqshRCah6pFIsprGx3dKgFtjLn/Vw9kGqR4OlR84U7yhT9ZVTyWIQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-valid-glob@1.0.0: + resolution: {integrity: sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-windows@0.2.0: + resolution: {integrity: sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==} + engines: {node: '>=0.10.0'} + dev: true + + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /isobject@2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + dependencies: + isarray: 1.0.0 + dev: true + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true + + /joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /kind-of@1.1.0: + resolution: {integrity: sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==} + engines: {node: '>=0.10.0'} + dev: true + + /kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of@4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of@5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: false + + /lazy-cache@1.0.4: + resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==} + engines: {node: '>=0.10.0'} + dev: true + + /lazy-cache@2.0.2: + resolution: {integrity: sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==} + engines: {node: '>=0.10.0'} + dependencies: + set-getter: 0.1.1 + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /list-item@2.0.0: + resolution: {integrity: sha512-hxCRzLagZIT8txXzLxcefV7oHelVzLlZ76W5DMNHqW8x/42O6D6f9m6Tt09qhLsOHynUXGe4YwZySEmGjHgOTw==} + engines: {node: '>=4'} + dependencies: + fill-range: 6.0.0 + is-number: 7.0.0 + dev: true + + /load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + dev: true + + /load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash._reinterpolate@3.0.0: + resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + + /lodash.template@4.5.0: + resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} + dependencies: + lodash._reinterpolate: 3.0.0 + lodash.templatesettings: 4.2.0 + dev: true + + /lodash.templatesettings@4.2.0: + resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} + dependencies: + lodash._reinterpolate: 3.0.0 + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /log-ok@0.1.1: + resolution: {integrity: sha512-cc8VrkS6C+9TFuYAwuHpshrcrGRAv7d0tUJ0GdM72ZBlKXtlgjUZF84O+OhQUdiVHoF7U/nVxwpjOdwUJ8d3Vg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-green: 0.1.1 + success-symbol: 0.1.0 + dev: true + + /log-utils@0.2.1: + resolution: {integrity: sha512-udyegKoMz9eGfpKAX//Khy7sVAZ8b1F7oLDnepZv/1/y8xTvsyPgqQrM94eG8V0vcc2BieYI2kVW4+aa6m+8Qw==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-colors: 0.2.0 + error-symbol: 0.1.0 + info-symbol: 0.1.0 + log-ok: 0.1.1 + success-symbol: 0.1.0 + time-stamp: 1.1.0 + warning-symbol: 0.1.0 + dev: true + + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + + /lower-case@1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-files@0.8.2: + resolution: {integrity: sha512-8tkW/pB2jmMvlpR6OFrWqXh9Lr7lqffSfnV8daPQGfd8B0NP2uDD22QtjiVGaoynpUd40+2IMIYnDXzOrFZBJw==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 2.1.0 + lazy-cache: 1.0.4 + matched: 0.4.4 + vinyl: 1.2.0 + dev: true + + /map-visit@1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: true + + /markdown-utils@1.0.0: + resolution: {integrity: sha512-d09qgYTIYrLEwMgVeaQpQMp+PpPZGsunX5IHY1mFEWLLT9U2tmlzvcUBIEnYNzsE48OKOzXyPWGOVaO3oLTOwQ==} + engines: {node: '>=4'} + dependencies: + is-number: 7.0.0 + list-item: 2.0.0 + dev: true + + /matched@0.4.4: + resolution: {integrity: sha512-zpasnbB5vQkvb0nfcKV0zEoGgMtV7atlWR1Vk3E8tEKh6EicMseKtVV+5vc+zsZwvDlcNMKlKK/CVOEeAalYRQ==} + engines: {node: '>= 0.12.0'} + dependencies: + arr-union: 3.1.0 + async-array-reduce: 0.2.1 + extend-shallow: 2.0.1 + fs-exists-sync: 0.1.0 + glob: 7.2.3 + has-glob: 0.1.1 + is-valid-glob: 0.3.0 + lazy-cache: 2.0.2 + resolve-dir: 0.1.1 + dev: true + + /matched@1.0.2: + resolution: {integrity: sha512-7ivM1jFZVTOOS77QsR+TtYHH0ecdLclMkqbf5qiJdX2RorqfhsL65QHySPZgDE0ZjHoh+mQUNHTanNXIlzXd0Q==} + engines: {node: '>= 0.12.0'} + dependencies: + arr-union: 3.1.0 + async-array-reduce: 0.2.1 + glob: 7.2.3 + has-glob: 1.0.0 + is-valid-glob: 1.0.0 + resolve-dir: 1.0.1 + dev: true + + /memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /micromatch@3.1.10: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: true + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + dev: true + + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: true + + /mixin-deep@1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: true + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + dependencies: + acorn: 8.11.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.2 + dev: true + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: true + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /nanomatch@1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + dev: true + + /node-fetch-native@1.4.1: + resolution: {integrity: sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==} + dev: true + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + dependencies: + ansi-styles: 3.2.1 + chalk: 2.4.2 + cross-spawn: 6.0.5 + memorystream: 0.3.1 + minimatch: 3.1.2 + pidtree: 0.3.1 + read-pkg: 3.0.0 + shell-quote: 1.8.1 + string.prototype.padend: 3.1.5 + dev: true + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-copy@0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: true + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object-visit@1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + dev: true + + /object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /os-homedir@1.0.2: + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.4 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + dev: true + + /pascalcase@0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + /perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: true + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.2 + pathe: 1.1.1 + dev: true + + /platform@1.3.6: + resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} + dev: true + + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /posix-character-classes@0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.0.0 + yaml: 2.3.4 + dev: true + + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + + /prettier@3.1.0: + resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + + /pretty-remarkable@1.0.0: + resolution: {integrity: sha512-uFNIULmMgcMZs++dCRwMLoQdwkjprIleWEOYk6LzwoRZ874QVBKut+SCFQsYsWz1Eh+9wYdI86XsI5TQiMRfHA==} + engines: {node: '>=4.0'} + dependencies: + markdown-utils: 1.0.0 + dev: true + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + dev: true + + /rc9@2.1.1: + resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==} + dependencies: + defu: 6.1.3 + destr: 2.0.2 + flat: 5.0.2 + dev: true + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /read-yaml@1.1.0: + resolution: {integrity: sha512-bDA8pyfGurfEHlgy/wm4vPmcCNW4QPsf86u9JvOixYWc8YD2O985hmZwZrBlzfvf/J4vKGTOWq/CThixACPRPA==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + js-yaml: 3.14.1 + dev: true + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /regex-not@1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: true + + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /relative@3.0.2: + resolution: {integrity: sha512-Q5W2qeYtY9GbiR8z1yHNZ1DGhyjb4AnLEjt8iE6XfcC1QIu+FAtj3HQaO0wH28H1mX6cqNLvAqWhP402dxJGyA==} + engines: {node: '>= 0.8.0'} + dependencies: + isobject: 2.1.0 + dev: true + + /remarkable@1.7.4: + resolution: {integrity: sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==} + engines: {node: '>= 0.10.0'} + hasBin: true + dependencies: + argparse: 1.0.10 + autolinker: 0.28.1 + dev: true + + /remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: true + + /repeat-element@1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: true + + /repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: true + + /replace-ext@0.0.1: + resolution: {integrity: sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==} + engines: {node: '>= 0.4'} + dev: true + + /replace-ext@1.0.1: + resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} + engines: {node: '>= 0.10'} + dev: true + + /replace-ext@2.0.0: + resolution: {integrity: sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==} + engines: {node: '>= 10'} + dev: true + + /resolve-dir@0.1.1: + resolution: {integrity: sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 1.2.2 + global-modules: 0.2.3 + dev: true + + /resolve-dir@1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-glob@1.0.0: + resolution: {integrity: sha512-wSW9pVGJRs89k0wEXhM7C6+va9998NsDhgc0Y+6Nv8hrHsu0hUS7Ug10J1EiVtU6N2tKlSNvx9wLihL8Ao22Lg==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-valid-glob: 1.0.0 + matched: 1.0.2 + relative: 3.0.2 + resolve-dir: 1.0.1 + dev: true + + /resolve-url@0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /rollup@4.5.2: + resolution: {integrity: sha512-CRK1uoROBfkcqrZKyaFcqCcZWNsvJ6yVYZkqTlRocZhO2s5yER6Z3f/QaYtO8RGyloPnmhwgzuPQpNGeK210xQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.5.2 + '@rollup/rollup-android-arm64': 4.5.2 + '@rollup/rollup-darwin-arm64': 4.5.2 + '@rollup/rollup-darwin-x64': 4.5.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.5.2 + '@rollup/rollup-linux-arm64-gnu': 4.5.2 + '@rollup/rollup-linux-arm64-musl': 4.5.2 + '@rollup/rollup-linux-x64-gnu': 4.5.2 + '@rollup/rollup-linux-x64-musl': 4.5.2 + '@rollup/rollup-win32-arm64-msvc': 4.5.2 + '@rollup/rollup-win32-ia32-msvc': 4.5.2 + '@rollup/rollup-win32-x64-msvc': 4.5.2 + fsevents: 2.3.3 + dev: true + + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-regex: 1.1.4 + dev: true + + /safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: true + + /section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + dev: false + + /sections@1.0.0: + resolution: {integrity: sha512-fIM8mM3bPainFNKxQn3K+fCl2ZPYdo13GrUDPmjvQfK3b3jeC1E4c0t/irS0qcsG6JLTJNxjNOX6k10URz0ZJg==} + engines: {node: '>=0.10.0'} + dependencies: + gfm-code-blocks: 1.0.0 + sort-by-value: 0.1.0 + dev: true + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /sentence-case@1.1.3: + resolution: {integrity: sha512-laa/UDTPXsrQnoN/Kc8ZO7gTeEjMsuPiDgUCk9N0iINRZvqAMCTXjGl8+tD27op1eF/JHbdUlEUmovDh6AX7sA==} + dependencies: + lower-case: 1.1.4 + dev: true + + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: true + + /set-getter@0.1.1: + resolution: {integrity: sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==} + engines: {node: '>=0.10.0'} + dependencies: + to-object-path: 0.3.0 + dev: true + + /set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: true + + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + dev: true + + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /snapdragon-node@2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: true + + /snapdragon-util@3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /snapdragon@0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /sort-by-value@0.1.0: + resolution: {integrity: sha512-hTkhmGnyccPZcgIGtvC32Oipl2Qf8rRd/G1beErsgJurdO9i35PDeeR+vEsbpvGibzQuNB1P2yhFn9E/daD2rw==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + isobject: 3.0.1 + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map-resolve@0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: true + + /source-map-url@0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: true + + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + dev: true + + /split-string@3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + + /static-extend@0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: true + + /std-env@3.5.0: + resolution: {integrity: sha512-JGUEaALvL0Mf6JCfYnJOTcobY+Nc7sG/TemDRBqCA0wEr4DER7zDchaaixTlmOxAjG1uRJmX82EQcxwTQTkqVA==} + dev: true + + /streamx@2.15.5: + resolution: {integrity: sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==} + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + dev: true + + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + /string.prototype.padend@3.1.5: + resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: false + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-filename-increment@2.0.1: + resolution: {integrity: sha512-+v5xsiTTsdYqkPj7qz1zlngIsjZedhHDi3xp/9bMurV8kXe9DAr732gNVqtt4X8sI3hOqS3nlFfps5gyVcux6w==} + engines: {node: '>=8'} + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + dependencies: + acorn: 8.11.2 + + /success-symbol@0.1.0: + resolution: {integrity: sha512-7S6uOTxPklNGxOSbDIg4KlVLBQw1UiGVyfCUYgYxrZUKRblUkmGj7r8xlfQoFudvqLv6Ap5gd76/IIFfI9JG2A==} + engines: {node: '>=0.10.0'} + dev: true + + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 + dev: true + + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + + /teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + dependencies: + streamx: 2.15.5 + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + dev: true + + /time-stamp@1.1.0: + resolution: {integrity: sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==} + engines: {node: '>=0.10.0'} + dev: true + + /tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + + /tinypool@0.3.1: + resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==} + engines: {node: '>=14.0.0'} + dev: false + + /tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@1.1.1: + resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} + engines: {node: '>=14.0.0'} + dev: false + + /tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + dev: true + + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + + /to-object-path@0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /to-regex-range@2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + dev: true + + /to-regex-range@4.0.3: + resolution: {integrity: sha512-AtJgwCeygrdcfleD1nolmv8TSJcsPvSsvnqQRzc1AkEa//+RRTseKZpaXOfZk2/U1B+bz0sRpkaF1oHX5YmHKg==} + engines: {node: '>=4.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /to-regex@3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: true + + /toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + dev: true + + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.1 + dev: true + + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + + /ts-api-utils@1.0.3(typescript@5.3.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.3.2 + dev: true + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + + /tsup@8.0.1(typescript@5.3.2): + resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.2(esbuild@0.19.7) + cac: 6.7.14 + chokidar: 3.5.3 + debug: 4.3.4 + esbuild: 0.19.7 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 4.0.2 + resolve-from: 5.0.0 + rollup: 4.5.2 + source-map: 0.8.0-beta.0 + sucrase: 3.34.0 + tree-kill: 1.2.2 + typescript: 5.3.2 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: true + + /typescript@5.3.2: + resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + dev: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + /union-value@1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: true + + /unset-value@1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: true + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /upper-case@1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /urix@0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + + /use@3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /vinyl@1.2.0: + resolution: {integrity: sha512-Ci3wnR2uuSAWFMSglZuB8Z2apBdtOyz8CV7dC6/U1XbltXBC+IuutUkXQISz01P+US2ouBuesSbV6zILZ6BuzQ==} + engines: {node: '>= 0.9'} + dependencies: + clone: 1.0.4 + clone-stats: 0.0.1 + replace-ext: 0.0.1 + dev: true + + /vinyl@2.2.1: + resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} + engines: {node: '>= 0.10'} + dependencies: + clone: 2.1.2 + clone-buffer: 1.0.0 + clone-stats: 1.0.0 + cloneable-readable: 1.1.3 + remove-trailing-separator: 1.1.0 + replace-ext: 1.0.1 + dev: true + + /vinyl@3.0.0: + resolution: {integrity: sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==} + engines: {node: '>=10.13.0'} + dependencies: + clone: 2.1.2 + clone-stats: 1.0.0 + remove-trailing-separator: 1.1.0 + replace-ext: 2.0.0 + teex: 1.0.1 + dev: true + + /vite-node@0.34.6(@types/node@20.10.0): + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.2 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 5.0.2(@types/node@20.10.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@4.5.0(@types/node@20.10.0): + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.10.0 + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /vite@5.0.2(@types/node@20.10.0): + resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.10.0 + esbuild: 0.19.7 + postcss: 8.4.31 + rollup: 4.5.2 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitest@0.25.8: + resolution: {integrity: sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==} + engines: {node: '>=v14.16.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/chai': 4.3.11 + '@types/chai-subset': 1.3.5 + '@types/node': 20.10.0 + acorn: 8.11.2 + acorn-walk: 8.3.0 + chai: 4.3.10 + debug: 4.3.4 + local-pkg: 0.4.3 + source-map: 0.6.1 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.3.1 + tinyspy: 1.1.1 + vite: 4.5.0(@types/node@20.10.0) + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: false + + /vitest@0.34.6: + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.11 + '@types/chai-subset': 1.3.5 + '@types/node': 20.10.0 + '@vitest/expect': 0.34.6 + '@vitest/runner': 0.34.6 + '@vitest/snapshot': 0.34.6 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + acorn: 8.11.2 + acorn-walk: 8.3.0 + cac: 6.7.14 + chai: 4.3.10 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.5 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.5.0 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.7.0 + vite: 5.0.2(@types/node@20.10.0) + vite-node: 0.34.6(@types/node@20.10.0) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /warning-symbol@0.1.0: + resolution: {integrity: sha512-1S0lwbHo3kNUKA4VomBAhqn4DPjQkIKSdbOin5K7EFUQNwyIKx+wZMGXKI53RUjla8V2B8ouQduUlgtx8LoSMw==} + engines: {node: '>=0.10.0'} + dev: true + + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true + + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: true + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /write@2.0.0: + resolution: {integrity: sha512-yam9TAqN8sAZokECAejo9HpT2j2s39OgK8i8yxadrFBVo+iSWLfnipRVFulfAw1d2dz5vSuGmlMHYRKG4fysOA==} + engines: {node: '>=10'} + dependencies: + add-filename-increment: 1.0.0 + dev: true + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true diff --git a/src/defaults.ts b/src/defaults.ts new file mode 100644 index 0000000..582696b --- /dev/null +++ b/src/defaults.ts @@ -0,0 +1,19 @@ +import engines from "./engines"; +import { GrayMatterOption } from "./types"; +import {utils} from "./utils"; + +const options = >(options: O) => { + const opts = Object.assign({}, options); + + // ensure that delimiters are an array + opts.delimiters = utils.arrayify(opts.delims || opts.delimiters || "---"); + if (opts.delimiters.length === 1) { + opts.delimiters.push(opts.delimiters[0]); + } + + opts.language = (opts.language || opts.lang || "yaml").toLowerCase(); + opts.engines = Object.assign({}, engines, opts.parser, opts.engines); + return opts as O; +}; + +export default options; diff --git a/src/engine.ts b/src/engine.ts new file mode 100644 index 0000000..a839b92 --- /dev/null +++ b/src/engine.ts @@ -0,0 +1,33 @@ +function aliase(name: any) { + switch (name.toLowerCase()) { + case "js": + case "javascript": { + return "javascript"; + } + case "coffee": + case "coffeescript": + case "cson": { + return "coffee"; + } + case "yaml": + case "yml": { + return "yaml"; + } + default: { + return name; + } + } +} + +const engine = (name: any, options: any) => { + let engine = options.engines[name] || options.engines[aliase(name)]; + if (engine === undefined) { + throw new TypeError('gray-matter engine "' + name + '" is not registered'); + } + if (typeof engine === "function") { + engine = { parse: engine }; + } + return engine; +}; + +export default engine; diff --git a/src/engines.ts b/src/engines.ts new file mode 100644 index 0000000..72e2688 --- /dev/null +++ b/src/engines.ts @@ -0,0 +1,41 @@ +import yaml from "js-yaml"; +import parse from "./parse"; + +/** + * Default engines + */ + +const engines = { + yaml: { + parse: yaml.load.bind(yaml), + stringify: yaml.dump.bind(yaml) + }, + json: { + parse: JSON.parse.bind(JSON), + stringify: function(obj: any, options: any) { + const opts = Object.assign({replacer: null, space: 2}, options); + return JSON.stringify(obj, opts.replacer, opts.space); + } + }, + + javascript(str: any, options: any, wrap: any) { + /* eslint no-eval: 0 */ + try { + if (wrap !== false) { + str = "(function() {\nreturn " + str.trim() + ";\n}());"; + } + return eval(str) || {}; + } catch (error) { + if (wrap !== false && /(unexpected|identifier)/i.test((error as Error).message)) { + return parse(str, options, false); + } + throw new SyntaxError((error as Error).message); + } + }, + + stringify() { + throw new Error("stringifying JavaScript is not supported"); + } +}; + +export default engines; diff --git a/lib/excerpt.js b/src/excerpt.ts similarity index 59% rename from lib/excerpt.js rename to src/excerpt.ts index 14d9904..41cf66c 100644 --- a/lib/excerpt.js +++ b/src/excerpt.ts @@ -1,15 +1,14 @@ -'use strict'; +import defaults from "./defaults"; +import { GrayMatterOption } from "./types"; -const defaults = require('./defaults'); - -module.exports = function(file, options) { +const excerpt = (file: any, options: GrayMatterOption) => { const opts = defaults(options); if (file.data == null) { file.data = {}; } - if (typeof opts.excerpt === 'function') { + if (typeof opts.excerpt === "function") { return opts.excerpt(file, opts); } @@ -18,9 +17,10 @@ module.exports = function(file, options) { return file; } - const delimiter = typeof opts.excerpt === 'string' - ? opts.excerpt - : (sep || opts.delimiters[0]); + const delimiter = + typeof opts.excerpt === "string" + ? opts.excerpt + : sep || (opts.delimiters as any)[0]; // if enabled, get the excerpt defined after front-matter const idx = file.content.indexOf(delimiter); @@ -30,3 +30,5 @@ module.exports = function(file, options) { return file; }; + +export default excerpt; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..17d9eb4 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,184 @@ +/* eslint-disable no-use-before-define */ +import * as fs from "node:fs"; +import defaults from "./defaults"; +import sfy from "./stringify"; +import excerpt from "./excerpt"; +import toFile from "./to-file"; +import parse from "./parse"; +import { utils } from "./utils"; +import { createFnWithProps } from "inferred-types"; +import sections from "section-matter"; + +import { GrayMatterApi, GrayMatterFile, GrayMatterFn } from "./types"; + +const matterDict: GrayMatterApi = { + cache: {}, + + read(filepath, options) { + const str = fs.readFileSync(filepath, "utf8"); + const file = matterFn(str, options as any); + file.path = filepath; + return file; + }, + + stringify(file, data, options) { + return typeof file === "string" + ? sfy(matterFn(file, options as any), data, options as any) + : sfy(file, data, options as any); + }, + + language(str, options) { + const opts = defaults(options as any); + const open = opts?.delimiters ? opts.delimiters[0] : "---"; + + if (matterDict.test(str)) { + str = str.slice(open.length); + } + + const language = str.slice(0, str.search(/\r?\n/)); + + return { + raw: language, + name: language ? language.trim() : "", + }; + }, + + parseMatter(file, options) { + const opts = defaults(options as any); + const open = opts.delimiters ? opts.delimiters[0] : "---"; + const close = "\n" + opts.delimiters[1]; + const f = ( + typeof file === "string" + ? { + content: file, + path: "", + language: "", + data: {}, + contents: undefined, + matter: "", + orig: "", + } + : file + ) as GrayMatterFile; + + if (opts.language) { + f.language = opts.language; + } + + // get the length of the opening delimiter + const openLen = open.length; + if (!utils.startsWith(f.content, open, openLen)) { + excerpt(file, opts); + return file; + } + + // if the next character after the opening delimiter is + // a character from the delimiter, then it's not a front- + // matter delimiter + if (f.content.charAt(openLen) === open.slice(-1)) { + return file; + } + + // strip the opening delimiter + f.content = f.content.slice(openLen); + const len = f.content.length; + + // use the language defined after first delimiter, if it exists + // eslint-disable-next-line no-use-before-define + const language = matter.language(f.content, opts) || opts.language; + if (language.name) { + f.language = language.name; + f.content = f.content.slice(language.raw.length); + } + + // get the index of the closing delimiter + let closeIndex = f.content.indexOf(close); + if (closeIndex === -1) { + closeIndex = len; + } + + // get the raw front-matter block + f.matter = f.content.slice(0, closeIndex); + + const block = f.matter.replaceAll(/^\s*#[^\n]+/gm, "").trim(); + if (block === "") { + f.isEmpty = true; + f.empty = f.content; + f.data = {}; + } else { + // create file.data by parsing the raw file.matter block + f.data = parse(f.language, f.matter, opts); + } + + // update file.content + if (closeIndex === len) { + f.content = ""; + } else { + f.content = f.content.slice(closeIndex + close.length); + if (f.content[0] === "\r") { + f.content = f.content.slice(1); + } + if (f.content[0] === "\n") { + f.content = f.content.slice(1); + } + } + + excerpt(f, opts); + + if (opts?.sections === true || typeof opts.section === "function") { + sections(f, opts.section); + } + return f; + }, + + test(str, options): boolean { + return utils.startsWith(str, defaults(options as any).delimiters[0]); + }, + + clearCache() { + matterDict.cache = {}; + }, +}; + +/** + * Takes a string or object with `content` property, extracts + * and parses front-matter from the string, then returns an object + * with `data`, `content` and other [useful properties](#returned-object). + * + * ```js + * const matter = require('gray-matter'); + * console.log(matter('---\ntitle: Home\n---\nOther stuff')); + * //=> { data: { title: 'Home'}, content: 'Other stuff' } + * ``` + * @api public + */ +const matterFn: GrayMatterFn = (input, options) => { + if (input === "") { + return { data: {}, content: input, excerpt: "", orig: input }; + } + + let file = toFile(input); + const cached = matterDict.cache[file.content]; + + if (!options) { + if (cached) { + file = Object.assign({}, cached); + file.orig = cached.orig; + return file; + } + + // only cache if there are no options passed. if we cache when options + // are passed, we would need to also cache options values, which would + // negate any performance benefits of caching + matterDict.cache[file.content] = file; + } + + return matterDict.parseMatter(file, options); +}; + +export const matter = createFnWithProps(matterFn, matterDict) as GrayMatterApi & + GrayMatterFn; +export default matter; + +export { default as engines } from "./engines"; +export { utils } from "./utils"; diff --git a/lib/parse.js b/src/parse.ts similarity index 50% rename from lib/parse.js rename to src/parse.ts index e10ea9b..555a5e1 100644 --- a/lib/parse.js +++ b/src/parse.ts @@ -1,13 +1,14 @@ -'use strict'; -const getEngine = require('./engine'); -const defaults = require('./defaults'); +import getEngine from "./engine"; +import defaults from "./defaults"; -module.exports = function(language, str, options) { +const parse = (language: any, str: string, options: any) => { const opts = defaults(options); const engine = getEngine(language, opts); - if (typeof engine.parse !== 'function') { + if (typeof engine.parse !== "function") { throw new TypeError('expected "' + language + '.parse" to be a function'); } return engine.parse(str, opts); }; + +export default parse; diff --git a/src/shims.d.ts b/src/shims.d.ts new file mode 100644 index 0000000..3108c54 --- /dev/null +++ b/src/shims.d.ts @@ -0,0 +1,2 @@ +declare module "strip-bom-string"; +declare module "section-matter"; diff --git a/src/stringify.ts b/src/stringify.ts new file mode 100644 index 0000000..f814915 --- /dev/null +++ b/src/stringify.ts @@ -0,0 +1,68 @@ +import typeOf from "kind-of"; +import getEngine from "./engine"; +import defaults from "./defaults"; +import { GrayMatterOption, Input } from "./types"; + +function newline(str: any) { + return str.slice(-1) === "\n" ? str : str + "\n"; +} + +const stringify = >( + file: any, + data: Record = {}, + options: O = {} as O +) => { + if (data == null && options == null) { + switch (typeOf(file)) { + case "object": { + data = file.data; + options = {} as O; + break; + } + case "string": { + return file; + } + default: { + throw new TypeError("expected file to be a string or object"); + } + } + } + + const str = file.content; + const opts = defaults(options); + if (data == null) { + if (!(opts as any).data) {return file;} + data = (opts as any)?.data; + } + + const language = file.language || opts.language; + const engine = getEngine(language, opts); + if (typeof engine.stringify !== "function") { + throw new TypeError('expected "' + language + '.stringify" to be a function'); + } + + data = Object.assign({}, file.data, data); + const open = opts?.delimiters + ? opts.delimiters[0] + : opts?.delims ? opts?.delims[0] : undefined; + const close = opts?.delimiters + ? opts.delimiters[1] + ? opts.delimiters[1] + : opts?.delims ? opts.delims[1] : undefined + : undefined; + + const matter = engine.stringify(data, options).trim(); + let buf = ""; + + if (matter !== "{}") { + buf = newline(open) + newline(matter) + newline(close); + } + + if (typeof file.excerpt === "string" && file.excerpt !== "" && !str.includes(file.excerpt.trim())) { + buf += newline(file.excerpt) + newline(close); + } + + return buf + newline(str); +}; + +export default stringify; diff --git a/lib/to-file.js b/src/to-file.ts similarity index 57% rename from lib/to-file.js rename to src/to-file.ts index 799bb5d..9a46bc1 100644 --- a/lib/to-file.js +++ b/src/to-file.ts @@ -1,20 +1,18 @@ -'use strict'; - -const typeOf = require('kind-of'); -const stringify = require('./stringify'); -const utils = require('./utils'); +import typeOf from "kind-of"; +import stringify from "./stringify"; +import {utils} from "./utils"; /** * Normalize the given value to ensure an object is returned * with the expected properties. */ -module.exports = function(file) { - if (typeOf(file) !== 'object') { +const toFile = (file: any) => { + if (typeOf(file) !== "object") { file = { content: file }; } - if (typeOf(file.data) !== 'object') { + if (typeOf(file.data) !== "object") { file.data = {}; } @@ -25,10 +23,10 @@ module.exports = function(file) { } // set non-enumerable properties on the file object - utils.define(file, 'orig', utils.toBuffer(file.content)); - utils.define(file, 'language', file.language || ''); - utils.define(file, 'matter', file.matter || ''); - utils.define(file, 'stringify', function(data, options) { + utils.define(file, "orig", utils.toBuffer(file.content)); + utils.define(file, "language", file.language || ""); + utils.define(file, "matter", file.matter || ""); + utils.define(file, "stringify", (data: Record, options: any) => { if (options && options.language) { file.language = options.language; } @@ -38,6 +36,8 @@ module.exports = function(file) { // strip BOM and ensure that "file.content" is a string file.content = utils.toString(file.content); file.isEmpty = false; - file.excerpt = ''; + file.excerpt = ""; return file; }; + +export default toFile; diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..e34ed3c --- /dev/null +++ b/src/types.ts @@ -0,0 +1,123 @@ +export type Input = string | Buffer; + +export interface GrayMatterFile { + path: string; + data: { [key: string]: any }; + content: string; + contents: any; + excerpt?: string; + orig: I; + language: string; + matter: string; + isEmpty?: boolean; + empty?: any; + stringify(lang: string): string; +} + +export interface GrayMatterOption< + I extends Input, + O extends GrayMatterOption +> { + parser?: (...args: A) => R; + eval?: boolean; + excerpt?: boolean | ((input: GrayMatterFile, options: O) => string); + excerpt_separator?: string; + sections?: boolean; + section?: any; + safeLoad?: boolean; + engines?: { + [index: string]: + | ((input: string) => object) + | { + parse: (input: string) => object; + stringify?: (data: object) => string; + }; + }; + language?: string; + /** @deprecated use `language` instead */ + lang?: string; + delimiters?: string | string[]; + /** @deprecated use `delimiters` instead */ + delims?: string | string[]; +} + +/** + * Takes a string or object with `content` property, extracts + * and parses front-matter from the string, then returns an object + * with `data`, `content` and other [useful properties](#returned-object). + * + * ```js + * var matter = require('gray-matter'); + * console.log(matter('---\ntitle: Home\n---\nOther stuff')); + * //=> { data: { title: 'Home'}, content: 'Other stuff' } + * ``` + */ +export type GrayMatterFn = >( + input: I | { content: I }, + options?: O +) => GrayMatterFile; + +export interface GrayMatterApi { + /** + * Detect the language to use, if on eis defined after the first + * front-matter delimiter. + */ + language>( + str: string, + options?: GrayMatterOption + ): { name: string; raw: string; [key: string]: any }; + + /** + * Returns `true` if the given _string_ has front-matter. + */ + test>( + str: string, + options?: GrayMatterOption + ): boolean; + + /** + * Synchronously read a file from the file system and parse + * front matter. Returns the same object as the [main function](#matter). + * + * ```js + * var file = matter.read('./content/blog-post.md'); + * ``` + */ + read>( + fp: string, + options?: GrayMatterOption + ): GrayMatterFile; + + /** + * Stringify an object to YAML or the specified language, and + * append it to the given string. By default, only YAML and JSON + * can be stringified. See the [engines](#engines) section to learn + * how to stringify other languages. + * + * ```js + * console.log(matter.stringify('foo bar baz', {title: 'Home'})); + * // results in: + * // --- + * // title: Home + * // --- + * // foo bar baz + * ``` + */ + stringify>( + file: string | GrayMatterFile, + data?: object, + options?: GrayMatterOption + ): string; + + /** + * Parses the gray-matter + */ + parseMatter>( + file: string | GrayMatterFile, + options?: GrayMatterOption + ): any; + + clearCache(): void; + + cache: Record; +} diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..20f4f83 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,55 @@ +import stripBom from "strip-bom-string"; +import typeOf from "kind-of"; + +export const utils = { + define: (obj: any, key: any, val: any) => { + Reflect.defineProperty(obj, key, { + enumerable: false, + configurable: true, + writable: true, + value: val + }); + }, + /** + * Returns true if `val` is a buffer + */ + isBuffer: (val: any) => { + return typeOf(val) === "buffer"; + }, + /** + * Returns true if `val` is an object + */ + isObject: (val: any) => { + return typeOf(val) === "object"; + }, + /** + * Cast `input` to a buffer + */ + toBuffer(input: any) { + return typeof input === "string" ? Buffer.from(input) : input; + }, + /** + * Cast `val` to a string. + */ + toString(input: any) { + if (utils.isBuffer(input)) {return stripBom(String(input));} + if (typeof input !== "string") { + throw new TypeError("expected input to be a string or buffer"); + } + return stripBom(input); + }, + /** + * Cast `val` to an array. + */ + arrayify(val: any) { + return val ? (Array.isArray(val) ? val : [val]) : []; + }, + /** + * Returns true if `str` starts with `substr`. + */ + startsWith(str: string, substr: string, len?: number) { + if (typeof len !== "number") {len = substr.length;} + return str.slice(0, len) === substr; + } +}; + diff --git a/test/empty.test.ts b/test/empty.test.ts new file mode 100644 index 0000000..53ccc6a --- /dev/null +++ b/test/empty.test.ts @@ -0,0 +1,35 @@ +import { expect, it, describe } from "vitest"; + +import { matter } from "../src/index"; + +describe("gray-matter", function () { + it("should work with empty front-matter", function () { + var file1 = matter("---\n---\nThis is content"); + expect(file1.content).toEqual("This is content"); + expect(file1.data).toEqual({}); + + var file2 = matter("---\n\n---\nThis is content"); + expect(file2.content).toEqual("This is content"); + expect(file2.data).toEqual({}); + + var file3 = matter("---\n\n\n\n\n\n---\nThis is content"); + expect(file3.content).toEqual("This is content"); + expect(file3.data).toEqual({}); + }); + + it.skip("should add content with empty front matter to file.empty", function () { + expect( + matter("---\n---").empty, + `empty prop is: ${matter("---\n---").empty}\n` + ).toEqual("---\n---"); + }); + + it("should update file.isEmpty to true", function () { + expect(matter("---\n---").isEmpty).toEqual(true); + }); + + it.skip("should work when front-matter has comments", function () { + const fixture = "---\n # this is a comment\n# another one\n---"; + expect(matter(fixture).empty).toBe(fixture); + }); +}); diff --git a/test/excerpt.test.ts b/test/excerpt.test.ts new file mode 100644 index 0000000..67d6e59 --- /dev/null +++ b/test/excerpt.test.ts @@ -0,0 +1,70 @@ +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +import { expect, it, describe } from "vitest"; + +import { matter } from "../src/index"; + +describe(".excerpt", function () { + it("should get an excerpt after front matter", function () { + var file = matter("---\nabc: xyz\n---\nfoo\nbar\nbaz\n---\ncontent", { + excerpt: true, + }); + + expect(file.matter).toEqual("\nabc: xyz"); + expect(file.content).toEqual("foo\nbar\nbaz\n---\ncontent"); + expect(file.excerpt).toEqual("foo\nbar\nbaz\n"); + expect(file.data.abc).toEqual("xyz"); + }); + + it("should not get excerpt when disabled", function () { + var file = matter("---\nabc: xyz\n---\nfoo\nbar\nbaz\n---\ncontent"); + + expect(file.matter).toEqual("\nabc: xyz"); + expect(file.content).toEqual("foo\nbar\nbaz\n---\ncontent"); + expect(file.excerpt).toEqual(""); + expect(file.data.abc).toEqual("xyz"); + }); + + it("should use a custom separator", function () { + var file = matter( + "---\nabc: xyz\n---\nfoo\nbar\nbaz\n\ncontent", + { + excerpt_separator: "", + } + ); + + expect(file.matter).toEqual("\nabc: xyz"); + expect(file.content).toEqual("foo\nbar\nbaz\n\ncontent"); + expect(file.excerpt).toEqual("foo\nbar\nbaz\n"); + expect(file.data.abc).toEqual("xyz"); + }); + + it("should use a custom separator when no front-matter exists", function () { + var file = matter("foo\nbar\nbaz\n\ncontent", { + excerpt_separator: "", + }); + + expect(file.matter).toEqual(""); + expect(file.content).toEqual("foo\nbar\nbaz\n\ncontent"); + expect(file.excerpt).toEqual("foo\nbar\nbaz\n"); + expect(file.data).toEqual({}); + }); + + it("should use a custom function to get excerpt", function () { + const file = matter("---\nabc: xyz\n---\nfoo\nbar\nbaz\n---\ncontent", { + excerpt: (f: any) => { + f.excerpt = "custom"; + }, + } as any); + + expect(file.matter).toEqual("\nabc: xyz"); + expect(file.content).toEqual("foo\nbar\nbaz\n---\ncontent"); + expect(file.excerpt).toEqual("custom"); + expect(file.data.abc).toEqual("xyz"); + }); +}); diff --git a/test/language.test.ts b/test/language.test.ts new file mode 100644 index 0000000..158bbf4 --- /dev/null +++ b/test/language.test.ts @@ -0,0 +1,42 @@ +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +import { expect, it, describe } from "vitest"; + +import { matter } from "../src/index"; + +describe(".language", function () { + it("should detect the name of the language to parse", function () { + expect(matter.language("---\nfoo: bar\n---")).toEqual({ + raw: "", + name: "", + }); + expect(matter.language("---js\nfoo: bar\n---")).toEqual({ + raw: "js", + name: "js", + }); + expect(matter.language("---coffee\nfoo: bar\n---")).toEqual({ + raw: "coffee", + name: "coffee", + }); + }); + + it("should work around whitespace", function () { + expect(matter.language("--- \nfoo: bar\n---")).toEqual({ + raw: " ", + name: "", + }); + expect(matter.language("--- js \nfoo: bar\n---")).toEqual({ + raw: " js ", + name: "js", + }); + expect(matter.language("--- coffee \nfoo: bar\n---")).toEqual({ + raw: " coffee ", + name: "coffee", + }); + }); +}); diff --git a/test/matter-empty.js b/test/matter-empty.js deleted file mode 100644 index edc5b7e..0000000 --- a/test/matter-empty.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -require('mocha'); -var assert = require('assert'); -var utils = require('../lib/utils'); -var matter = require('..'); - -describe('gray-matter', function() { - it('should work with empty front-matter', function() { - var file1 = matter('---\n---\nThis is content'); - assert.equal(file1.content, 'This is content'); - assert.deepEqual(file1.data, {}); - - var file2 = matter('---\n\n---\nThis is content'); - assert.equal(file2.content, 'This is content'); - assert.deepEqual(file2.data, {}); - - var file3 = matter('---\n\n\n\n\n\n---\nThis is content'); - assert.equal(file3.content, 'This is content'); - assert.deepEqual(file3.data, {}); - }); - - it('should add content with empty front matter to file.empty', function() { - assert.deepEqual(matter('---\n---').empty, '---\n---'); - }); - - it('should update file.isEmpty to true', function() { - assert.deepEqual(matter('---\n---').isEmpty, true); - }); - - it('should work when front-matter has comments', function() { - const fixture = '---\n # this is a comment\n# another one\n---'; - assert.deepEqual(matter(fixture).empty, fixture); - }); -}); diff --git a/test/matter-test.test.ts b/test/matter-test.test.ts new file mode 100644 index 0000000..9c08b0d --- /dev/null +++ b/test/matter-test.test.ts @@ -0,0 +1,23 @@ +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +import { expect, it, describe } from "vitest"; + +import { matter } from "../src/index"; + +describe(".test", function () { + it("should return `true` if the string has front-matter:", function () { + expect(matter.test("---\nabc: xyz\n---")).toBeTruthy(); + expect( + !matter.test("---\nabc: xyz\n---", { delimiters: "~~~" }) + ).toBeTruthy(); + expect( + matter.test("~~~\nabc: xyz\n~~~", { delimiters: "~~~" }) + ).toBeTruthy(); + expect(!matter.test("\nabc: xyz\n---")).toBeTruthy(); + }); +}); diff --git a/test/matter-windows.js b/test/matter-windows.js deleted file mode 100644 index d5881d7..0000000 --- a/test/matter-windows.js +++ /dev/null @@ -1,87 +0,0 @@ -'use strict'; - -require('mocha'); -var assert = require('assert'); -var utils = require('../lib/utils'); -var matter = require('..'); - -describe('gray-matter (windows carriage returns)', function() { - it('should extract YAML front matter', function() { - var actual = matter('---\r\nabc: xyz\r\n---'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - assert.deepEqual(actual.data.abc, 'xyz'); - }); - - it('should cache orig string as a buffer on the "orig property"', function() { - var fixture = '---\r\nabc: xyz\r\n---'; - var actual = matter(fixture); - assert(utils.isBuffer(actual.orig)); - assert.equal(actual.orig.toString(), fixture); - }); - - it('should throw parsing errors', function() { - assert.throws(function() { - matter('---whatever\r\nabc: xyz\r\n---'); - }); - }); - - it('should throw an error when a string is not passed:', function() { - assert.throws(function() { - matter(); - }); - }); - - it('should return an object when the string is 0 length:', function() { - assert(utils.isObject(matter(''))); - }); - - it('should extract YAML front matter and content', function() { - var fixture = '---\r\nabc: xyz\r\nversion: 2\r\n---\r\n\r\nThis is an alert\r\n'; - var actual = matter(fixture); - assert.deepEqual(actual.data, {abc: 'xyz', version: 2}); - assert.equal(actual.content, '\r\nThis is an alert\r\n'); - assert.equal(actual.orig.toString(), fixture); - }); - - it('should use a custom delimiter as a string.', function() { - var fixture = '~~~\r\nabc: xyz\r\nversion: 2\r\n~~~\r\n\r\nThis is an alert\r\n'; - var actual = matter(fixture, {delims: '~~~'}); - assert.deepEqual(actual.data, {abc: 'xyz', version: 2}); - assert.equal(actual.content, '\r\nThis is an alert\r\n'); - assert.equal(actual.orig.toString(), fixture); - }); - - it('should use custom delimiters as an array.', function() { - var fixture = '~~~\r\nabc: xyz\r\nversion: 2\r\n~~~\r\n\r\nThis is an alert\r\n'; - var actual = matter(fixture, {delims: ['~~~']}); - assert.deepEqual(actual.data, {abc: 'xyz', version: 2}); - assert.equal(actual.content, '\r\nThis is an alert\r\n'); - assert.equal(actual.orig.toString(), fixture); - }); - - it('should correctly identify delimiters and ignore strings that look like delimiters.', function() { - var fixture = '---\r\nname: "troublesome --- value"\r\n---\r\nhere is some content\r\n'; - var actual = matter(fixture); - assert.deepEqual(actual.data, {name: 'troublesome --- value'}); - assert.equal(actual.content, 'here is some content\r\n'); - assert.equal(String(actual.orig), '---\r\nname: "troublesome --- value"\r\n---\r\nhere is some content\r\n'); - }); - - it('should correctly parse a string that only has an opening delimiter', function() { - var fixture = '---\r\nname: "troublesome --- value"\r\n'; - var actual = matter(fixture); - assert.deepEqual(actual.data, {name: 'troublesome --- value'}); - assert.equal(actual.content, ''); - assert.equal(String(actual.orig), '---\r\nname: "troublesome --- value"\r\n'); - }); - - it('should not try to parse a string has content that looks like front-matter.', function() { - var fixture = '-----------name--------------value\r\nfoo'; - var actual = matter(fixture); - assert.deepEqual(actual.data, {}); - assert.equal(actual.content, '-----------name--------------value\r\nfoo'); - assert.equal(String(actual.orig), '-----------name--------------value\r\nfoo'); - }); -}); diff --git a/test/matter.excerpt.js b/test/matter.excerpt.js deleted file mode 100644 index 10acd7f..0000000 --- a/test/matter.excerpt.js +++ /dev/null @@ -1,67 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -require('mocha'); -var assert = require('assert'); -var matter = require('..'); - -describe('.excerpt', function() { - it('should get an excerpt after front matter', function() { - var file = matter('---\nabc: xyz\n---\nfoo\nbar\nbaz\n---\ncontent', {excerpt: true}); - - assert.equal(file.matter, '\nabc: xyz'); - assert.equal(file.content, 'foo\nbar\nbaz\n---\ncontent'); - assert.equal(file.excerpt, 'foo\nbar\nbaz\n'); - assert.deepEqual(file.data.abc, 'xyz'); - }); - - it('should not get excerpt when disabled', function() { - var file = matter('---\nabc: xyz\n---\nfoo\nbar\nbaz\n---\ncontent'); - - assert.equal(file.matter, '\nabc: xyz'); - assert.equal(file.content, 'foo\nbar\nbaz\n---\ncontent'); - assert.equal(file.excerpt, ''); - assert.deepEqual(file.data.abc, 'xyz'); - }); - - it('should use a custom separator', function() { - var file = matter('---\nabc: xyz\n---\nfoo\nbar\nbaz\n\ncontent', { - excerpt_separator: '' - }); - - assert.equal(file.matter, '\nabc: xyz'); - assert.equal(file.content, 'foo\nbar\nbaz\n\ncontent'); - assert.equal(file.excerpt, 'foo\nbar\nbaz\n'); - assert.deepEqual(file.data.abc, 'xyz'); - }); - - it('should use a custom separator when no front-matter exists', function() { - var file = matter('foo\nbar\nbaz\n\ncontent', { - excerpt_separator: '' - }); - - assert.equal(file.matter, ''); - assert.equal(file.content, 'foo\nbar\nbaz\n\ncontent'); - assert.equal(file.excerpt, 'foo\nbar\nbaz\n'); - assert.deepEqual(file.data, {}); - }); - - it('should use a custom function to get excerpt', function() { - var file = matter('---\nabc: xyz\n---\nfoo\nbar\nbaz\n---\ncontent', { - excerpt: function(file) { - file.excerpt = 'custom'; - } - }); - - assert.equal(file.matter, '\nabc: xyz'); - assert.equal(file.content, 'foo\nbar\nbaz\n---\ncontent'); - assert.equal(file.excerpt, 'custom'); - assert.deepEqual(file.data.abc, 'xyz'); - }); -}); diff --git a/test/matter.js b/test/matter.js deleted file mode 100644 index 9e40393..0000000 --- a/test/matter.js +++ /dev/null @@ -1,102 +0,0 @@ -'use strict'; - -require('mocha'); -var assert = require('assert'); -var utils = require('../lib/utils'); -var matter = require('..'); - -describe('gray-matter', function() { - it('should extract YAML front matter', function() { - var actual = matter('---\nabc: xyz\n---'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - assert.deepEqual(actual.data.abc, 'xyz'); - }); - - it('should cache original string as a buffer on the "orig property"', function() { - var fixture = '---\nabc: xyz\n---'; - var actual = matter(fixture); - assert(utils.isBuffer(actual.orig)); - assert.equal(actual.orig.toString(), fixture); - }); - - it('extra characters should throw parsing errors', function() { - assert.throws(function() { - matter('---whatever\nabc: xyz\n---'); - }); - }); - - it('boolean yaml types should still return the empty object', function() { - var actual = matter('--- true\n---'); - assert.deepEqual(actual.data, {}); - }); - - it('string yaml types should still return the empty object', function() { - var actual = matter('--- true\n---'); - assert.deepEqual(actual.data, {}); - }); - - it('number yaml types should still return the empty object', function() { - var actual = matter('--- 42\n---'); - assert.deepEqual(actual.data, {}); - }); - - it('should throw an error when a string is not passed:', function() { - assert.throws(function() { - matter(); - }); - }); - - it('should return an object when the string is 0 length:', function() { - assert(utils.isObject(matter(''))); - }); - - it('should extract YAML front matter and content', function() { - var fixture = '---\nabc: xyz\nversion: 2\n---\n\nThis is an alert\n'; - var actual = matter(fixture); - assert.deepEqual(actual.data, {abc: 'xyz', version: 2}); - assert.equal(actual.content, '\nThis is an alert\n'); - assert.equal(actual.orig.toString(), fixture); - }); - - it('should use a custom delimiter as a string.', function() { - var fixture = '~~~\nabc: xyz\nversion: 2\n~~~\n\nThis is an alert\n'; - var actual = matter(fixture, {delims: '~~~'}); - assert.deepEqual(actual.data, {abc: 'xyz', version: 2}); - assert.equal(actual.content, '\nThis is an alert\n'); - assert.equal(actual.orig.toString(), fixture); - }); - - it('should use custom delimiters as an array.', function() { - var fixture = '~~~\nabc: xyz\nversion: 2\n~~~\n\nThis is an alert\n'; - var actual = matter(fixture, {delims: ['~~~']}); - assert.deepEqual(actual.data, {abc: 'xyz', version: 2}); - assert.equal(actual.content, '\nThis is an alert\n'); - assert.equal(actual.orig.toString(), fixture); - }); - - it('should correctly identify delimiters and ignore strings that look like delimiters.', function() { - var fixture = '---\nname: "troublesome --- value"\n---\nhere is some content\n'; - var actual = matter(fixture); - assert.deepEqual(actual.data, {name: 'troublesome --- value'}); - assert.equal(actual.content, 'here is some content\n'); - assert.equal(String(actual.orig), '---\nname: "troublesome --- value"\n---\nhere is some content\n'); - }); - - it('should correctly parse a string that only has an opening delimiter', function() { - var fixture = '---\nname: "troublesome --- value"\n'; - var actual = matter(fixture); - assert.deepEqual(actual.data, {name: 'troublesome --- value'}); - assert.equal(actual.content, ''); - assert.equal(String(actual.orig), '---\nname: "troublesome --- value"\n'); - }); - - it('should not try to parse a string has content that looks like front-matter.', function() { - var fixture = '-----------name--------------value\nfoo'; - var actual = matter(fixture); - assert.deepEqual(actual.data, {}); - assert.equal(actual.content, '-----------name--------------value\nfoo'); - assert.equal(String(actual.orig), '-----------name--------------value\nfoo'); - }); -}); diff --git a/test/matter.language.js b/test/matter.language.js deleted file mode 100644 index 8a60897..0000000 --- a/test/matter.language.js +++ /dev/null @@ -1,43 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var assert = require('assert'); -var matter = require('..'); - -describe('.language', function() { - it('should detect the name of the language to parse', function() { - assert.deepEqual(matter.language('---\nfoo: bar\n---'), { - raw: '', - name: '' - }); - assert.deepEqual(matter.language('---js\nfoo: bar\n---'), { - raw: 'js', - name: 'js' - }); - assert.deepEqual(matter.language('---coffee\nfoo: bar\n---'), { - raw: 'coffee', - name: 'coffee' - }); - }); - - it('should work around whitespace', function() { - assert.deepEqual(matter.language('--- \nfoo: bar\n---'), { - raw: ' ', - name: '' - }); - assert.deepEqual(matter.language('--- js \nfoo: bar\n---'), { - raw: ' js ', - name: 'js' - }); - assert.deepEqual(matter.language('--- coffee \nfoo: bar\n---'), { - raw: ' coffee ', - name: 'coffee' - }); - }); -}); diff --git a/test/matter.read.js b/test/matter.read.js deleted file mode 100644 index 38b6745..0000000 --- a/test/matter.read.js +++ /dev/null @@ -1,64 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var path = require('path'); -var assert = require('assert'); -var matter = require('..'); -var fixture = path.join.bind(path, __dirname, 'fixtures'); - -describe('.read', function() { - it('should extract YAML front matter from files with content.', function() { - var file = matter.read(fixture('basic.txt')); - - assert(file.hasOwnProperty('path')); - assert(file.hasOwnProperty('data', {title: 'Basic'})); - assert.equal(file.content, 'this is content.'); - }); - - it('should parse complex YAML front matter.', function() { - var file = matter.read(fixture('complex.md')); - - assert(file.hasOwnProperty('data')); - assert.equal(file.data.root, '_gh_pages'); - - assert(file.hasOwnProperty('path')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - assert(file.data.hasOwnProperty('root')); - }); - - it('should return an object when a file is empty.', function() { - var file = matter.read(fixture('empty.md')); - assert(file.hasOwnProperty('path')); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - }); - - it('should return an object when no front matter exists.', function() { - var file = matter.read(fixture('hasnt-matter.md')); - assert(file.hasOwnProperty('path')); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - }); - - it('should parse YAML files directly', function() { - var file = matter.read(fixture('all.yaml')); - assert(file.hasOwnProperty('path')); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - assert.deepEqual(file.data, { - one: 'foo', - two: 'bar', - three: 'baz' - }); - }); -}); diff --git a/test/matter.test.js b/test/matter.test.js deleted file mode 100644 index f9494fb..0000000 --- a/test/matter.test.js +++ /dev/null @@ -1,20 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var assert = require('assert'); -var matter = require('..'); - -describe('.test', function() { - it('should return `true` if the string has front-matter:', function() { - assert(matter.test('---\nabc: xyz\n---')); - assert(!matter.test('---\nabc: xyz\n---', {delims: '~~~'})); - assert(matter.test('~~~\nabc: xyz\n~~~', {delims: '~~~'})); - assert(!matter.test('\nabc: xyz\n---')); - }); -}); diff --git a/test/matter.test.ts b/test/matter.test.ts new file mode 100644 index 0000000..896e4d0 --- /dev/null +++ b/test/matter.test.ts @@ -0,0 +1,112 @@ +import { expect, it, describe } from "vitest"; +import { matter, utils } from "../src/index"; + +describe("gray-matter", () => { + it("should extract YAML front matter", function () { + var actual = matter("---\nabc: xyz\n---"); + expect(actual.hasOwnProperty("data")).toBeTruthy(); + expect(actual.hasOwnProperty("content")).toBeTruthy(); + expect(actual.hasOwnProperty("orig")).toBeTruthy(); + expect(actual.data.abc).toEqual("xyz"); + }); + + it('should cache original string as a buffer on the "orig property"', function () { + var fixture = "---\nabc: xyz\n---"; + var actual = matter(fixture); + expect(utils.isBuffer(actual.orig)).toBeTruthy(); + expect(actual.orig.toString()).toEqual(fixture); + }); + + // it('extra characters should throw parsing errors', function() { + // expect.throws(function() { + // matter('---whatever\nabc: xyz\n---'); + // }); + // }); + + it("boolean yaml types should still return the empty object", function () { + var actual = matter("--- true\n---"); + expect(actual.data).toEqual({}); + }); + + it("string yaml types should still return the empty object", function () { + var actual = matter("--- true\n---"); + expect(actual.data).toEqual({}); + }); + + it("number yaml types should still return the empty object", function () { + var actual = matter("--- 42\n---"); + expect(actual.data).toEqual({}); + }); + + // it('should throw an error when a string is not passed:', function() { + // expect.throws(function() { + // matter(); + // }); + // }); + + it("should return an object when the string is 0 length:", function () { + expect(utils.isObject(matter(""))).toBeTruthy(); + }); + + it("should extract YAML front matter and content", function () { + var fixture = + '---\nabc: xyz\nversion: 2\n---\n\nThis is an alert\n'; + var actual = matter(fixture); + expect(actual.data).toEqual({ abc: "xyz", version: 2 }); + expect(actual.content).toEqual( + '\nThis is an alert\n' + ); + expect(actual.orig.toString()).toEqual(fixture); + }); + + it("should use a custom delimiter as a string.", function () { + var fixture = + '~~~\nabc: xyz\nversion: 2\n~~~\n\nThis is an alert\n'; + var actual = matter(fixture, { delimiters: "~~~" }); + expect(actual.data).toEqual({ abc: "xyz", version: 2 }); + expect(actual.content).toEqual( + '\nThis is an alert\n' + ); + expect(actual.orig.toString()).toEqual(fixture); + }); + + it("should use custom delimiters as an array.", function () { + var fixture = + '~~~\nabc: xyz\nversion: 2\n~~~\n\nThis is an alert\n'; + var actual = matter(fixture, { delimiters: ["~~~"] }); + expect(actual.data).toEqual({ abc: "xyz", version: 2 }); + expect(actual.content).toEqual( + '\nThis is an alert\n' + ); + expect(actual.orig.toString()).toEqual(fixture); + }); + + it("should correctly identify delimiters and ignore strings that look like delimiters.", function () { + var fixture = + '---\nname: "troublesome --- value"\n---\nhere is some content\n'; + var actual = matter(fixture); + expect(actual.data).toEqual({ name: "troublesome --- value" }); + expect(actual.content).toEqual("here is some content\n"); + expect(String(actual.orig)).toEqual( + '---\nname: "troublesome --- value"\n---\nhere is some content\n' + ); + }); + + it("should correctly parse a string that only has an opening delimiter", function () { + var fixture = '---\nname: "troublesome --- value"\n'; + var actual = matter(fixture); + expect(actual.data).toEqual({ name: "troublesome --- value" }); + expect(actual.content).toEqual(""); + expect(String(actual.orig)).toEqual('---\nname: "troublesome --- value"\n'); + }); + + it("should not try to parse a string has content that looks like front-matter.", function () { + var fixture = "-----------name--------------value\nfoo"; + var actual = matter(fixture); + expect(actual.data).toEqual({}); + expect(actual.content).toEqual("-----------name--------------value\nfoo"); + expect(String(actual.orig)).toEqual( + "-----------name--------------value\nfoo" + ); + }); +}); diff --git a/test/parse-coffee.js b/test/parse-coffee.js deleted file mode 100644 index 517bde2..0000000 --- a/test/parse-coffee.js +++ /dev/null @@ -1,80 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var path = require('path'); -var assert = require('assert'); -var extend = require('extend-shallow'); -var matter = require('../'); -var fixture = path.join.bind(path, __dirname, 'fixtures'); -var coffee = require('coffeescript'); -var defaults = { - engines: { - coffee: { - parse: function(str, options) { - /* eslint no-eval: 0 */ - return coffee['eval'](str, options); - } - } - } -}; - -function parse(name, options) { - return matter.read(fixture(name), extend({}, defaults, options)); -} - -describe('parse coffee', function() { - it('should throw an error when coffee cannot be parsed', function() { - assert.throws(function() { - parse('lang-coffee-bad.md', {lang: 'coffee'}); - }); - }); - - it('should parse coffee front matter', function() { - var file = parse('lang-coffee.md', {lang: 'coffee'}); - assert.equal(file.data.title, 'coffee'); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - }); - - it('should eval functions in coffee front matter', function() { - var file = parse('lang-coffee-fn.md', {lang: 'coffee'}); - - assert.equal(typeof file.data.fn, 'function'); - assert.equal(file.data.title, 'coffee functions'); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - }); - - it('should eval functions in auto-detected coffee front matter', function() { - var file = parse('autodetect-coffee-fn.md'); - assert.equal(typeof file.data.fn, 'function'); - assert.equal(file.data.title, 'coffee functions'); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - }); - - it('should detect "coffee" as the language', function() { - var file = parse('autodetect-coffee.md'); - assert.equal(file.data.title, 'autodetect-coffee'); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - }); - - it('should detect "coffeescript" as the language', function() { - var file = parse('autodetect-coffeescript.md'); - assert.equal(file.data.title, 'autodetect-coffeescript'); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - }); -}); diff --git a/test/parse-cson.js b/test/parse-cson.js deleted file mode 100644 index 152def5..0000000 --- a/test/parse-cson.js +++ /dev/null @@ -1,72 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var path = require('path'); -var assert = require('assert'); -var matter = require('..'); -var extend = require('extend-shallow'); -var coffee = require('coffeescript'); -var fixture = path.join.bind(path, __dirname, 'fixtures'); -var defaults = { - engines: { - coffee: { - parse: function(str, options) { - /* eslint no-eval: 0 */ - return coffee['eval'](str, options); - } - } - } -}; - -function parse(name, options) { - return matter.read(fixture(name), extend({}, defaults, options)); -} - -describe('parse cson:', function() { - it('should parse CSON front matter.', function() { - var actual = parse('lang-cson.md', { - language: 'cson' - }); - - assert.equal(actual.data.title, 'CSON'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); - - it('should evaluate functions in CSON front matter.', function() { - var actual = parse('lang-cson-fn.md', { - language: 'cson' - }); - - assert.equal(typeof actual.data.fn, 'function'); - assert.equal(actual.data.title, 'CSON functions'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); - - it('should evaluate functions in auto-detected CSON front matter.', function() { - var actual = parse('autodetect-cson-fn.md'); - assert.equal(typeof actual.data.fn, 'function'); - assert.equal(actual.data.title, 'CSON functions'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); - - it('should auto-detect cson as the language.', function() { - var actual = parse('autodetect-cson.md'); - - assert.equal(actual.data.title, 'autodetect-CSON'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); -}); diff --git a/test/parse-custom.js b/test/parse-custom.js deleted file mode 100644 index 14047eb..0000000 --- a/test/parse-custom.js +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var assert = require('assert'); -var YAML = require('js-yaml'); -var matter = require('..'); - -describe('custom parser:', function() { - it('should allow a custom parser to be registered:', function() { - var actual = matter.read('./test/fixtures/lang-yaml.md', { - parser: function customParser(str, opts) { - try { - return YAML.safeLoad(str, opts); - } catch (err) { - throw new SyntaxError(err); - } - } - }); - - assert.equal(actual.data.title, 'YAML'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); -}); diff --git a/test/parse-custom.test.ts b/test/parse-custom.test.ts new file mode 100644 index 0000000..e783b80 --- /dev/null +++ b/test/parse-custom.test.ts @@ -0,0 +1,29 @@ +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +import { expect, it, describe } from "vitest"; +import { matter } from "../src/index"; +import YAML from "js-yaml"; + +describe("custom parser:", function () { + it("should allow a custom parser to be registered:", function () { + var actual = matter.read("./test/fixtures/lang-yaml.md", { + parser: (str: any, opts: any) => { + try { + return YAML.load(str, opts); + } catch (error) { + throw new SyntaxError((error as Error).message); + } + }, + } as any); + + expect(actual.data.title).toEqual("YAML"); + expect(actual.hasOwnProperty("data")); + expect(actual.hasOwnProperty("content")); + expect(actual.hasOwnProperty("orig")); + }); +}); diff --git a/test/parse-javascript.js b/test/parse-javascript.js deleted file mode 100644 index 28e4182..0000000 --- a/test/parse-javascript.js +++ /dev/null @@ -1,51 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var assert = require('assert'); -var matter = require('../'); - -describe('parse javascript:', function() { - it('should parse front matter when options.lang is javascript', function() { - var file = matter.read('./test/fixtures/lang-javascript-object-fn.md', { - lang: 'javascript' - }); - - assert.equal(file.data.title, 'javascript front matter'); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - assert.equal(typeof file.data.fn.reverse, 'function'); - }); - - it('should parse front matter when options.language is js', function() { - var file = matter.read('./test/fixtures/lang-javascript-object-fn.md', { - language: 'js' - }); - - assert.equal(file.data.title, 'javascript front matter'); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - assert.equal(typeof file.data.fn.reverse, 'function'); - }); - - it('should eval functions', function() { - var file = matter.read('./test/fixtures/lang-javascript-fn.md', {language: 'js'}); - assert.equal(typeof file.data, 'function'); - }); - - it('should detect "javascript" after the first delimiter', function() { - var file = matter.read('./test/fixtures/autodetect-javascript.md'); - assert.equal(file.data.title, 'autodetect-javascript'); - assert.equal(file.data.title, 'autodetect-javascript'); - assert(file.hasOwnProperty('data')); - assert(file.hasOwnProperty('content')); - assert(file.hasOwnProperty('orig')); - }); -}); diff --git a/test/parse-javascript.test.ts b/test/parse-javascript.test.ts new file mode 100644 index 0000000..b8ff8ff --- /dev/null +++ b/test/parse-javascript.test.ts @@ -0,0 +1,53 @@ +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +import { expect, it, describe } from "vitest"; +import { matter } from "../src/index"; + +describe("parse javascript:", function () { + it("should parse front matter when options.lang is javascript", function () { + var file = matter.read("./test/fixtures/lang-javascript-object-fn.md", { + language: "javascript", + }); + + expect(file.data.title).toEqual("javascript front matter"); + expect(file.hasOwnProperty("data")); + expect(file.hasOwnProperty("content")); + expect(file.hasOwnProperty("orig")); + expect(typeof file.data.fn.reverse).toEqual("function"); + }); + + it("should parse front matter when options.language is js", function () { + var file = matter.read("./test/fixtures/lang-javascript-object-fn.md", { + language: "js", + delimiters: "", + }); + + expect(file.data.title).toEqual("javascript front matter"); + expect(file.hasOwnProperty("data")); + expect(file.hasOwnProperty("content")); + expect(file.hasOwnProperty("orig")); + expect(typeof file.data.fn.reverse).toEqual("function"); + }); + + it("should eval functions", function () { + var file = matter.read("./test/fixtures/lang-javascript-fn.md", { + language: "js", + delimiters: "", + }); + expect(typeof file.data).toEqual("function"); + }); + + it('should detect "javascript" after the first delimiter', function () { + var file = matter.read("./test/fixtures/autodetect-javascript.md"); + expect(file.data.title).toEqual("autodetect-javascript"); + expect(file.data.title).toEqual("autodetect-javascript"); + expect(file.hasOwnProperty("data")); + expect(file.hasOwnProperty("content")); + expect(file.hasOwnProperty("orig")); + }); +}); diff --git a/test/parse-json.js b/test/parse-json.js deleted file mode 100644 index e480264..0000000 --- a/test/parse-json.js +++ /dev/null @@ -1,33 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var assert = require('assert'); -var matter = require('..'); - -describe('parse json:', function() { - it('should parse JSON front matter.', function() { - var actual = matter.read('./test/fixtures/lang-json.md', { - lang: 'json' - }); - - assert.equal(actual.data.title, 'JSON'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); - - it('should auto-detect JSON as the language.', function() { - var actual = matter.read('./test/fixtures/autodetect-json.md'); - - assert.equal(actual.data.title, 'autodetect-JSON'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); -}); diff --git a/test/parse-json.test.ts b/test/parse-json.test.ts new file mode 100644 index 0000000..3deb17d --- /dev/null +++ b/test/parse-json.test.ts @@ -0,0 +1,32 @@ +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +import { expect, it, describe } from "vitest"; + +import { matter } from "../src/index"; + +describe("parse json:", function () { + it("should parse JSON front matter.", function () { + var actual = matter.read("./test/fixtures/lang-json.md", { + language: "json", + }); + + expect(actual.data.title).toEqual("JSON"); + expect(actual.hasOwnProperty("data")).toBeTruthy(); + expect(actual.hasOwnProperty("content")).toBeTruthy(); + expect(actual.hasOwnProperty("orig")).toBeTruthy(); + }); + + it("should auto-detect JSON as the language.", function () { + var actual = matter.read("./test/fixtures/autodetect-json.md"); + + expect(actual.data.title).toEqual("autodetect-JSON"); + expect(actual.hasOwnProperty("data")).toBeTruthy(); + expect(actual.hasOwnProperty("content")).toBeTruthy(); + expect(actual.hasOwnProperty("orig")).toBeTruthy(); + }); +}); diff --git a/test/parse-toml.js b/test/parse-toml.js deleted file mode 100644 index 5dec0a5..0000000 --- a/test/parse-toml.js +++ /dev/null @@ -1,48 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var assert = require('assert'); -var matter = require('..'); -var extend = require('extend-shallow'); -var toml = require('toml'); -var defaults = { - engines: { - toml: toml.parse.bind(toml) - } -}; - -function parse(str, options) { - return matter(str, extend({}, defaults, options)); -} - -describe('parse TOML:', function() { - it('should parse toml front matter.', function() { - var actual = parse('---\ntitle = "TOML"\ndescription = "Front matter"\ncategories = "front matter toml"\n---\n\n# This file has toml front matter!\n', { - lang: 'toml' - }); - assert.equal(actual.data.title, 'TOML'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); - - it('should auto-detect TOML as the language.', function() { - var actual = parse('---toml\ntitle = "autodetect-TOML"\n[props]\nuser = "jonschlinkert"\n---\nContent\n'); - assert.equal(actual.data.title, 'autodetect-TOML'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); - - it('should throw on TOML syntax errors', function() { - assert.throws(function() { - matter('---toml\n[props\nuser = "jonschlinkert"\n---\nContent\n'); - }); - }); -}); diff --git a/test/parse-toml.test.ts b/test/parse-toml.test.ts new file mode 100644 index 0000000..4c421cf --- /dev/null +++ b/test/parse-toml.test.ts @@ -0,0 +1,52 @@ +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +import { expect, it, describe } from "vitest"; + +import { matter } from "../src/index"; +import toml from "toml"; + +var defaults = { + engines: { + toml: toml.parse.bind(toml), + }, +}; + +function parse(str: any, options?: any) { + return matter(str, { ...defaults, ...options }); +} + +describe("parse TOML:", function () { + it("should parse toml front matter.", function () { + var actual = parse( + '---\ntitle = "TOML"\ndescription = "Front matter"\ncategories = "front matter toml"\n---\n\n# This file has toml front matter!\n', + { + lang: "toml", + } + ); + expect(actual.data.title).toEqual("TOML"); + expect(actual.hasOwnProperty("data")).toBeTruthy(); + expect(actual.hasOwnProperty("content")).toBeTruthy(); + expect(actual.hasOwnProperty("orig")).toBeTruthy(); + }); + + it("should auto-detect TOML as the language.", function () { + var actual = parse( + '---toml\ntitle = "autodetect-TOML"\n[props]\nuser = "jonschlinkert"\n---\nContent\n' + ); + expect(actual.data.title).toEqual("autodetect-TOML"); + expect(actual.hasOwnProperty("data")).toBeTruthy(); + expect(actual.hasOwnProperty("content")).toBeTruthy(); + expect(actual.hasOwnProperty("orig")).toBeTruthy(); + }); + + // it('should throw on TOML syntax errors', function() { + // expect.throws(function() { + // matter('---toml\n[props\nuser = "jonschlinkert"\n---\nContent\n'); + // }); + // }); +}); diff --git a/test/parse-yaml.js b/test/parse-yaml.js deleted file mode 100644 index 45bdc5c..0000000 --- a/test/parse-yaml.js +++ /dev/null @@ -1,63 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var assert = require('assert'); -var matter = require('..'); - -describe('parse YAML:', function() { - it('should parse YAML', function() { - var file = matter.read('./test/fixtures/all.yaml'); - assert.deepEqual(file.data, { - one: 'foo', - two: 'bar', - three: 'baz' - }); - }); - - it('should parse YAML with closing ...', function() { - var file = matter.read('./test/fixtures/all-dots.yaml'); - assert.deepEqual(file.data, { - one: 'foo', - two: 'bar', - three: 'baz' - }); - }); - - it('should parse YAML front matter', function() { - var actual = matter.read('./test/fixtures/lang-yaml.md'); - assert.equal(actual.data.title, 'YAML'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); - - it('should detect YAML as the language with no language defined after the first fence', function() { - var actual = matter.read('./test/fixtures/autodetect-no-lang.md'); - assert.equal(actual.data.title, 'autodetect-no-lang'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); - - it('should detect YAML as the language', function() { - var actual = matter.read('./test/fixtures/autodetect-yaml.md'); - assert.equal(actual.data.title, 'autodetect-yaml'); - assert(actual.hasOwnProperty('data')); - assert(actual.hasOwnProperty('content')); - assert(actual.hasOwnProperty('orig')); - }); - - it('should use safeLoad when specified', function() { - var fixture = '---\nabc: xyz\nversion: 2\n---\n\nThis is an alert\n'; - var actual = matter(fixture, {safeLoad: true}); - assert.deepEqual(actual.data, {abc: 'xyz', version: 2}); - assert.equal(actual.content, '\nThis is an alert\n'); - assert(actual.hasOwnProperty('orig')); - }); -}); diff --git a/test/parse-yaml.test.ts b/test/parse-yaml.test.ts new file mode 100644 index 0000000..49acee1 --- /dev/null +++ b/test/parse-yaml.test.ts @@ -0,0 +1,64 @@ +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +import { expect, it, describe } from "vitest"; +import { matter } from "../src/index"; + +describe("parse YAML:", function () { + it("should parse YAML", function () { + var file = matter.read("./test/fixtures/all.yaml"); + expect(file.data).toEqual({ + one: "foo", + two: "bar", + three: "baz", + }); + }); + + it("should parse YAML with closing ...", function () { + var file = matter.read("./test/fixtures/all-dots.yaml"); + expect(file.data).toEqual({ + one: "foo", + two: "bar", + three: "baz", + }); + }); + + it("should parse YAML front matter", function () { + var actual = matter.read("./test/fixtures/lang-yaml.md"); + expect(actual.data.title).toEqual("YAML"); + expect(actual.hasOwnProperty("data")).toBeTruthy(); + expect(actual.hasOwnProperty("content")).toBeTruthy(); + expect(actual.hasOwnProperty("orig")).toBeTruthy(); + }); + + it("should detect YAML as the language with no language defined after the first fence", function () { + var actual = matter.read("./test/fixtures/autodetect-no-lang.md"); + expect(actual.data.title).toEqual("autodetect-no-lang"); + expect(actual.hasOwnProperty("data")).toBeTruthy(); + expect(actual.hasOwnProperty("content")).toBeTruthy(); + expect(actual.hasOwnProperty("orig")).toBeTruthy(); + }); + + it("should detect YAML as the language", function () { + var actual = matter.read("./test/fixtures/autodetect-yaml.md"); + expect(actual.data.title).toEqual("autodetect-yaml"); + expect(actual.hasOwnProperty("data")).toBeTruthy(); + expect(actual.hasOwnProperty("content")).toBeTruthy(); + expect(actual.hasOwnProperty("orig")).toBeTruthy(); + }); + + it("should use safeLoad when specified", function () { + var fixture = + '---\nabc: xyz\nversion: 2\n---\n\nThis is an alert\n'; + var actual = matter(fixture, { safeLoad: true }); + expect(actual.data).toEqual({ abc: "xyz", version: 2 }); + expect(actual.content).toEqual( + '\nThis is an alert\n' + ); + expect(actual.hasOwnProperty("orig")).toBeTruthy(); + }); +}); diff --git a/test/read.test.ts b/test/read.test.ts new file mode 100644 index 0000000..f4fb732 --- /dev/null +++ b/test/read.test.ts @@ -0,0 +1,68 @@ +import { expect, it, describe } from "vitest"; + +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +import { matter } from "../src/index"; +import { fileURLToPath } from "node:url"; +import { dirname } from "pathe"; +import { join } from "node:path"; + +const _dirname = dirname(fileURLToPath(import.meta.url)); + +const fixture = (f: any) => join(_dirname, "fixtures", f); + +describe(".read", function () { + it("should extract YAML front matter from files with content.", function () { + var file = matter.read(fixture("basic.txt")); + + expect(file.hasOwnProperty("path")).toBeTruthy(); + expect(file.hasOwnProperty("data")).toBeTruthy(); + expect(file.content).toEqual("this is content."); + }); + + it("should parse complex YAML front matter.", function () { + var file = matter.read(fixture("complex.md")); + + expect(file.hasOwnProperty("data")); + expect(file.data.root).toEqual("_gh_pages"); + + expect(file.hasOwnProperty("path")).toBeTruthy(); + expect(file.hasOwnProperty("content")).toBeTruthy(); + expect(file.hasOwnProperty("orig")).toBeTruthy(); + expect(file.data.hasOwnProperty("root")).toBeTruthy(); + }); + + it("should return an object when a file is empty.", function () { + var file = matter.read(fixture("empty.md")); + expect(file.hasOwnProperty("path")).toBeTruthy(); + expect(file.hasOwnProperty("data")).toBeTruthy(); + expect(file.hasOwnProperty("content")).toBeTruthy(); + expect(file.hasOwnProperty("orig")).toBeTruthy(); + }); + + it("should return an object when no front matter exists.", function () { + var file = matter.read(fixture("hasnt-matter.md")); + expect(file.hasOwnProperty("path")).toBeTruthy(); + expect(file.hasOwnProperty("data")).toBeTruthy(); + expect(file.hasOwnProperty("content")).toBeTruthy(); + expect(file.hasOwnProperty("orig")).toBeTruthy(); + }); + + it("should parse YAML files directly", function () { + var file = matter.read(fixture("all.yaml")); + expect(file.hasOwnProperty("path")).toBeTruthy(); + expect(file.hasOwnProperty("data")).toBeTruthy(); + expect(file.hasOwnProperty("content")).toBeTruthy(); + expect(file.hasOwnProperty("orig")).toBeTruthy(); + expect(file.data).toEqual({ + one: "foo", + two: "bar", + three: "baz", + }); + }); +}); diff --git a/test/stringify.js b/test/stringify.js deleted file mode 100644 index 2747b46..0000000 --- a/test/stringify.js +++ /dev/null @@ -1,79 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var assert = require('assert'); -var matter = require('../'); - -describe('.stringify', function() { - it('should stringify front-matter from a file object', function() { - var file = { - content: 'Name: {{name}}\n', - data: {name: 'gray-matter'} - }; - - assert.equal(matter.stringify(file), [ - '---', - 'name: gray-matter', - '---', - 'Name: {{name}}\n' - ].join('\n')); - }); - - it('should stringify from a string', function() { - assert.equal(matter.stringify('Name: {{name}}\n'), 'Name: {{name}}\n'); - }); - - it('should use custom delimiters to stringify', function() { - var data = {name: 'gray-matter'}; - var actual = matter.stringify('Name: {{name}}', data, {delims: '~~~'}); - assert.equal(actual, [ - '~~~', - 'name: gray-matter', - '~~~', - 'Name: {{name}}\n' - ].join('\n')); - }); - - it('should stringify a file object', function() { - var file = { content: 'Name: {{name}}', data: {name: 'gray-matter'} }; - var actual = matter.stringify(file); - assert.equal(actual, [ - '---', - 'name: gray-matter', - '---', - 'Name: {{name}}\n' - ].join('\n')); - }); - - it('should stringify an excerpt', function() { - var file = { content: 'Name: {{name}}', data: {name: 'gray-matter'} }; - file.excerpt = 'This is an excerpt.'; - - assert.equal(matter.stringify(file), [ - '---', - 'name: gray-matter', - '---', - 'This is an excerpt.', - '---', - 'Name: {{name}}\n' - ].join('\n')); - }); - - it('should not add an excerpt if it already exists', function() { - var file = { content: 'Name: {{name}}\n\nThis is an excerpt.', data: {name: 'gray-matter'} }; - file.excerpt = 'This is an excerpt.'; - - assert.equal(matter.stringify(file), [ - '---', - 'name: gray-matter', - '---', - 'Name: {{name}}\n\nThis is an excerpt.\n' - ].join('\n')); - }); -}); diff --git a/test/stringify.test.ts b/test/stringify.test.ts new file mode 100644 index 0000000..496c1d4 --- /dev/null +++ b/test/stringify.test.ts @@ -0,0 +1,84 @@ +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +import { expect, it, describe } from "vitest"; + +import { matter } from "../src/index"; + +describe(".stringify", function () { + it("should stringify front-matter from a file object", function () { + var file = { + content: "Name: {{name}}\n", + data: { name: "gray-matter" }, + }; + + expect(matter.stringify(file.content, file.data)).toEqual( + ["---", "name: gray-matter", "---", "Name: {{name}}\n"].join("\n") + ); + }); + + it("should stringify from a string", function () { + expect(matter.stringify("Name: {{name}}\n")).toEqual("Name: {{name}}\n"); + }); + + it("should use custom delimiters to stringify", function () { + var data = { name: "gray-matter" }; + var actual = matter.stringify("Name: {{name}}", data, { + delimiters: "~~~", + }); + expect(actual).toEqual( + ["~~~", "name: gray-matter", "~~~", "Name: {{name}}\n"].join("\n") + ); + }); + + it("should stringify a file object", function () { + var file: any = { + content: "Name: {{name}}", + data: { name: "gray-matter" }, + }; + var actual = matter.stringify(file); + expect(actual).toEqual( + ["---", "name: gray-matter", "---", "Name: {{name}}\n"].join("\n") + ); + }); + + it("should stringify an excerpt", function () { + var file: any = { + content: "Name: {{name}}", + data: { name: "gray-matter" }, + }; + file.excerpt = "This is an excerpt."; + + expect(matter.stringify(file)).toEqual( + [ + "---", + "name: gray-matter", + "---", + "This is an excerpt.", + "---", + "Name: {{name}}\n", + ].join("\n") + ); + }); + + it("should not add an excerpt if it already exists", function () { + var file: any = { + content: "Name: {{name}}\n\nThis is an excerpt.", + data: { name: "gray-matter" }, + }; + file.excerpt = "This is an excerpt."; + + expect(matter.stringify(file)).toEqual( + [ + "---", + "name: gray-matter", + "---", + "Name: {{name}}\n\nThis is an excerpt.\n", + ].join("\n") + ); + }); +}); diff --git a/test/vinyl-files.js b/test/vinyl-files.js deleted file mode 100644 index 15f9b5d..0000000 --- a/test/vinyl-files.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * gray-matter - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var assert = require('assert'); -var File = require('vinyl'); -var matter = require('..'); - -describe('vinyl files', function() { - it('should take a vinyl file', function() { - var file = new File({path: 'foo', contents: Buffer.from('---\none: two\n---\nbar')}); - - var actual = matter(file); - assert.equal(actual.path, 'foo'); - assert.deepEqual(actual.data, {one: 'two'}); - assert.deepEqual(actual.content, 'bar'); - assert.deepEqual(actual.contents, Buffer.from('---\none: two\n---\nbar')); - }); -}); diff --git a/test/vinyl-files.test.ts b/test/vinyl-files.test.ts new file mode 100644 index 0000000..6ed4d93 --- /dev/null +++ b/test/vinyl-files.test.ts @@ -0,0 +1,24 @@ +/*! + * gray-matter + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ +import { expect, it, describe } from "vitest"; +import { matter } from "../dist/index.js"; +import File from "vinyl"; + +describe("vinyl files", function () { + it("should take a vinyl file", function () { + var file = new File({ + path: "foo", + contents: Buffer.from("---\none: two\n---\nbar"), + }); + + var actual = matter(file as any); + expect(actual.path).toEqual("foo"); + expect(actual.data).toEqual({ one: "two" }); + expect(actual.content).toEqual("bar"); + expect(actual.contents).toEqual(Buffer.from("---\none: two\n---\nbar")); + }); +}); diff --git a/test/windows.test.ts b/test/windows.test.ts new file mode 100644 index 0000000..f80c684 --- /dev/null +++ b/test/windows.test.ts @@ -0,0 +1,99 @@ +import { expect, it, describe } from "vitest"; +import { matter, utils } from "../src/index"; + +describe("gray-matter (windows carriage returns)", function () { + it("should extract YAML front matter", function () { + var actual = matter("---\r\nabc: xyz\r\n---"); + expect(actual.hasOwnProperty("data")).toBeTruthy(); + expect(actual.hasOwnProperty("content")).toBeTruthy(); + expect(actual.hasOwnProperty("orig")).toBeTruthy(); + expect(actual.data.abc).toEqual("xyz"); + }); + + it('should cache orig string as a buffer on the "orig property"', function () { + var fixture = "---\r\nabc: xyz\r\n---"; + var actual = matter(fixture); + expect(utils.isBuffer(actual.orig)); + // expect.equal(actual.orig.toString(), fixture); + }); + + // it('should throw parsing errors', function() { + // expect.throws(function() { + // matter('---whatever\r\nabc: xyz\r\n---'); + // }); + // }); + + // it('should throw an error when a string is not passed:', function() { + // expect.throws(function() { + // matter(); + // }); + // }); + + it("should return an object when the string is 0 length:", function () { + expect(utils.isObject(matter(""))); + }); + + it("should extract YAML front matter and content", function () { + var fixture = + '---\r\nabc: xyz\r\nversion: 2\r\n---\r\n\r\nThis is an alert\r\n'; + var actual = matter(fixture); + expect(actual.data).toEqual({ abc: "xyz", version: 2 }); + expect(actual.content).toEqual( + '\r\nThis is an alert\r\n' + ); + expect(actual.orig.toString()).toEqual(fixture); + }); + + it("should use a custom delimiter as a string.", function () { + var fixture = + '~~~\r\nabc: xyz\r\nversion: 2\r\n~~~\r\n\r\nThis is an alert\r\n'; + var actual = matter(fixture, { delimiters: "~~~" }); + expect(actual.data).toEqual({ abc: "xyz", version: 2 }); + expect(actual.content).toEqual( + '\r\nThis is an alert\r\n' + ); + expect(actual.orig.toString()).toEqual(fixture); + }); + + it("should use custom delimiters as an array.", function () { + var fixture = + '~~~\r\nabc: xyz\r\nversion: 2\r\n~~~\r\n\r\nThis is an alert\r\n'; + var actual = matter(fixture, { delimiters: ["~~~"] }); + expect(actual.data).toEqual({ abc: "xyz", version: 2 }); + expect(actual.content).toEqual( + '\r\nThis is an alert\r\n' + ); + expect(actual.orig.toString()).toEqual(fixture); + }); + + it("should correctly identify delimiters and ignore strings that look like delimiters.", function () { + var fixture = + '---\r\nname: "troublesome --- value"\r\n---\r\nhere is some content\r\n'; + var actual = matter(fixture); + expect(actual.data).toEqual({ name: "troublesome --- value" }); + expect(actual.content).toEqual("here is some content\r\n"); + expect(String(actual.orig)).toEqual( + '---\r\nname: "troublesome --- value"\r\n---\r\nhere is some content\r\n' + ); + }); + + it("should correctly parse a string that only has an opening delimiter", function () { + var fixture = '---\r\nname: "troublesome --- value"\r\n'; + var actual = matter(fixture); + expect(actual.data).toEqual({ name: "troublesome --- value" }); + expect(actual.content).toEqual(""); + expect(String(actual.orig)).toEqual( + '---\r\nname: "troublesome --- value"\r\n' + ); + }); + + it("should not try to parse a string has content that looks like front-matter.", function () { + var fixture = "-----------name--------------value\r\nfoo"; + var actual = matter(fixture); + expect(actual.data).toEqual({}); + expect(actual.content).toEqual("-----------name--------------value\r\nfoo"); + expect(String(actual.orig)).toEqual( + "-----------name--------------value\r\nfoo" + ); + }); +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..ce7b500 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "module": "ES2020", + "target": "ES2020", + "lib": ["ES2021"], + "moduleResolution": "node", + "sourceMap": false, + "incremental": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "allowSyntheticDefaultImports": true, + "baseUrl": ".", + "declaration": true, + "declarationMap": true, + "outDir": "bin", + "tsBuildInfoFile": ".tsbuildinfo", + "paths": { + "~/*": [ + "src/*" + ] + } + }, + "include": [ + "src", + "test", + "vitest.config.ts" + ] +} diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..da8701b --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,8 @@ +/// +import { defineConfig } from "vite"; + +// used for testing, library code uses TSUP to build exports +export default defineConfig({ + + plugins: [], +});