diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..06d9e2d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +root = true + +[*] +charset = utf-8 +indent_size = 4 +indent_style = space +insert_final_newline = true +max_line_length = 120 +tab_width = 4 +trim_trailing_whitespace = true + +[*.json] +indent_size = 2 + +[*.jsonc] +indent_size = 2 + +[*.vsconfig] +indent_size = 2 diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..373c474 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,824 @@ +{ + "$schema": "https://json.schemastore.org/eslintrc.json", + "extends": [ + "eslint:all", + "plugin:@stylistic/all-extends", + "plugin:@typescript-eslint/all" + ], + "root": true, + "plugins": [ + "@stylistic", + "@typescript-eslint" + ], + "parserOptions": { + "sourceType": "module", + "project": true + }, + "rules": { + "@stylistic/array-bracket-newline": "error", + "@stylistic/array-bracket-spacing": "error", + "@stylistic/array-element-newline": [ + "error", + "consistent" + ], + "@stylistic/arrow-parens": [ + "error", + "as-needed" + ], + "@stylistic/arrow-spacing": "error", + "@stylistic/block-spacing": "error", + "@stylistic/brace-style": "error", + "@stylistic/comma-dangle": [ + "error", + { + "arrays": "always-multiline", + "enums": "always-multiline", + "exports": "always-multiline", + "imports": "always-multiline", + "objects": "always-multiline" + } + ], + "@stylistic/comma-spacing": "error", + "@stylistic/comma-style": "error", + "@stylistic/computed-property-spacing": "error", + "@stylistic/dot-location": [ + "error", + "property" + ], + "@stylistic/eol-last": "error", + "@stylistic/function-call-argument-newline": [ + "error", + "consistent" + ], + "@stylistic/function-call-spacing": "error", + "@stylistic/function-paren-newline": "off", + "@stylistic/generator-star-spacing": "error", + "@stylistic/implicit-arrow-linebreak": "off", + // TODO: Configure the indent rules. + "@stylistic/indent": "off", + "@stylistic/indent-binary-ops": "off", + "@stylistic/key-spacing": [ + "error", + { + "beforeColon": true + } + ], + "@stylistic/keyword-spacing": "error", + "@stylistic/linebreak-style": "off", + "@stylistic/lines-around-comment": [ + "error", + { + "allowArrayEnd": true, + "allowArrayStart": true, + "allowBlockEnd": true, + "allowBlockStart": true, + "allowClassEnd": true, + "allowClassStart": true, + "allowEnumEnd": true, + "allowEnumStart": true, + "allowInterfaceEnd": true, + "allowInterfaceStart": true, + "allowModuleEnd": true, + "allowModuleStart": true, + "allowObjectEnd": true, + "allowObjectStart": true, + "allowTypeEnd": true, + "allowTypeStart": true, + "applyDefaultIgnorePatterns": false, + "ignorePattern": "^\\s*(eslint .*|@ts-expect-error\\s*)$" + } + ], + "@stylistic/lines-between-class-members": [ + "error", + "always", + { + "exceptAfterOverload": false + } + ], + "@stylistic/max-len": [ + "error", + { + "code": 120, + "ignoreComments": false, + "ignoreRegExpLiterals": false, + "ignoreStrings": false, + "ignoreTemplateLiterals": false, + "ignoreUrls": false + } + ], + "@stylistic/max-statements-per-line": "error", + "@stylistic/member-delimiter-style": "error", + "@stylistic/multiline-ternary": [ + "error", + "always-multiline" + ], + "@stylistic/new-parens": "error", + "@stylistic/newline-per-chained-call": "off", + "@stylistic/no-confusing-arrow": "off", + "@stylistic/no-extra-parens": [ + "error", + "all", + { + "nestedBinaryExpressions": true + } + ], + "@stylistic/no-extra-semi": "error", + "@stylistic/no-floating-decimal": "error", + "@stylistic/no-mixed-operators": [ + "error", + { + "groups": [ + [ + "&&", + "||" + ] + ] + } + ], + "@stylistic/no-mixed-spaces-and-tabs": "error", + "@stylistic/no-multi-spaces": [ + "error", + { + "exceptions": { + "Property": false + } + } + ], + "@stylistic/no-multiple-empty-lines": [ + "error", + { + "max": 1 + } + ], + "@stylistic/no-tabs": "error", + "@stylistic/no-trailing-spaces": "error", + "@stylistic/no-whitespace-before-property": "error", + "@stylistic/nonblock-statement-body-position": [ + "error", + "below" + ], + "@stylistic/object-curly-newline": [ + "error", + { + "multiline": true + } + ], + "@stylistic/object-curly-spacing": [ + "error", + "always", + { + "arraysInObjects": true, + "objectsInObjects": true + } + ], + "@stylistic/object-property-newline": [ + "error", + { + "allowAllPropertiesOnSameLine": true + } + ], + "@stylistic/one-var-declaration-per-line": "error", + "@stylistic/operator-linebreak": "error", + "@stylistic/padded-blocks": "off", + "@stylistic/padding-line-between-statements": "off", + "@stylistic/quote-props": [ + "error", + "as-needed" + ], + "@stylistic/quotes": [ + "error", + "double", + { + "allowTemplateLiterals": true + } + ], + "@stylistic/rest-spread-spacing": [ + "error", + "always" + ], + "@stylistic/semi": "error", + "@stylistic/semi-spacing": "error", + "@stylistic/semi-style": "error", + "@stylistic/space-before-blocks": "error", + "@stylistic/space-before-function-paren": "off", + "@stylistic/space-in-parens": "error", + "@stylistic/space-infix-ops": "error", + "@stylistic/space-unary-ops": "error", + "@stylistic/spaced-comment": "error", + "@stylistic/switch-colon-spacing": "error", + "@stylistic/template-curly-spacing": "error", + "@stylistic/template-tag-spacing": "error", + "@stylistic/type-annotation-spacing": [ + "error", + { + "overrides": { + "colon": { + "before": true + } + } + } + ], + "@stylistic/type-generic-spacing": "error", + "@stylistic/type-named-tuple-spacing": "error", + "@stylistic/wrap-iife": [ + "error", + "inside" + ], + "@stylistic/wrap-regex": "error", + "@stylistic/yield-star-spacing": [ + "error", + "before" + ], + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": [ + "error", + { + "readonly": "array" + } + ], + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/ban-ts-comment": [ + "error", + { + "ts-expect-error": false + } + ], + "@typescript-eslint/ban-types": "error", + "@typescript-eslint/class-literal-property-style": "error", + "@typescript-eslint/class-methods-use-this": "error", + "@typescript-eslint/consistent-generic-constructors": "error", + "@typescript-eslint/consistent-indexed-object-style": "error", + "@typescript-eslint/consistent-type-assertions": [ + "error", + { + "assertionStyle": "as", + "objectLiteralTypeAssertions": "allow-as-parameter" + } + ], + "@typescript-eslint/consistent-type-definitions": "error", + "@typescript-eslint/consistent-type-exports": [ + "error", + { + "fixMixedExportsWithInlineTypeSpecifier": true + } + ], + "@typescript-eslint/consistent-type-imports": [ + "error", + { + "fixStyle": "inline-type-imports" + } + ], + "@typescript-eslint/default-param-last": "error", + "@typescript-eslint/dot-notation": [ + "error", + { + "allowIndexSignaturePropertyAccess": true + } + ], + "@typescript-eslint/explicit-function-return-type": [ + "error", + { + "allowConciseArrowFunctionExpressionsStartingWithVoid": true, + "allowFunctionsWithoutTypeParameters": true, + "allowIIFEs": true + } + ], + "@typescript-eslint/explicit-member-accessibility": "error", + "@typescript-eslint/explicit-module-boundary-types": [ + "error", + { + "allowDirectConstAssertionInArrowFunctions": false, + "allowHigherOrderFunctions": false, + "allowTypedFunctionExpressions": false + } + ], + "@typescript-eslint/init-declarations": "error", + "@typescript-eslint/member-delimiter-style": "error", + "@typescript-eslint/member-ordering": "error", + "@typescript-eslint/method-signature-style": "error", + "@typescript-eslint/naming-convention": "error", + "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-array-delete": "error", + "@typescript-eslint/no-base-to-string": [ + "error", + { + "ignoredTypeNames": [ + "Error", + "RegExp" + ] + } + ], + "@typescript-eslint/no-confusing-non-null-assertion": "off", + "@typescript-eslint/no-confusing-void-expression": [ + "error", + { + "ignoreArrowShorthand": true + } + ], + "@typescript-eslint/no-dupe-class-members": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-duplicate-type-constituents": "error", + "@typescript-eslint/no-dynamic-delete": "error", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-explicit-any": [ + "error", + { + "fixToUnknown": true + } + ], + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-extraneous-class": [ + "error", + { + "allowConstructorOnly": true, + "allowWithDecorator": true + } + ], + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-for-in-array": "error", + "@typescript-eslint/no-implied-eval": "error", + "@typescript-eslint/no-import-type-side-effects": "error", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-invalid-this": "error", + "@typescript-eslint/no-invalid-void-type": [ + "error", + { + "allowAsThisParameter": true + } + ], + "@typescript-eslint/no-loop-func": "error", + "@typescript-eslint/no-loss-of-precision": "error", + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/no-meaningless-void-operator": [ + "error", + { + "checkNever": true + } + ], + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": "error", + "@typescript-eslint/no-mixed-enums": "error", + "@typescript-eslint/no-namespace": [ + "error", + { + "allowDefinitionFiles": false + } + ], + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-redeclare": [ + "error", + { + "ignoreDeclarationMerge": false + } + ], + "@typescript-eslint/no-redundant-type-constituents": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-restricted-imports": "off", + "@typescript-eslint/no-shadow": [ + "error", + { + "builtinGlobals": true, + "hoist": "never", + "ignoreFunctionTypeParameterNameValueShadow": false, + "ignoreTypeValueShadow": false + } + ], + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-throw-literal": "error", + "@typescript-eslint/no-type-alias": "off", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-unnecessary-condition": [ + "error", + { + "allowConstantLoopConditions": true + } + ], + "@typescript-eslint/no-unnecessary-qualifier": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unsafe-argument": "error", + "@typescript-eslint/no-unsafe-assignment": "error", + "@typescript-eslint/no-unsafe-call": "error", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-enum-comparison": "error", + "@typescript-eslint/no-unsafe-member-access": "error", + "@typescript-eslint/no-unsafe-return": "error", + "@typescript-eslint/no-unsafe-unary-minus": "error", + "@typescript-eslint/no-unused-expressions": [ + "error", + { + "enforceForJSX": true + } + ], + "@typescript-eslint/no-unused-vars": [ + "error", + { + "args": "all", + "argsIgnorePattern": "^_", + "caughtErrors": "all", + "caughtErrorsIgnorePattern": "^_", + "destructuredArrayIgnorePattern": "^_", + "varsIgnorePattern": "^_" + } + ], + "@typescript-eslint/no-use-before-define": [ + "error", + { + "allowNamedExports": true, + "classes": false, + "functions": false + } + ], + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-useless-empty-export": "error", + "@typescript-eslint/no-useless-template-literals": "error", + "@typescript-eslint/no-var-requires": "error", + "@typescript-eslint/non-nullable-type-assertion-style": "error", + "@typescript-eslint/parameter-properties": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-destructuring": [ + "error", + { + "array": true, + "object": true + } + ], + "@typescript-eslint/prefer-enum-initializers": "off", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-includes": "error", + "@typescript-eslint/prefer-literal-enum-member": [ + "error", + { + "allowBitwiseExpressions": true + } + ], + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/prefer-nullish-coalescing": "error", + "@typescript-eslint/prefer-optional-chain": "error", + "@typescript-eslint/prefer-promise-reject-errors": "error", + "@typescript-eslint/prefer-readonly": "error", + "@typescript-eslint/prefer-readonly-parameter-types": "off", + "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-regexp-exec": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/prefer-string-starts-ends-with": "error", + "@typescript-eslint/prefer-ts-expect-error": "error", + "@typescript-eslint/promise-function-async": [ + "error", + { + "allowAny": false + } + ], + "@typescript-eslint/require-array-sort-compare": "error", + "@typescript-eslint/require-await": "error", + "@typescript-eslint/restrict-plus-operands": "error", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/return-await": "error", + "@typescript-eslint/sort-type-constituents": [ + "error", + { + "groupOrder": [ + "keyword", + "operator", + "named", + "conditional", + "object", + "import", + "function", + "tuple", + "intersection", + "union", + "literal", + "nullish" + ] + } + ], + "@typescript-eslint/strict-boolean-expressions": [ + "error", + { + "allowNumber": false, + "allowString": false + } + ], + "@typescript-eslint/switch-exhaustiveness-check": [ + "error", + { + "allowDefaultCaseForExhaustiveSwitch": false + } + ], + "@typescript-eslint/triple-slash-reference": [ + "error", + { + "lib": "never", + "types": "never" + } + ], + "@typescript-eslint/typedef": [ + "error", + { + "memberVariableDeclaration": true, + "parameter": true, + "propertyDeclaration": true + } + ], + "@typescript-eslint/unbound-method": [ + "error", + { + "ignoreStatic": true + } + ], + "@typescript-eslint/unified-signatures": "error", + "accessor-pairs": "error", + "array-callback-return": "error", + "arrow-body-style": "error", + "block-scoped-var": "error", + "camelcase": "error", + "capitalized-comments": "off", + "complexity": "off", + "consistent-return": "error", + "consistent-this": "error", + "constructor-super": "error", + "curly": "off", + "default-case": "off", + "default-case-last": "error", + "default-param-last": "off", + "dot-notation": "off", + "eqeqeq": "error", + "for-direction": "error", + "func-name-matching": "off", + "func-names": [ + "error", + "never" + ], + "func-style": [ + "error", + "declaration" + ], + "getter-return": "error", + "grouped-accessor-pairs": [ + "error", + "getBeforeSet" + ], + "guard-for-in": "off", + "id-denylist": "off", + "id-length": "off", + "id-match": "off", + "init-declarations": "off", + "line-comment-position": "off", + "logical-assignment-operators": [ + "error", + "always", + { + "enforceForIfStatements": true + } + ], + "max-classes-per-file": "off", + "max-depth": "off", + "max-lines": "off", + "max-lines-per-function": "off", + "max-nested-callbacks": "off", + "max-params": "off", + "max-statements": "off", + "multiline-comment-style": [ + "error", + "separate-lines", + { + "checkJSDoc": true + } + ], + "new-cap": "error", + "no-alert": "off", + "no-array-constructor": "off", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "off", + "no-caller": "error", + "no-case-declarations": "off", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": "off", + "no-console": "off", + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "error", + "no-constructor-return": "error", + "no-continue": "off", + "no-control-regex": "error", + "no-debugger": "off", + "no-delete-var": "error", + "no-div-regex": "off", + "no-dupe-args": "error", + "no-dupe-class-members": "off", + "no-dupe-else-if": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": "off", + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eq-null": "error", + "no-eval": [ + "error", + { + "allowIndirect": true + } + ], + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": [ + "error", + { + "enforceForLogicalOperands": true + } + ], + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": "error", + "no-implicit-coercion": [ + "error", + { + "boolean": false + } + ], + "no-implicit-globals": "error", + "no-implied-eval": "off", + "no-import-assign": "error", + "no-inline-comments": "off", + "no-inner-declarations": [ + "error", + "both" + ], + "no-invalid-regexp": "error", + "no-invalid-this": "off", + "no-irregular-whitespace": [ + "error", + { + "skipStrings": false + } + ], + "no-iterator": "error", + "no-label-var": "error", + "no-labels": "off", + "no-lone-blocks": "off", + "no-lonely-if": "error", + "no-loop-func": "off", + "no-loss-of-precision": "off", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": "off", + "no-multi-str": "off", + "no-negated-condition": "off", + "no-nested-ternary": "off", + "no-new": "off", + "no-new-func": "off", + "no-new-native-nonconstructor": "error", + "no-new-object": "error", + "no-new-symbol": "off", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-octal": "off", + "no-octal-escape": "error", + "no-obj-calls": "error", + "no-param-reassign": "error", + "no-plusplus": "off", + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "off", + "no-regex-spaces": "error", + "no-restricted-exports": "off", + "no-restricted-globals": "off", + "no-restricted-imports": "off", + "no-restricted-properties": "off", + "no-restricted-syntax": "off", + "no-return-assign": "off", + "no-return-await": "error", + "no-script-url": "error", + "no-self-assign": "error", + "no-self-compare": "error", + "no-sequences": [ + "error", + { + "allowInParentheses": false + } + ], + "no-setter-return": "error", + "no-shadow": "off", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-ternary": "off", + "no-this-before-super": "error", + "no-throw-literal": "off", + "no-undef": "off", + "no-undef-init": "error", + "no-undefined": "off", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": "error", + "no-unreachable": "error", + "no-unreachable-loop": "error", + "no-unsafe-finally": "error", + "no-unsafe-negation": [ + "error", + { + "enforceForOrderingRelations": true + } + ], + "no-unsafe-optional-chaining": "error", + "no-unused-expressions": "off", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "off", + "no-use-before-define": "off", + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": [ + "error", + { + "enforceForClassMembers": true + } + ], + "no-useless-concat": "error", + "no-useless-constructor": "off", + "no-useless-escape": "error", + "no-useless-rename": "error", + "no-useless-return": "error", + "no-var": "error", + "no-void": "off", + "no-warning-comments": "off", + "no-with": "error", + "object-shorthand": "error", + "one-var": [ + "error", + "never" + ], + "operator-assignment": "error", + "prefer-arrow-callback": "error", + "prefer-const": "error", + "prefer-exponentiation-operator": "error", + "prefer-named-capture-group": "off", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "require-atomic-updates": "error", + "require-await": "off", + "require-unicode-regexp": "error", + "require-yield": "error", + "return-await": "off", + "sort-imports": [ + "error", + { + "memberSyntaxSortOrder": [ + "none", + "single", + "multiple", + "all" + ] + } + ], + "sort-keys": "off", + "sort-vars": "off", + "strict": "error", + "symbol-description": "off", + "unicode-bom": "error", + "use-isnan": [ + "error", + { + "enforceForIndexOf": true + } + ], + "valid-typeof": "error", + "vars-on-top": "error", + "yoda": "error" + }, + "ignorePatterns": [ + "/out" + ] +} diff --git a/.fleet/settings.json b/.fleet/settings.json new file mode 100644 index 0000000..591e558 --- /dev/null +++ b/.fleet/settings.json @@ -0,0 +1,8 @@ +{ + "files.exclude": [ + "out", + ".idea", + ".vs", + "node_modules" + ] +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..db06c14 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +* text +*.verified.* text eol=lf +*.ico binary +*.png binary +*.zig eol=lf diff --git a/.gitbook.yaml b/.gitbook.yaml new file mode 100644 index 0000000..c4f40a2 --- /dev/null +++ b/.gitbook.yaml @@ -0,0 +1,4 @@ +root: doc +structure: + readme: index.md + summary: toc.md diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..9e0cae6 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @vezel-dev/ton-maintainers diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..1c5fcdc --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,35 @@ +# yaml-language-server: $schema=https://json.schemastore.org/dependabot-2.0.json +version: 2 +updates: + - directory: / + package-ecosystem: github-actions + schedule: + interval: daily + timezone: Europe/Copenhagen + time: "12:00" + open-pull-requests-limit: 25 + labels: [] + - directory: /doc + package-ecosystem: npm + schedule: + interval: daily + timezone: Europe/Copenhagen + time: "12:00" + open-pull-requests-limit: 25 + labels: [] + - directory: /src/vscode + package-ecosystem: npm + schedule: + interval: daily + timezone: Europe/Copenhagen + time: "12:00" + open-pull-requests-limit: 25 + labels: [] + - directory: / + package-ecosystem: nuget + schedule: + interval: daily + timezone: Europe/Copenhagen + time: "12:00" + open-pull-requests-limit: 25 + labels: [] diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..7a324ba --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,58 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: Build +on: + push: + branches-ignore: + - dependabot/** + pull_request: + workflow_dispatch: +permissions: + contents: read +defaults: + run: + shell: bash +env: + DOTNET_CLI_TELEMETRY_OPTOUT: true + DOTNET_GENERATE_ASPNET_CERTIFICATE: false + DOTNET_NOLOGO: true +jobs: + build: + strategy: + fail-fast: false + matrix: + os: + - macos-13 + - macos-14 + - ubuntu-20.04 + - ubuntu-22.04 + - windows-2019 + - windows-2022 + cfg: + - Debug + - Release + runs-on: ${{ matrix.os }} + steps: + - name: Clone repository + uses: actions/checkout@v4.1.1 + with: + fetch-depth: 0 + submodules: recursive + - name: Set up .NET + uses: actions/setup-dotnet@v4.0.0 + - name: Set up Node.js + uses: actions/setup-node@v4.0.1 + with: + node-version-file: src/vscode/package.json + - name: Run Cake + run: | + ./cake -c ${{ matrix.cfg }} + - name: Upload artifacts + if: always() + uses: actions/upload-artifact@v4.3.0 + with: + name: ${{ github.workflow }}-${{ github.run_number }}-${{ github.run_attempt }}-${{ matrix.os }}-${{ matrix.cfg }} + path: | + out/log + out/pkg + out/pub + out/trx diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml new file mode 100644 index 0000000..41ee0f3 --- /dev/null +++ b/.github/workflows/package.yml @@ -0,0 +1,46 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: Package +on: + push: + branches: + - master +permissions: + contents: read + packages: write +defaults: + run: + shell: bash +env: + DOTNET_CLI_TELEMETRY_OPTOUT: true + DOTNET_GENERATE_ASPNET_CERTIFICATE: false + DOTNET_NOLOGO: true + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +jobs: + package: + if: github.repository == 'vezel-dev/ton' + runs-on: ubuntu-22.04 + steps: + - name: Clone repository + uses: actions/checkout@v4.1.1 + with: + fetch-depth: 0 + submodules: recursive + - name: Set up .NET + uses: actions/setup-dotnet@v4.0.0 + - name: Set up Node.js + uses: actions/setup-node@v4.0.1 + with: + node-version-file: src/vscode/package.json + - name: Run Cake + run: | + ./cake upload-core-github + - name: Upload artifacts + if: always() + uses: actions/upload-artifact@v4.3.0 + with: + name: ${{ github.workflow }}-${{ github.run_number }}-${{ github.run_attempt }} + path: | + out/log + out/pkg + out/pub + out/trx diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..2793e49 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,49 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: Release +on: + release: + types: + - published +permissions: + contents: read +defaults: + run: + shell: bash +env: + DOTNET_CLI_TELEMETRY_OPTOUT: true + DOTNET_GENERATE_ASPNET_CERTIFICATE: false + DOTNET_NOLOGO: true + NUGET_TOKEN: ${{ secrets.NUGET_TOKEN }} + OVSX_TOKEN: ${{ secrets.OVSX_TOKEN }} + VSCE_TOKEN: ${{ secrets.VSCE_TOKEN }} +jobs: + release: + if: github.repository == 'vezel-dev/ton' + runs-on: ubuntu-22.04 + steps: + - name: Clone repository + uses: actions/checkout@v4.1.1 + with: + fetch-depth: 0 + submodules: recursive + - name: Set up .NET + uses: actions/setup-dotnet@v4.0.0 + - name: Set up Node.js + uses: actions/setup-node@v4.0.1 + with: + node-version-file: src/vscode/package.json + - name: Run Cake + run: | + ./cake upload-core-nuget -c Release + ./cake upload-vscode-vsce -c Release + ./cake upload-vscode-ovsx -c Release + - name: Upload artifacts + if: always() + uses: actions/upload-artifact@v4.3.0 + with: + name: ${{ github.workflow }}-${{ github.run_number }}-${{ github.run_attempt }} + path: | + out/log + out/pkg + out/pub + out/trx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa67d64 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/out +*.received.* +*.user +.idea +.vs +node_modules diff --git a/.globalconfig b/.globalconfig new file mode 100644 index 0000000..72216ab --- /dev/null +++ b/.globalconfig @@ -0,0 +1,1005 @@ +global_level = 0 + +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = false +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = all +csharp_new_line_between_query_expression_clauses = true +csharp_preferred_modifier_order = public, private, protected, internal, file, static, extern, new, virtual, abstract, override, sealed, readonly, unsafe, required, volatile, async +csharp_prefer_braces = false +csharp_prefer_simple_default_expression = true +csharp_prefer_simple_using_statement = true +csharp_prefer_static_local_function = true +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false +csharp_style_conditional_delegate_call = true +csharp_style_deconstructed_variable_declaration = true +csharp_style_expression_bodied_accessors = true +csharp_style_expression_bodied_constructors = false +csharp_style_expression_bodied_indexers = true +csharp_style_expression_bodied_lambdas = true +csharp_style_expression_bodied_local_functions = false +csharp_style_expression_bodied_methods = false +csharp_style_expression_bodied_operators = true +csharp_style_expression_bodied_properties = true +csharp_style_implicit_object_creation_when_type_is_apparent = true +csharp_style_inlined_variable_declaration = true +csharp_style_namespace_declarations = file_scoped +csharp_style_pattern_matching_over_as_with_null_check = true +csharp_style_pattern_matching_over_is_with_cast_check = true +csharp_style_prefer_extended_property_pattern = true +csharp_style_prefer_index_operator = true +csharp_style_prefer_local_over_anonymous_function = true +csharp_style_prefer_method_group_conversion = true +csharp_style_prefer_not_pattern = true +csharp_style_prefer_null_check_over_type_check = true +csharp_style_prefer_pattern_matching = true +csharp_style_prefer_range_operator = true +csharp_style_prefer_readonly_struct = true +csharp_style_prefer_readonly_struct_member = true +csharp_style_prefer_switch_expression = true +csharp_style_prefer_top_level_statements = true +csharp_style_prefer_tuple_swap = true +csharp_style_prefer_utf8_string_literals = true +csharp_style_throw_expression = true +csharp_style_unused_value_assignment_preference = discard_variable +csharp_style_unused_value_expression_statement_preference = discard_variable +csharp_style_var_elsewhere = true +csharp_style_var_for_built_in_types = true +csharp_style_var_when_type_is_apparent = true +csharp_using_directive_placement = outside_namespace + +dotnet_code_quality_unused_parameters = all +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = true +dotnet_style_coalesce_expression = true +dotnet_style_collection_initializer = true +dotnet_style_explicit_tuple_names = true +dotnet_style_namespace_match_folder = true +dotnet_style_null_propagation = true +dotnet_style_object_initializer = true +dotnet_style_operator_placement_when_wrapping = end_of_line +dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary +dotnet_style_parentheses_in_other_operators = never_if_unnecessary +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity +dotnet_style_predefined_type_for_locals_parameters_members = true +dotnet_style_predefined_type_for_member_access = true +dotnet_style_prefer_auto_properties = true +dotnet_style_prefer_compound_assignment = true +dotnet_style_prefer_conditional_expression_over_assignment = true +dotnet_style_prefer_conditional_expression_over_return = true +dotnet_style_prefer_foreach_explicit_cast_in_source = always +dotnet_style_prefer_inferred_anonymous_type_member_names = true +dotnet_style_prefer_inferred_tuple_names = true +dotnet_style_prefer_is_null_check_over_reference_equality_method = true +dotnet_style_prefer_simplified_boolean_expressions = true +dotnet_style_prefer_simplified_interpolation = true +dotnet_style_qualification_for_event = false +dotnet_style_qualification_for_field = false +dotnet_style_qualification_for_method = false +dotnet_style_qualification_for_property = false +dotnet_style_readonly_field = true +dotnet_style_require_accessibility_modifiers = always + +dotnet_public_api_analyzer.require_api_files = true + +dotnet_diagnostic.EnableGenerateDocumentationFile.severity = none # TODO: https://github.com/dotnet/roslyn/issues/41640 + +dotnet_diagnostic.CA1000.severity = none +dotnet_diagnostic.CA1001.severity = error +dotnet_diagnostic.CA1002.severity = error +dotnet_diagnostic.CA1003.severity = none +dotnet_diagnostic.CA1005.severity = none +dotnet_diagnostic.CA1008.severity = error +dotnet_diagnostic.CA1010.severity = error +dotnet_diagnostic.CA1012.severity = error +dotnet_diagnostic.CA1014.severity = none +dotnet_diagnostic.CA1016.severity = error +dotnet_diagnostic.CA1017.severity = none +dotnet_diagnostic.CA1018.severity = error +dotnet_diagnostic.CA1019.severity = error +dotnet_diagnostic.CA1021.severity = none +dotnet_diagnostic.CA1024.severity = error +dotnet_diagnostic.CA1027.severity = error +dotnet_diagnostic.CA1028.severity = none +dotnet_diagnostic.CA1030.severity = error +dotnet_diagnostic.CA1031.severity = error +dotnet_diagnostic.CA1032.severity = error +dotnet_diagnostic.CA1033.severity = error +dotnet_diagnostic.CA1034.severity = none +dotnet_diagnostic.CA1036.severity = error +dotnet_diagnostic.CA1040.severity = none +dotnet_diagnostic.CA1041.severity = error +dotnet_diagnostic.CA1043.severity = none +dotnet_diagnostic.CA1044.severity = error +dotnet_diagnostic.CA1045.severity = none +dotnet_diagnostic.CA1046.severity = none +dotnet_diagnostic.CA1047.severity = error +dotnet_diagnostic.CA1050.severity = error +dotnet_diagnostic.CA1051.severity = error +dotnet_diagnostic.CA1052.severity = error +dotnet_diagnostic.CA1053.severity = error +dotnet_diagnostic.CA1054.severity = error +dotnet_diagnostic.CA1055.severity = error +dotnet_diagnostic.CA1056.severity = error +dotnet_diagnostic.CA1058.severity = error +dotnet_diagnostic.CA1060.severity = none +dotnet_diagnostic.CA1061.severity = error +dotnet_diagnostic.CA1062.severity = error +dotnet_diagnostic.CA1063.severity = error +dotnet_diagnostic.CA1064.severity = error +dotnet_diagnostic.CA1065.severity = error +dotnet_diagnostic.CA1066.severity = error +dotnet_diagnostic.CA1067.severity = error +dotnet_diagnostic.CA1068.severity = error +dotnet_diagnostic.CA1069.severity = error +dotnet_diagnostic.CA1070.severity = error +dotnet_diagnostic.CA1200.severity = error +dotnet_diagnostic.CA1303.severity = none +dotnet_diagnostic.CA1304.severity = error +dotnet_diagnostic.CA1305.severity = error +dotnet_diagnostic.CA1307.severity = error +dotnet_diagnostic.CA1308.severity = error +dotnet_diagnostic.CA1309.severity = error +dotnet_diagnostic.CA1310.severity = error +dotnet_diagnostic.CA1311.severity = error +dotnet_diagnostic.CA1401.severity = error +dotnet_diagnostic.CA1416.severity = none +dotnet_diagnostic.CA1417.severity = error +dotnet_diagnostic.CA1418.severity = error +dotnet_diagnostic.CA1419.severity = error +dotnet_diagnostic.CA1420.severity = error +dotnet_diagnostic.CA1421.severity = error +dotnet_diagnostic.CA1422.severity = error +dotnet_diagnostic.CA1501.severity = none +dotnet_diagnostic.CA1502.severity = none +dotnet_diagnostic.CA1505.severity = none +dotnet_diagnostic.CA1506.severity = none +dotnet_diagnostic.CA1507.severity = error +dotnet_diagnostic.CA1508.severity = error +dotnet_diagnostic.CA1509.severity = error +dotnet_diagnostic.CA1510.severity = error +dotnet_diagnostic.CA1511.severity = error +dotnet_diagnostic.CA1512.severity = error +dotnet_diagnostic.CA1513.severity = error +dotnet_diagnostic.CA1514.severity = error +dotnet_diagnostic.CA1700.severity = error +dotnet_diagnostic.CA1707.severity = error +dotnet_diagnostic.CA1708.severity = error +dotnet_diagnostic.CA1710.severity = error +dotnet_diagnostic.CA1711.severity = error +dotnet_diagnostic.CA1712.severity = error +dotnet_diagnostic.CA1713.severity = error +dotnet_diagnostic.CA1714.severity = error +dotnet_diagnostic.CA1715.severity = error +dotnet_diagnostic.CA1716.severity = none +dotnet_diagnostic.CA1717.severity = error +dotnet_diagnostic.CA1720.severity = none +dotnet_diagnostic.CA1721.severity = error +dotnet_diagnostic.CA1724.severity = error +dotnet_diagnostic.CA1725.severity = error +dotnet_diagnostic.CA1727.severity = error +dotnet_diagnostic.CA1802.severity = error +dotnet_diagnostic.CA1805.severity = error +dotnet_diagnostic.CA1806.severity = error +dotnet_diagnostic.CA1810.severity = error +dotnet_diagnostic.CA1812.severity = error +dotnet_diagnostic.CA1813.severity = none +dotnet_diagnostic.CA1814.severity = none +dotnet_diagnostic.CA1815.severity = error +dotnet_diagnostic.CA1816.severity = error +dotnet_diagnostic.CA1820.severity = error +dotnet_diagnostic.CA1821.severity = error +dotnet_diagnostic.CA1822.severity = error +dotnet_diagnostic.CA1823.severity = error +dotnet_diagnostic.CA1824.severity = error +dotnet_diagnostic.CA1825.severity = error +dotnet_diagnostic.CA1826.severity = error +dotnet_diagnostic.CA1827.severity = error +dotnet_diagnostic.CA1828.severity = error +dotnet_diagnostic.CA1829.severity = error +dotnet_diagnostic.CA1830.severity = error +dotnet_diagnostic.CA1831.severity = error +dotnet_diagnostic.CA1832.severity = error +dotnet_diagnostic.CA1833.severity = error +dotnet_diagnostic.CA1834.severity = error +dotnet_diagnostic.CA1835.severity = error +dotnet_diagnostic.CA1836.severity = error +dotnet_diagnostic.CA1837.severity = error +dotnet_diagnostic.CA1838.severity = error +dotnet_diagnostic.CA1839.severity = error +dotnet_diagnostic.CA1840.severity = error +dotnet_diagnostic.CA1841.severity = error +dotnet_diagnostic.CA1842.severity = error +dotnet_diagnostic.CA1843.severity = error +dotnet_diagnostic.CA1844.severity = error +dotnet_diagnostic.CA1845.severity = error +dotnet_diagnostic.CA1846.severity = error +dotnet_diagnostic.CA1847.severity = error +dotnet_diagnostic.CA1848.severity = error +dotnet_diagnostic.CA1849.severity = error +dotnet_diagnostic.CA1850.severity = error +dotnet_diagnostic.CA1851.severity = error +dotnet_diagnostic.CA1852.severity = error +dotnet_diagnostic.CA1853.severity = error +dotnet_diagnostic.CA1854.severity = error +dotnet_diagnostic.CA1855.severity = error +dotnet_diagnostic.CA1856.severity = error +dotnet_diagnostic.CA1857.severity = error +dotnet_diagnostic.CA1858.severity = error +dotnet_diagnostic.CA1859.severity = none +dotnet_diagnostic.CA1860.severity = error +dotnet_diagnostic.CA1861.severity = error +dotnet_diagnostic.CA1862.severity = error +dotnet_diagnostic.CA1863.severity = error +dotnet_diagnostic.CA1864.severity = error +dotnet_diagnostic.CA1865.severity = error +dotnet_diagnostic.CA1866.severity = error +dotnet_diagnostic.CA1867.severity = error +dotnet_diagnostic.CA1868.severity = error +dotnet_diagnostic.CA1869.severity = error +dotnet_diagnostic.CA1870.severity = error +dotnet_diagnostic.CA2000.severity = error +dotnet_diagnostic.CA2002.severity = error +dotnet_diagnostic.CA2007.severity = error +dotnet_diagnostic.CA2008.severity = error +dotnet_diagnostic.CA2009.severity = error +dotnet_diagnostic.CA2011.severity = error +dotnet_diagnostic.CA2012.severity = error +dotnet_diagnostic.CA2013.severity = error +dotnet_diagnostic.CA2014.severity = error +dotnet_diagnostic.CA2015.severity = error +dotnet_diagnostic.CA2016.severity = error +dotnet_diagnostic.CA2017.severity = error +dotnet_diagnostic.CA2018.severity = error +dotnet_diagnostic.CA2019.severity = error +dotnet_diagnostic.CA2020.severity = error +dotnet_diagnostic.CA2021.severity = error +dotnet_diagnostic.CA2100.severity = error +dotnet_diagnostic.CA2101.severity = error +dotnet_diagnostic.CA2119.severity = error +dotnet_diagnostic.CA2153.severity = error +dotnet_diagnostic.CA2200.severity = error +dotnet_diagnostic.CA2201.severity = error +dotnet_diagnostic.CA2207.severity = error +dotnet_diagnostic.CA2208.severity = error +dotnet_diagnostic.CA2211.severity = error +dotnet_diagnostic.CA2213.severity = error +dotnet_diagnostic.CA2214.severity = error +dotnet_diagnostic.CA2215.severity = error +dotnet_diagnostic.CA2216.severity = error +dotnet_diagnostic.CA2217.severity = error +dotnet_diagnostic.CA2218.severity = error +dotnet_diagnostic.CA2219.severity = error +dotnet_diagnostic.CA2224.severity = error +dotnet_diagnostic.CA2225.severity = none +dotnet_diagnostic.CA2226.severity = error +dotnet_diagnostic.CA2227.severity = error +dotnet_diagnostic.CA2231.severity = error +dotnet_diagnostic.CA2234.severity = error +dotnet_diagnostic.CA2235.severity = none +dotnet_diagnostic.CA2237.severity = none +dotnet_diagnostic.CA2241.severity = error +dotnet_diagnostic.CA2242.severity = error +dotnet_diagnostic.CA2243.severity = error +dotnet_diagnostic.CA2244.severity = error +dotnet_diagnostic.CA2245.severity = error +dotnet_diagnostic.CA2246.severity = none +dotnet_diagnostic.CA2247.severity = error +dotnet_diagnostic.CA2248.severity = error +dotnet_diagnostic.CA2249.severity = error +dotnet_diagnostic.CA2250.severity = error +dotnet_diagnostic.CA2251.severity = error +dotnet_diagnostic.CA2252.severity = error +dotnet_diagnostic.CA2253.severity = error +dotnet_diagnostic.CA2254.severity = error +dotnet_diagnostic.CA2255.severity = error +dotnet_diagnostic.CA2256.severity = error +dotnet_diagnostic.CA2257.severity = error +dotnet_diagnostic.CA2259.severity = error +dotnet_diagnostic.CA2260.severity = error +dotnet_diagnostic.CA2261.severity = error +dotnet_diagnostic.CA2300.severity = error +dotnet_diagnostic.CA2301.severity = error +dotnet_diagnostic.CA2302.severity = error +dotnet_diagnostic.CA2305.severity = error +dotnet_diagnostic.CA2310.severity = error +dotnet_diagnostic.CA2311.severity = error +dotnet_diagnostic.CA2312.severity = error +dotnet_diagnostic.CA2315.severity = error +dotnet_diagnostic.CA2321.severity = error +dotnet_diagnostic.CA2322.severity = error +dotnet_diagnostic.CA2326.severity = error +dotnet_diagnostic.CA2327.severity = error +dotnet_diagnostic.CA2328.severity = error +dotnet_diagnostic.CA2329.severity = error +dotnet_diagnostic.CA2330.severity = error +dotnet_diagnostic.CA2350.severity = error +dotnet_diagnostic.CA2351.severity = error +dotnet_diagnostic.CA2352.severity = error +dotnet_diagnostic.CA2353.severity = error +dotnet_diagnostic.CA2354.severity = error +dotnet_diagnostic.CA2355.severity = error +dotnet_diagnostic.CA2356.severity = error +dotnet_diagnostic.CA2361.severity = error +dotnet_diagnostic.CA2362.severity = error +dotnet_diagnostic.CA3001.severity = error +dotnet_diagnostic.CA3002.severity = error +dotnet_diagnostic.CA3003.severity = error +dotnet_diagnostic.CA3004.severity = error +dotnet_diagnostic.CA3006.severity = error +dotnet_diagnostic.CA3007.severity = error +dotnet_diagnostic.CA3008.severity = error +dotnet_diagnostic.CA3009.severity = error +dotnet_diagnostic.CA3010.severity = error +dotnet_diagnostic.CA3011.severity = error +dotnet_diagnostic.CA3012.severity = error +dotnet_diagnostic.CA3061.severity = error +dotnet_diagnostic.CA3075.severity = error +dotnet_diagnostic.CA3076.severity = error +dotnet_diagnostic.CA3077.severity = error +dotnet_diagnostic.CA3147.severity = error +dotnet_diagnostic.CA5350.severity = error +dotnet_diagnostic.CA5351.severity = error +dotnet_diagnostic.CA5358.severity = error +dotnet_diagnostic.CA5359.severity = error +dotnet_diagnostic.CA5360.severity = error +dotnet_diagnostic.CA5361.severity = error +dotnet_diagnostic.CA5362.severity = error +dotnet_diagnostic.CA5363.severity = error +dotnet_diagnostic.CA5364.severity = error +dotnet_diagnostic.CA5365.severity = error +dotnet_diagnostic.CA5366.severity = error +dotnet_diagnostic.CA5367.severity = error +dotnet_diagnostic.CA5368.severity = error +dotnet_diagnostic.CA5369.severity = error +dotnet_diagnostic.CA5370.severity = error +dotnet_diagnostic.CA5371.severity = error +dotnet_diagnostic.CA5372.severity = error +dotnet_diagnostic.CA5373.severity = error +dotnet_diagnostic.CA5374.severity = error +dotnet_diagnostic.CA5375.severity = error +dotnet_diagnostic.CA5376.severity = error +dotnet_diagnostic.CA5377.severity = error +dotnet_diagnostic.CA5378.severity = error +dotnet_diagnostic.CA5379.severity = error +dotnet_diagnostic.CA5380.severity = error +dotnet_diagnostic.CA5381.severity = error +dotnet_diagnostic.CA5382.severity = error +dotnet_diagnostic.CA5383.severity = error +dotnet_diagnostic.CA5384.severity = error +dotnet_diagnostic.CA5385.severity = error +dotnet_diagnostic.CA5386.severity = error +dotnet_diagnostic.CA5387.severity = error +dotnet_diagnostic.CA5388.severity = error +dotnet_diagnostic.CA5389.severity = error +dotnet_diagnostic.CA5390.severity = error +dotnet_diagnostic.CA5391.severity = error +dotnet_diagnostic.CA5392.severity = none +dotnet_diagnostic.CA5393.severity = error +dotnet_diagnostic.CA5394.severity = error +dotnet_diagnostic.CA5395.severity = error +dotnet_diagnostic.CA5396.severity = error +dotnet_diagnostic.CA5397.severity = error +dotnet_diagnostic.CA5398.severity = error +dotnet_diagnostic.CA5399.severity = error +dotnet_diagnostic.CA5400.severity = error +dotnet_diagnostic.CA5401.severity = error +dotnet_diagnostic.CA5402.severity = error +dotnet_diagnostic.CA5403.severity = error +dotnet_diagnostic.CA5404.severity = error +dotnet_diagnostic.CA5405.severity = error + +dotnet_diagnostic.IDE0001.severity = error +dotnet_diagnostic.IDE0002.severity = error +dotnet_diagnostic.IDE0003.severity = error +dotnet_diagnostic.IDE0004.severity = error +dotnet_diagnostic.IDE0005.severity = error +dotnet_diagnostic.IDE0007.severity = error +dotnet_diagnostic.IDE0008.severity = error +dotnet_diagnostic.IDE0009.severity = error +dotnet_diagnostic.IDE0010.severity = silent +dotnet_diagnostic.IDE0011.severity = error +dotnet_diagnostic.IDE0016.severity = error +dotnet_diagnostic.IDE0017.severity = error +dotnet_diagnostic.IDE0018.severity = error +dotnet_diagnostic.IDE0019.severity = error +dotnet_diagnostic.IDE0020.severity = error +dotnet_diagnostic.IDE0021.severity = error +dotnet_diagnostic.IDE0022.severity = error +dotnet_diagnostic.IDE0023.severity = error +dotnet_diagnostic.IDE0024.severity = error +dotnet_diagnostic.IDE0025.severity = error +dotnet_diagnostic.IDE0026.severity = error +dotnet_diagnostic.IDE0027.severity = error +dotnet_diagnostic.IDE0028.severity = error +dotnet_diagnostic.IDE0029.severity = error +dotnet_diagnostic.IDE0030.severity = error +dotnet_diagnostic.IDE0031.severity = error +dotnet_diagnostic.IDE0032.severity = error +dotnet_diagnostic.IDE0033.severity = error +dotnet_diagnostic.IDE0034.severity = error +dotnet_diagnostic.IDE0035.severity = error +dotnet_diagnostic.IDE0036.severity = error +dotnet_diagnostic.IDE0037.severity = error +dotnet_diagnostic.IDE0038.severity = error +dotnet_diagnostic.IDE0039.severity = error +dotnet_diagnostic.IDE0040.severity = error +dotnet_diagnostic.IDE0041.severity = error +dotnet_diagnostic.IDE0042.severity = error +dotnet_diagnostic.IDE0044.severity = error +dotnet_diagnostic.IDE0045.severity = error +dotnet_diagnostic.IDE0046.severity = error +dotnet_diagnostic.IDE0047.severity = error +dotnet_diagnostic.IDE0048.severity = error +dotnet_diagnostic.IDE0049.severity = error +dotnet_diagnostic.IDE0051.severity = error +dotnet_diagnostic.IDE0052.severity = error +dotnet_diagnostic.IDE0053.severity = error +dotnet_diagnostic.IDE0054.severity = error +dotnet_diagnostic.IDE0055.severity = error +dotnet_diagnostic.IDE0056.severity = error +dotnet_diagnostic.IDE0057.severity = error +dotnet_diagnostic.IDE0058.severity = error +dotnet_diagnostic.IDE0059.severity = error +dotnet_diagnostic.IDE0060.severity = error +dotnet_diagnostic.IDE0061.severity = error +dotnet_diagnostic.IDE0062.severity = error +dotnet_diagnostic.IDE0063.severity = error +dotnet_diagnostic.IDE0064.severity = error +dotnet_diagnostic.IDE0065.severity = error +dotnet_diagnostic.IDE0066.severity = error +dotnet_diagnostic.IDE0070.severity = error +dotnet_diagnostic.IDE0071.severity = error +dotnet_diagnostic.IDE0072.severity = silent +dotnet_diagnostic.IDE0073.severity = none +dotnet_diagnostic.IDE0074.severity = error +dotnet_diagnostic.IDE0075.severity = error +dotnet_diagnostic.IDE0076.severity = error +dotnet_diagnostic.IDE0077.severity = error +dotnet_diagnostic.IDE0078.severity = error +dotnet_diagnostic.IDE0079.severity = error +dotnet_diagnostic.IDE0080.severity = error +dotnet_diagnostic.IDE0082.severity = error +dotnet_diagnostic.IDE0083.severity = error +dotnet_diagnostic.IDE0090.severity = error +dotnet_diagnostic.IDE0100.severity = error +dotnet_diagnostic.IDE0110.severity = error +dotnet_diagnostic.IDE0120.severity = error +dotnet_diagnostic.IDE0130.severity = error +dotnet_diagnostic.IDE0150.severity = error +dotnet_diagnostic.IDE0160.severity = error +dotnet_diagnostic.IDE0161.severity = error +dotnet_diagnostic.IDE0170.severity = error +dotnet_diagnostic.IDE0180.severity = error +dotnet_diagnostic.IDE0200.severity = error +dotnet_diagnostic.IDE0210.severity = error +dotnet_diagnostic.IDE0211.severity = error +dotnet_diagnostic.IDE0220.severity = error +dotnet_diagnostic.IDE0230.severity = error +dotnet_diagnostic.IDE0240.severity = error +dotnet_diagnostic.IDE0241.severity = error +dotnet_diagnostic.IDE0250.severity = error +dotnet_diagnostic.IDE0251.severity = error +dotnet_diagnostic.IDE0260.severity = error +dotnet_diagnostic.IDE0270.severity = error +dotnet_diagnostic.IDE0280.severity = error +dotnet_diagnostic.IDE0290.severity = none +dotnet_diagnostic.IDE0300.severity = error +dotnet_diagnostic.IDE0301.severity = error +dotnet_diagnostic.IDE0302.severity = error +dotnet_diagnostic.IDE0303.severity = error +dotnet_diagnostic.IDE0304.severity = error +dotnet_diagnostic.IDE0305.severity = error +dotnet_diagnostic.IDE1005.severity = error +dotnet_diagnostic.IDE1006.severity = error + +dotnet_diagnostic.RS0016.severity = error +dotnet_diagnostic.RS0017.severity = error +dotnet_diagnostic.RS0022.severity = error +dotnet_diagnostic.RS0024.severity = error +dotnet_diagnostic.RS0025.severity = error +dotnet_diagnostic.RS0026.severity = none +dotnet_diagnostic.RS0027.severity = error +dotnet_diagnostic.RS0036.severity = error +dotnet_diagnostic.RS0037.severity = error +dotnet_diagnostic.RS0041.severity = error +dotnet_diagnostic.RS0048.severity = error +dotnet_diagnostic.RS0050.severity = error +dotnet_diagnostic.RS0051.severity = none +dotnet_diagnostic.RS0052.severity = none +dotnet_diagnostic.RS0053.severity = none +dotnet_diagnostic.RS0054.severity = none +dotnet_diagnostic.RS0055.severity = none +dotnet_diagnostic.RS0056.severity = none +dotnet_diagnostic.RS0057.severity = none +dotnet_diagnostic.RS0058.severity = none +dotnet_diagnostic.RS0059.severity = none +dotnet_diagnostic.RS0060.severity = none +dotnet_diagnostic.RS0061.severity = none +dotnet_diagnostic.RS1001.severity = error +dotnet_diagnostic.RS1002.severity = error +dotnet_diagnostic.RS1003.severity = error +dotnet_diagnostic.RS1004.severity = none +dotnet_diagnostic.RS1005.severity = error +dotnet_diagnostic.RS1006.severity = error +dotnet_diagnostic.RS1007.severity = none +dotnet_diagnostic.RS1008.severity = error +dotnet_diagnostic.RS1009.severity = error +dotnet_diagnostic.RS1010.severity = error +dotnet_diagnostic.RS1011.severity = error +dotnet_diagnostic.RS1012.severity = error +dotnet_diagnostic.RS1013.severity = error +dotnet_diagnostic.RS1015.severity = none +dotnet_diagnostic.RS1016.severity = error +dotnet_diagnostic.RS1017.severity = error +dotnet_diagnostic.RS1018.severity = error +dotnet_diagnostic.RS1019.severity = error +dotnet_diagnostic.RS1020.severity = error +dotnet_diagnostic.RS1021.severity = error +dotnet_diagnostic.RS1022.severity = error +dotnet_diagnostic.RS1023.severity = error +dotnet_diagnostic.RS1024.severity = error +dotnet_diagnostic.RS1025.severity = error +dotnet_diagnostic.RS1026.severity = error +dotnet_diagnostic.RS1027.severity = error +dotnet_diagnostic.RS1028.severity = error +dotnet_diagnostic.RS1029.severity = error +dotnet_diagnostic.RS1030.severity = error +dotnet_diagnostic.RS1031.severity = error +dotnet_diagnostic.RS1032.severity = error +dotnet_diagnostic.RS1033.severity = error +dotnet_diagnostic.RS1034.severity = error +dotnet_diagnostic.RS1035.severity = error +dotnet_diagnostic.RS1036.severity = error +dotnet_diagnostic.RS1037.severity = error +dotnet_diagnostic.RS2000.severity = none +dotnet_diagnostic.RS2001.severity = none +dotnet_diagnostic.RS2002.severity = none +dotnet_diagnostic.RS2003.severity = none +dotnet_diagnostic.RS2004.severity = none +dotnet_diagnostic.RS2005.severity = none +dotnet_diagnostic.RS2006.severity = none +dotnet_diagnostic.RS2007.severity = none +dotnet_diagnostic.RS2008.severity = none + +dotnet_diagnostic.SA0001.severity = none +dotnet_diagnostic.SA0002.severity = error +dotnet_diagnostic.SA1000.severity = error +dotnet_diagnostic.SA1001.severity = error +dotnet_diagnostic.SA1002.severity = error +dotnet_diagnostic.SA1003.severity = error +dotnet_diagnostic.SA1004.severity = error +dotnet_diagnostic.SA1005.severity = error +dotnet_diagnostic.SA1006.severity = none +dotnet_diagnostic.SA1007.severity = error +dotnet_diagnostic.SA1008.severity = error +dotnet_diagnostic.SA1009.severity = error +dotnet_diagnostic.SA1010.severity = error +dotnet_diagnostic.SA1011.severity = error +dotnet_diagnostic.SA1012.severity = error +dotnet_diagnostic.SA1013.severity = error +dotnet_diagnostic.SA1014.severity = error +dotnet_diagnostic.SA1015.severity = error +dotnet_diagnostic.SA1016.severity = error +dotnet_diagnostic.SA1017.severity = error +dotnet_diagnostic.SA1018.severity = error +dotnet_diagnostic.SA1019.severity = error +dotnet_diagnostic.SA1020.severity = error +dotnet_diagnostic.SA1021.severity = error +dotnet_diagnostic.SA1022.severity = error +dotnet_diagnostic.SA1023.severity = error +dotnet_diagnostic.SA1024.severity = error +dotnet_diagnostic.SA1025.severity = error +dotnet_diagnostic.SA1026.severity = error +dotnet_diagnostic.SA1027.severity = error +dotnet_diagnostic.SA1028.severity = error +dotnet_diagnostic.SA1100.severity = error +dotnet_diagnostic.SA1101.severity = none +dotnet_diagnostic.SA1102.severity = error +dotnet_diagnostic.SA1103.severity = error +dotnet_diagnostic.SA1104.severity = error +dotnet_diagnostic.SA1105.severity = error +dotnet_diagnostic.SA1106.severity = error +dotnet_diagnostic.SA1107.severity = error +dotnet_diagnostic.SA1108.severity = error +dotnet_diagnostic.SA1110.severity = error +dotnet_diagnostic.SA1111.severity = error +dotnet_diagnostic.SA1112.severity = error +dotnet_diagnostic.SA1113.severity = error +dotnet_diagnostic.SA1114.severity = error +dotnet_diagnostic.SA1115.severity = error +dotnet_diagnostic.SA1116.severity = error +dotnet_diagnostic.SA1117.severity = error +dotnet_diagnostic.SA1118.severity = none +dotnet_diagnostic.SA1119.severity = error +dotnet_diagnostic.SA1120.severity = error +dotnet_diagnostic.SA1121.severity = error +dotnet_diagnostic.SA1122.severity = error +dotnet_diagnostic.SA1123.severity = error +dotnet_diagnostic.SA1124.severity = error +dotnet_diagnostic.SA1125.severity = error +dotnet_diagnostic.SA1127.severity = error +dotnet_diagnostic.SA1128.severity = error +dotnet_diagnostic.SA1129.severity = error +dotnet_diagnostic.SA1130.severity = error +dotnet_diagnostic.SA1131.severity = error +dotnet_diagnostic.SA1132.severity = error +dotnet_diagnostic.SA1133.severity = error +dotnet_diagnostic.SA1134.severity = error +dotnet_diagnostic.SA1135.severity = error +dotnet_diagnostic.SA1136.severity = error +dotnet_diagnostic.SA1137.severity = error +dotnet_diagnostic.SA1139.severity = error +dotnet_diagnostic.SA1141.severity = error +dotnet_diagnostic.SA1142.severity = error +dotnet_diagnostic.SA1200.severity = error +dotnet_diagnostic.SA1201.severity = none +dotnet_diagnostic.SA1202.severity = none +dotnet_diagnostic.SA1203.severity = error +dotnet_diagnostic.SA1204.severity = none +dotnet_diagnostic.SA1205.severity = error +dotnet_diagnostic.SA1206.severity = error +dotnet_diagnostic.SA1207.severity = error +dotnet_diagnostic.SA1208.severity = error +dotnet_diagnostic.SA1209.severity = error +dotnet_diagnostic.SA1210.severity = error +dotnet_diagnostic.SA1211.severity = error +dotnet_diagnostic.SA1212.severity = error +dotnet_diagnostic.SA1213.severity = error +dotnet_diagnostic.SA1214.severity = error +dotnet_diagnostic.SA1216.severity = error +dotnet_diagnostic.SA1217.severity = error +dotnet_diagnostic.SA1300.severity = error +dotnet_diagnostic.SA1301.severity = none +dotnet_diagnostic.SA1302.severity = error +dotnet_diagnostic.SA1303.severity = error +dotnet_diagnostic.SA1304.severity = error +dotnet_diagnostic.SA1305.severity = none +dotnet_diagnostic.SA1306.severity = error +dotnet_diagnostic.SA1307.severity = error +dotnet_diagnostic.SA1308.severity = error +dotnet_diagnostic.SA1309.severity = none +dotnet_diagnostic.SA1310.severity = error +dotnet_diagnostic.SA1311.severity = error +dotnet_diagnostic.SA1312.severity = error +dotnet_diagnostic.SA1313.severity = error +dotnet_diagnostic.SA1314.severity = error +dotnet_diagnostic.SA1316.severity = error +dotnet_diagnostic.SA1400.severity = error +dotnet_diagnostic.SA1401.severity = error +dotnet_diagnostic.SA1402.severity = error +dotnet_diagnostic.SA1403.severity = error +dotnet_diagnostic.SA1404.severity = none +dotnet_diagnostic.SA1405.severity = error +dotnet_diagnostic.SA1406.severity = error +dotnet_diagnostic.SA1407.severity = none +dotnet_diagnostic.SA1408.severity = error +dotnet_diagnostic.SA1410.severity = error +dotnet_diagnostic.SA1411.severity = error +dotnet_diagnostic.SA1412.severity = none +dotnet_diagnostic.SA1413.severity = error +dotnet_diagnostic.SA1414.severity = error +dotnet_diagnostic.SA1500.severity = error +dotnet_diagnostic.SA1501.severity = error +dotnet_diagnostic.SA1502.severity = error +dotnet_diagnostic.SA1503.severity = none +dotnet_diagnostic.SA1504.severity = error +dotnet_diagnostic.SA1505.severity = error +dotnet_diagnostic.SA1506.severity = error +dotnet_diagnostic.SA1507.severity = error +dotnet_diagnostic.SA1508.severity = error +dotnet_diagnostic.SA1509.severity = none # TODO: https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3539 +dotnet_diagnostic.SA1510.severity = error +dotnet_diagnostic.SA1511.severity = error +dotnet_diagnostic.SA1512.severity = none +dotnet_diagnostic.SA1513.severity = error +dotnet_diagnostic.SA1514.severity = error +dotnet_diagnostic.SA1515.severity = error +dotnet_diagnostic.SA1516.severity = error +dotnet_diagnostic.SA1517.severity = error +dotnet_diagnostic.SA1518.severity = error +dotnet_diagnostic.SA1519.severity = none +dotnet_diagnostic.SA1520.severity = none +dotnet_diagnostic.SA1600.severity = none +dotnet_diagnostic.SA1601.severity = none +dotnet_diagnostic.SA1602.severity = none +dotnet_diagnostic.SA1604.severity = error +dotnet_diagnostic.SA1605.severity = error +dotnet_diagnostic.SA1606.severity = error +dotnet_diagnostic.SA1607.severity = error +dotnet_diagnostic.SA1608.severity = error +dotnet_diagnostic.SA1609.severity = error +dotnet_diagnostic.SA1610.severity = error +dotnet_diagnostic.SA1611.severity = error +dotnet_diagnostic.SA1612.severity = error +dotnet_diagnostic.SA1613.severity = error +dotnet_diagnostic.SA1614.severity = error +dotnet_diagnostic.SA1615.severity = error +dotnet_diagnostic.SA1616.severity = error +dotnet_diagnostic.SA1617.severity = error +dotnet_diagnostic.SA1618.severity = error +dotnet_diagnostic.SA1619.severity = error +dotnet_diagnostic.SA1620.severity = error +dotnet_diagnostic.SA1621.severity = error +dotnet_diagnostic.SA1622.severity = error +dotnet_diagnostic.SA1623.severity = error +dotnet_diagnostic.SA1624.severity = error +dotnet_diagnostic.SA1625.severity = error +dotnet_diagnostic.SA1626.severity = error +dotnet_diagnostic.SA1627.severity = error +dotnet_diagnostic.SA1629.severity = error +dotnet_diagnostic.SA1633.severity = none +dotnet_diagnostic.SA1634.severity = none +dotnet_diagnostic.SA1635.severity = none +dotnet_diagnostic.SA1636.severity = none +dotnet_diagnostic.SA1637.severity = none +dotnet_diagnostic.SA1638.severity = none +dotnet_diagnostic.SA1639.severity = none +dotnet_diagnostic.SA1640.severity = none +dotnet_diagnostic.SA1641.severity = none +dotnet_diagnostic.SA1642.severity = error +dotnet_diagnostic.SA1643.severity = error +dotnet_diagnostic.SA1648.severity = error +dotnet_diagnostic.SA1649.severity = error +dotnet_diagnostic.SA1651.severity = error + +dotnet_diagnostic.SX1101.severity = error +dotnet_diagnostic.SX1309.severity = error +dotnet_diagnostic.SX1309S.severity = error + +dotnet_diagnostic.SYSLIB0001.severity = error +dotnet_diagnostic.SYSLIB0002.severity = error +dotnet_diagnostic.SYSLIB0003.severity = error +dotnet_diagnostic.SYSLIB0004.severity = error +dotnet_diagnostic.SYSLIB0005.severity = error +dotnet_diagnostic.SYSLIB0006.severity = error +dotnet_diagnostic.SYSLIB0007.severity = error +dotnet_diagnostic.SYSLIB0008.severity = error +dotnet_diagnostic.SYSLIB0009.severity = error +dotnet_diagnostic.SYSLIB0010.severity = error +dotnet_diagnostic.SYSLIB0011.severity = error +dotnet_diagnostic.SYSLIB0012.severity = error +dotnet_diagnostic.SYSLIB0013.severity = error +dotnet_diagnostic.SYSLIB0014.severity = error +dotnet_diagnostic.SYSLIB0015.severity = error +dotnet_diagnostic.SYSLIB0016.severity = error +dotnet_diagnostic.SYSLIB0017.severity = error +dotnet_diagnostic.SYSLIB0018.severity = error +dotnet_diagnostic.SYSLIB0019.severity = error +dotnet_diagnostic.SYSLIB0020.severity = error +dotnet_diagnostic.SYSLIB0021.severity = error +dotnet_diagnostic.SYSLIB0022.severity = error +dotnet_diagnostic.SYSLIB0023.severity = error +dotnet_diagnostic.SYSLIB0024.severity = error +dotnet_diagnostic.SYSLIB0025.severity = error +dotnet_diagnostic.SYSLIB0026.severity = error +dotnet_diagnostic.SYSLIB0027.severity = error +dotnet_diagnostic.SYSLIB0028.severity = error +dotnet_diagnostic.SYSLIB0029.severity = error +dotnet_diagnostic.SYSLIB0030.severity = error +dotnet_diagnostic.SYSLIB0031.severity = error +dotnet_diagnostic.SYSLIB0032.severity = error +dotnet_diagnostic.SYSLIB0033.severity = error +dotnet_diagnostic.SYSLIB0034.severity = error +dotnet_diagnostic.SYSLIB0035.severity = error +dotnet_diagnostic.SYSLIB0036.severity = error +dotnet_diagnostic.SYSLIB0037.severity = error +dotnet_diagnostic.SYSLIB0038.severity = error +dotnet_diagnostic.SYSLIB0039.severity = error +dotnet_diagnostic.SYSLIB0040.severity = error +dotnet_diagnostic.SYSLIB0041.severity = error +dotnet_diagnostic.SYSLIB0042.severity = error +dotnet_diagnostic.SYSLIB0043.severity = error +dotnet_diagnostic.SYSLIB0044.severity = error +dotnet_diagnostic.SYSLIB0045.severity = error +dotnet_diagnostic.SYSLIB0046.severity = error +dotnet_diagnostic.SYSLIB0047.severity = error +dotnet_diagnostic.SYSLIB0048.severity = error +dotnet_diagnostic.SYSLIB0049.severity = error +dotnet_diagnostic.SYSLIB0050.severity = error +dotnet_diagnostic.SYSLIB0051.severity = error +dotnet_diagnostic.SYSLIB0052.severity = error +dotnet_diagnostic.SYSLIB0053.severity = error +dotnet_diagnostic.SYSLIB1001.severity = error +dotnet_diagnostic.SYSLIB1002.severity = error +dotnet_diagnostic.SYSLIB1003.severity = error +dotnet_diagnostic.SYSLIB1005.severity = error +dotnet_diagnostic.SYSLIB1006.severity = error +dotnet_diagnostic.SYSLIB1007.severity = error +dotnet_diagnostic.SYSLIB1008.severity = error +dotnet_diagnostic.SYSLIB1009.severity = error +dotnet_diagnostic.SYSLIB1010.severity = error +dotnet_diagnostic.SYSLIB1011.severity = error +dotnet_diagnostic.SYSLIB1012.severity = error +dotnet_diagnostic.SYSLIB1013.severity = error +dotnet_diagnostic.SYSLIB1014.severity = error +dotnet_diagnostic.SYSLIB1015.severity = error +dotnet_diagnostic.SYSLIB1016.severity = error +dotnet_diagnostic.SYSLIB1017.severity = error +dotnet_diagnostic.SYSLIB1018.severity = error +dotnet_diagnostic.SYSLIB1019.severity = error +dotnet_diagnostic.SYSLIB1020.severity = error +dotnet_diagnostic.SYSLIB1021.severity = error +dotnet_diagnostic.SYSLIB1022.severity = error +dotnet_diagnostic.SYSLIB1023.severity = error +dotnet_diagnostic.SYSLIB1024.severity = error +dotnet_diagnostic.SYSLIB1025.severity = error +dotnet_diagnostic.SYSLIB1026.severity = error +dotnet_diagnostic.SYSLIB1030.severity = error +dotnet_diagnostic.SYSLIB1031.severity = error +dotnet_diagnostic.SYSLIB1032.severity = error +dotnet_diagnostic.SYSLIB1033.severity = error +dotnet_diagnostic.SYSLIB1034.severity = error +dotnet_diagnostic.SYSLIB1035.severity = error +dotnet_diagnostic.SYSLIB1036.severity = error +dotnet_diagnostic.SYSLIB1037.severity = error +dotnet_diagnostic.SYSLIB1038.severity = error +dotnet_diagnostic.SYSLIB1039.severity = error +dotnet_diagnostic.SYSLIB1040.severity = error +dotnet_diagnostic.SYSLIB1041.severity = error +dotnet_diagnostic.SYSLIB1042.severity = error +dotnet_diagnostic.SYSLIB1043.severity = error +dotnet_diagnostic.SYSLIB1044.severity = error +dotnet_diagnostic.SYSLIB1045.severity = error +dotnet_diagnostic.SYSLIB1050.severity = error +dotnet_diagnostic.SYSLIB1051.severity = error +dotnet_diagnostic.SYSLIB1052.severity = error +dotnet_diagnostic.SYSLIB1053.severity = error +dotnet_diagnostic.SYSLIB1054.severity = error +dotnet_diagnostic.SYSLIB1055.severity = error +dotnet_diagnostic.SYSLIB1056.severity = error +dotnet_diagnostic.SYSLIB1057.severity = error +dotnet_diagnostic.SYSLIB1058.severity = error +dotnet_diagnostic.SYSLIB1059.severity = error +dotnet_diagnostic.SYSLIB1060.severity = error +dotnet_diagnostic.SYSLIB1061.severity = error +dotnet_diagnostic.SYSLIB1062.severity = error +dotnet_diagnostic.SYSLIB1070.severity = error +dotnet_diagnostic.SYSLIB1071.severity = error +dotnet_diagnostic.SYSLIB1072.severity = error +dotnet_diagnostic.SYSLIB1073.severity = error +dotnet_diagnostic.SYSLIB1074.severity = error +dotnet_diagnostic.SYSLIB1075.severity = error +dotnet_diagnostic.SYSLIB1090.severity = error +dotnet_diagnostic.SYSLIB1091.severity = error +dotnet_diagnostic.SYSLIB1092.severity = error +dotnet_diagnostic.SYSLIB1093.severity = error +dotnet_diagnostic.SYSLIB1094.severity = error +dotnet_diagnostic.SYSLIB1095.severity = error +dotnet_diagnostic.SYSLIB1096.severity = error +dotnet_diagnostic.SYSLIB1097.severity = error +dotnet_diagnostic.SYSLIB1098.severity = error +dotnet_diagnostic.SYSLIB1099.severity = error +dotnet_diagnostic.SYSLIB1100.severity = error +dotnet_diagnostic.SYSLIB1101.severity = error +dotnet_diagnostic.SYSLIB1102.severity = error +dotnet_diagnostic.SYSLIB1103.severity = error +dotnet_diagnostic.SYSLIB1104.severity = error +dotnet_diagnostic.SYSLIB1201.severity = error +dotnet_diagnostic.SYSLIB1202.severity = error +dotnet_diagnostic.SYSLIB1203.severity = error +dotnet_diagnostic.SYSLIB1204.severity = error +dotnet_diagnostic.SYSLIB1205.severity = error +dotnet_diagnostic.SYSLIB1206.severity = error +dotnet_diagnostic.SYSLIB1207.severity = error +dotnet_diagnostic.SYSLIB1208.severity = error +dotnet_diagnostic.SYSLIB1209.severity = error +dotnet_diagnostic.SYSLIB1210.severity = error +dotnet_diagnostic.SYSLIB1211.severity = error +dotnet_diagnostic.SYSLIB1212.severity = error +dotnet_diagnostic.SYSLIB1213.severity = error +dotnet_diagnostic.SYSLIB1214.severity = error +dotnet_diagnostic.SYSLIB1215.severity = error +dotnet_diagnostic.SYSLIB1216.severity = error +dotnet_diagnostic.SYSLIB1220.severity = error +dotnet_diagnostic.SYSLIB1221.severity = error +dotnet_diagnostic.SYSLIB1222.severity = error +dotnet_diagnostic.SYSLIB1223.severity = error +dotnet_diagnostic.SYSLIB1224.severity = error + +dotnet_diagnostic.VSTHRD001.severity = none +dotnet_diagnostic.VSTHRD002.severity = none +dotnet_diagnostic.VSTHRD003.severity = none +dotnet_diagnostic.VSTHRD004.severity = none +dotnet_diagnostic.VSTHRD010.severity = none +dotnet_diagnostic.VSTHRD011.severity = none +dotnet_diagnostic.VSTHRD012.severity = none +dotnet_diagnostic.VSTHRD100.severity = error +dotnet_diagnostic.VSTHRD101.severity = error +dotnet_diagnostic.VSTHRD102.severity = error +dotnet_diagnostic.VSTHRD103.severity = none +dotnet_diagnostic.VSTHRD104.severity = none +dotnet_diagnostic.VSTHRD105.severity = none +dotnet_diagnostic.VSTHRD106.severity = none +dotnet_diagnostic.VSTHRD107.severity = error +dotnet_diagnostic.VSTHRD108.severity = none +dotnet_diagnostic.VSTHRD109.severity = none +dotnet_diagnostic.VSTHRD110.severity = none +dotnet_diagnostic.VSTHRD111.severity = none +dotnet_diagnostic.VSTHRD112.severity = none +dotnet_diagnostic.VSTHRD113.severity = none +dotnet_diagnostic.VSTHRD114.severity = error +dotnet_diagnostic.VSTHRD200.severity = error + +dotnet_diagnostic.xUnit1000.severity = error +dotnet_diagnostic.xUnit1001.severity = error +dotnet_diagnostic.xUnit1002.severity = error +dotnet_diagnostic.xUnit1003.severity = error +dotnet_diagnostic.xUnit1004.severity = none +dotnet_diagnostic.xUnit1005.severity = error +dotnet_diagnostic.xUnit1006.severity = error +dotnet_diagnostic.xUnit1007.severity = error +dotnet_diagnostic.xUnit1008.severity = error +dotnet_diagnostic.xUnit1009.severity = error +dotnet_diagnostic.xUnit1010.severity = error +dotnet_diagnostic.xUnit1011.severity = error +dotnet_diagnostic.xUnit1012.severity = error +dotnet_diagnostic.xUnit1013.severity = error +dotnet_diagnostic.xUnit1014.severity = error +dotnet_diagnostic.xUnit1015.severity = error +dotnet_diagnostic.xUnit1016.severity = error +dotnet_diagnostic.xUnit1017.severity = error +dotnet_diagnostic.xUnit1018.severity = error +dotnet_diagnostic.xUnit1019.severity = error +dotnet_diagnostic.xUnit1020.severity = error +dotnet_diagnostic.xUnit1021.severity = error +dotnet_diagnostic.xUnit1022.severity = error +dotnet_diagnostic.xUnit1023.severity = error +dotnet_diagnostic.xUnit1024.severity = error +dotnet_diagnostic.xUnit1025.severity = error +dotnet_diagnostic.xUnit1026.severity = error +dotnet_diagnostic.xUnit1027.severity = error +dotnet_diagnostic.xUnit1033.severity = error +dotnet_diagnostic.xUnit2000.severity = error +dotnet_diagnostic.xUnit2001.severity = error +dotnet_diagnostic.xUnit2002.severity = error +dotnet_diagnostic.xUnit2003.severity = error +dotnet_diagnostic.xUnit2004.severity = error +dotnet_diagnostic.xUnit2005.severity = error +dotnet_diagnostic.xUnit2006.severity = error +dotnet_diagnostic.xUnit2007.severity = error +dotnet_diagnostic.xUnit2008.severity = error +dotnet_diagnostic.xUnit2009.severity = error +dotnet_diagnostic.xUnit2010.severity = error +dotnet_diagnostic.xUnit2011.severity = error +dotnet_diagnostic.xUnit2012.severity = error +dotnet_diagnostic.xUnit2013.severity = error +dotnet_diagnostic.xUnit2014.severity = error +dotnet_diagnostic.xUnit2015.severity = error +dotnet_diagnostic.xUnit2016.severity = error +dotnet_diagnostic.xUnit2017.severity = error +dotnet_diagnostic.xUnit2018.severity = error +dotnet_diagnostic.xUnit3000.severity = error +dotnet_diagnostic.xUnit3001.severity = error diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..a6b6600 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,95 @@ +{ + "$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json", + "default": true, + "MD001": true, + "MD003": { + "style": "atx" + }, + "MD004": { + "style": "asterisk" + }, + "MD005": true, + "MD007": { + "start_indented": false, + "start_indent": 4, + "indent": 4 + }, + "MD009": { + "br_spaces": 0, + "strict": true + }, + "MD010": { + "spaces_per_tab": 4 + }, + "MD011": true, + "MD012": true, + "MD013": { + "code_blocks": false, + "headings": false, + "tables": false + }, + "MD014": true, + "MD018": true, + "MD019": true, + "MD020": true, + "MD021": true, + "MD022": true, + "MD023": true, + "MD024": true, + "MD025": true, + "MD026": { + "punctuation": "!,.:;?" + }, + "MD027": true, + "MD028": true, + "MD029": { + "style": "ordered" + }, + "MD030": true, + "MD031": true, + "MD032": true, + "MD033": { + "allowed_elements": [ + "div", + "img", + "p", + "strong" + ] + }, + "MD034": true, + "MD035": { + "style": "--------------------------------------------------------------------------------" + }, + "MD036": { + "punctuation": "!,.:;?" + }, + "MD037": true, + "MD038": true, + "MD039": true, + "MD040": { + "language_only": true + }, + "MD041": true, + "MD042": true, + "MD043": false, + "MD044": true, + "MD045": true, + "MD046": { + "style": "fenced" + }, + "MD047": true, + "MD048": { + "style": "backtick" + }, + "MD049": { + "style": "asterisk" + }, + "MD050": { + "style": "asterisk" + }, + "MD051": true, + "MD052": true, + "MD053": { + "ignored_definitions": [] + } +} diff --git a/.netconfig b/.netconfig new file mode 100644 index 0000000..6f483d7 --- /dev/null +++ b/.netconfig @@ -0,0 +1,65 @@ +[file "doc/.markdownlint-cli2.jsonc"] + url = https://github.com/vezel-dev/.github/blob/master/syn/doc/.markdownlint-cli2.jsonc + sha = 7d581ae5eedad5892855cebc673edafad664856b + etag = 485e4786a640cfe0b7d29c169baab04e9f2a7c24964ec56b55017bc26a1d796d + weak +[file "doc/.markdownlint.json"] + url = https://github.com/vezel-dev/.github/blob/master/syn/doc/.markdownlint.json + sha = 7d581ae5eedad5892855cebc673edafad664856b + etag = d763492a10cc6e14ba8f8ffe3279eda7964580ed9e18bcd6c7875fe2f53f226b + weak +[file ".editorconfig"] + url = https://github.com/vezel-dev/.github/blob/master/syn/.editorconfig + sha = 7d581ae5eedad5892855cebc673edafad664856b + etag = 8fa5a445045c6e24f51af44560a6449adf8d297f9e0d7412b39e5e39062cde54 + weak +[file ".gitattributes"] + url = https://github.com/vezel-dev/.github/blob/master/syn/.gitattributes + sha = e1d60d738e36f3741104a47c67156614aa5b9d8b + etag = 57083d3c73ff7ab2740ab17fd99d31cedcff606818190f9a415d97d27b62e7d4 + weak +[file ".gitbook.yaml"] + url = https://github.com/vezel-dev/.github/blob/master/syn/.gitbook.yaml + sha = 7d581ae5eedad5892855cebc673edafad664856b + etag = 66c2b9789da757c440568a36fefd050103c146bfd88f9eb0208961fa6e08b659 + weak +[file ".globalconfig"] + url = https://github.com/vezel-dev/.github/blob/master/syn/.globalconfig + sha = e8b6d2e00d7720592fe9740777eafcb219d9a613 + etag = d9c8f0bf4802deeedff637bbff0e0164bbbc6986bb5c1c8cd4301dde2692fce4 + weak +[file ".markdownlint.json"] + url = https://github.com/vezel-dev/.github/blob/master/syn/.markdownlint.json + sha = 7d581ae5eedad5892855cebc673edafad664856b + etag = cf98ac95cf318b52e206b9003e342de9db2ecb7be062eab6edf1681b1f374b3a + weak +[file ".stylecop.json"] + url = https://github.com/vezel-dev/.github/blob/master/syn/.stylecop.json + sha = 843f34128afef9feee7e200a09871d8cf46d4637 + etag = 7e9d4601916a771495bb6c8e6ac9c2143c0aee9a1498e01f09525872fce21a52 + weak +[file "LICENSE-0BSD"] + url = https://github.com/vezel-dev/.github/blob/master/syn/LICENSE-0BSD + sha = 7d581ae5eedad5892855cebc673edafad664856b + etag = 4fe195e9c11a20688615d92035ac752eeac4ab3f3d82b20df798ea6dc1b49aab + weak +[file "cake"] + url = https://github.com/vezel-dev/.github/blob/master/syn/cake + sha = 7d581ae5eedad5892855cebc673edafad664856b + etag = e01672adb9650fad761fd21f0e2349afaf9294d5f00825a429ae3060a2f3576f + weak +[file "cake.config"] + url = https://github.com/vezel-dev/.github/blob/master/syn/cake.config + sha = 7d581ae5eedad5892855cebc673edafad664856b + etag = 71fbce2c699768f363332125e11b7e6335672c19932a369f7e146faf579371e9 + weak +[file "tasks.vs.json"] + url = https://github.com/vezel-dev/.github/blob/master/syn/tasks.vs.json + sha = d3266cef4044ccbe6e51133fcac3a77a5b42dde1 + etag = e37280c2dccfe881742b68239db201d39758cff1f1c7472f358b7a1164a5771d + weak +[file "tsconfig.json"] + url = https://github.com/vezel-dev/.github/blob/master/syn/tsconfig.json + sha = 7d581ae5eedad5892855cebc673edafad664856b + etag = 1592ee04962b18721bddf6a191b0b9b4737c390477fc9651e4b3cdf4bcc99bc3 + weak diff --git a/.stylecop.json b/.stylecop.json new file mode 100644 index 0000000..03cb3f5 --- /dev/null +++ b/.stylecop.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json", + "settings": { + "indentation": { + "indentationSize": 4, + "tabSize": 4, + "useTabs": false + }, + "readabilityRules": { + "allowBuiltInTypeAliases": false + }, + "orderingRules": { + "elementOrder": [ + "kind", + "constant", + "static", + "readonly" + ], + "usingDirectivesPlacement": "outsideNamespace", + "systemUsingDirectivesFirst": true, + "blankLinesBetweenUsingGroups": "omit" + }, + "namingRules": { + "tupleElementNameCasing": "PascalCase", + "includeInferredTupleElementNames": false + }, + "maintainabilityRules": { + "topLevelTypes": [ + "class", + "enum", + "delegate", + "interface", + "struct" + ] + }, + "layoutRules": { + "allowDoWhileOnClosingBrace": false, + "allowConsecutiveUsings": true, + "newlineAtEndOfFile": "require" + }, + "documentationRules": { + "companyName": "Vezel", + "copyrightText": "Copyright © {companyName} Contributors. Licensed under the Zero-Clause BSD License.", + "headerDecoration": "---------------------------------------------------------------------------", + "xmlHeader": false, + "fileNamingConvention": "metadata", + "documentationCulture": "en-US", + "documentExposedElements": true, + "documentInternalElements": false, + "documentPrivateElements": false, + "documentPrivateFields": false, + "documentInterfaces": false, + "excludeFromPunctuationCheck": [ + "seealso" + ] + } + } +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..3ef07c3 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,19 @@ +{ + "recommendations": [ + "cake-build.cake-vscode", + "chdsbd.github-code-owners", + "codezombiech.gitignore", + "davidanson.vscode-markdownlint", + "dbaeumer.vscode-eslint", + "editorconfig.editorconfig", + "github.vscode-github-actions", + "github.vscode-pull-request-github", + "jock.svg", + "ms-dotnettools.csdevkit", + "ms-dotnettools.csharp", + "redhat.vscode-xml", + "redhat.vscode-yaml", + "tintoy.msbuild-project-tools", + "yy0931.gitconfig-lsp" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..c910170 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,31 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": ".NET: Attach", + "presentation": { + "group": "ton" + }, + "type": "coreclr", + "request": "attach", + "suppressJITOptimizations": true, + "justMyCode": false, + "symbolOptions": { + "searchMicrosoftSymbolServer": true, + "searchNuGetOrgSymbolServer": true + }, + "processId": "${command:pickProcess}" + }, + { + "name": "VS Code: Launch Extension", + "presentation": { + "group": "ton" + }, + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}/out/bin/src/vscode" + ] + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2860d5d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "files.exclude": { + "out": true, + "**/*.received.*": true, + "**/*.verified.*": true, + "**/.idea": true, + "**/.vs": true, + "**/node_modules": true + } +} diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..4e6a0d4 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,9 @@ +{ + "$schema": "https://json.schemastore.org/vsconfig.json", + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.CoreEditor", + "Microsoft.VisualStudio.Workload.ManagedDesktop", + "Microsoft.VisualStudio.Workload.Node" + ] +} diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..41c72b7 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,38 @@ + + + TON + $(Product) is a human-friendly language for programmatic authoring and safe interchange of tree-structured data. + Vezel + $(Company) Contributors + Copyright © $(Authors) + + + + true + latest-all + true + true + true + true + false + false + latest + enable + false + 0BSD + https://docs.vezel.dev/ton + true + false + https://github.com/vezel-dev/ton.git + net8.0 + true + + + + true + $(MSBuildThisFileDirectory)out + $([MSBuild]::MakeRelative('$(MSBuildThisFileDirectory)', '$(MSBuildProjectDirectory)')) + pub + pkg/dotnet + + diff --git a/Directory.Build.rsp b/Directory.Build.rsp new file mode 100644 index 0000000..becb644 --- /dev/null +++ b/Directory.Build.rsp @@ -0,0 +1,3 @@ +-err +-nr:false +-tl diff --git a/Directory.Build.targets b/Directory.Build.targets new file mode 100644 index 0000000..9ff839b --- /dev/null +++ b/Directory.Build.targets @@ -0,0 +1,71 @@ + + + $(RootNamespace) + + + + trx + $(ArtifactsPath)/trx/$(ArtifactsProjectName)/$(ArtifactsPivots) + + + + + + + + + + + + + + + + + + + + + $(MSBuildThisFileDirectory)ton.ico + true + ton.png + PACKAGE.md + + + + + + + + + + + + https://github.com/vezel-dev/ton/releases/tag/v$(Version) + + + + + + + <_CachedFiles Include="$(NuGetPackageRoot)/$(PackageId.ToLowerInvariant())/**" /> + + + + + diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..bdd0b17 --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,53 @@ + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LICENSE-0BSD b/LICENSE-0BSD new file mode 100644 index 0000000..e850493 --- /dev/null +++ b/LICENSE-0BSD @@ -0,0 +1,12 @@ +BSD Zero Clause License (0BSD) + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. diff --git a/PACKAGE.md b/PACKAGE.md new file mode 100644 index 0000000..24c0f47 --- /dev/null +++ b/PACKAGE.md @@ -0,0 +1,39 @@ +# TON + +**TON** (Tree Object Notation) is a modern data language featuring two dialects: +One for programmatic generation of data, and a static subset for safe data +interchange. + +**TON** is designed to be a pleasant and compact replacement for both +[XML](https://www.w3.org/TR/xml) and [JSON](https://www.json.org), combining the +best qualities of each, while allowing advanced users to programmatically +generate large data sets using the full language dialect. At its simplest, +**TON** can be used as a static data format just like XML or JSON, while at its +full potential, it can be used to maintain large and complex textual databases +at a level of maintainability that such data formats simply cannot achieve. + +The original motivation for the creation of **TON** was the maintenance of the +sorts of large data sheets that video games often use to describe things like +areas, items, quests, characters, skills, etc. The code dialect should be +well-suited to any similar use case. On the other hand, the data dialect can +is well-suited as a safe and more compact replacement for XML and JSON, e.g. in +networked APIs. + +**TON** is an open standard. This project provides both the specification and +the reference implementation in C#. + +This project offers the following packages: + +* [ton](https://www.nuget.org/packages/ton): Provides the .NET global tool. +* [Vezel.Ton](https://www.nuget.org/packages/Vezel.Ton): Provides the core + parsing, analysis, and runtime services. +* [Vezel.Ton.Tooling](https://www.nuget.org/packages/Vezel.Ton.Tooling): + Provides user-facing tooling such as syntax coloring and diagnostic + rendering. +* [Vezel.Ton.Service](https://www.nuget.org/packages/Vezel.Ton.Service): + Provides the Language Server Protocol implementation. +* [Vezel.Ton.Runtime](https://www.nuget.org/packages/Vezel.Ton.Runtime): + Provides the interpreter and just-in-time compiler. + +For more information, please visit the +[project home page](https://docs.vezel.dev/ton). diff --git a/README.md b/README.md new file mode 100644 index 0000000..eacc6fe --- /dev/null +++ b/README.md @@ -0,0 +1,98 @@ +# TON + +
+ TON +
+ +

+ + A human-friendly language for programmatic authoring and safe + interchange of tree-structured data. + +

+ +
+ +[![License](https://img.shields.io/github/license/vezel-dev/ton?color=brown)](LICENSE-0BSD) +[![Commits](https://img.shields.io/github/commit-activity/m/vezel-dev/ton/master?label=commits&color=slateblue)](https://github.com/vezel-dev/ton/commits/master) +[![Build](https://img.shields.io/github/actions/workflow/status/vezel-dev/ton/build.yml?branch=master)](https://github.com/vezel-dev/ton/actions/workflows/build.yml) +[![Discussions](https://img.shields.io/github/discussions/vezel-dev/ton?color=teal)](https://github.com/vezel-dev/ton/discussions) +[![Discord](https://img.shields.io/discord/960716713136095232?color=peru&label=discord)](https://discord.gg/uD8maMVVFX) + +
+ +-------------------------------------------------------------------------------- + +**TON** (Tree Object Notation) is a modern data language featuring two dialects: +One for programmatic generation of data, and a static subset for safe data +interchange. + +**TON** is designed to be a pleasant and compact replacement for both +[XML](https://www.w3.org/TR/xml) and [JSON](https://www.json.org), combining the +best qualities of each, while allowing advanced users to programmatically +generate large data sets using the full language dialect. At its simplest, +**TON** can be used as a static data format just like XML or JSON, while at its +full potential, it can be used to maintain large and complex textual databases +at a level of maintainability that such data formats simply cannot achieve. + +The original motivation for the creation of **TON** was the maintenance of the +sorts of large data sheets that video games often use to describe things like +areas, items, quests, characters, skills, etc. The code dialect should be +well-suited to any similar use case. On the other hand, the data dialect can +is well-suited as a safe and more compact replacement for XML and JSON, e.g. in +networked APIs. + +**TON** is an open standard. This project provides both the specification and +the reference implementation in C#. + +## Usage + +This project offers the following packages: + +| Package | Description | Downloads | +| -: | - | :- | +| [![ton][driver-img]][ton-pkg] | Provides the .NET global tool. | ![Downloads][ton-dls] | +| [![Vezel.Ton][core-img]][core-pkg] | Provides the core parsing, analysis, and runtime services. | ![Downloads][core-dls] | +| [![Vezel.Ton.Tooling][tooling-img]][tooling-pkg] | Provides user-facing tooling such as syntax coloring and diagnostic rendering. | ![Downloads][tooling-dls] | +| [![Vezel.Ton.Service][service-img]][service-pkg] | Provides the Language Server Protocol implementation. | ![Downloads][service-dls] | + +[driver-pkg]: https://www.nuget.org/packages/ton +[core-pkg]: https://www.nuget.org/packages/Vezel.Ton +[tooling-pkg]: https://www.nuget.org/packages/Vezel.Ton.Tooling +[service-pkg]: https://www.nuget.org/packages/Vezel.Ton.Service + +[driver-img]: https://img.shields.io/nuget/v/ton?label=ton +[core-img]: https://img.shields.io/nuget/v/Vezel.Ton?label=Vezel.Ton +[tooling-img]: https://img.shields.io/nuget/v/Vezel.Ton.Tooling?label=Vezel.Ton.Tooling +[service-img]: https://img.shields.io/nuget/v/Vezel.Ton.Service?label=Vezel.Ton.Service + +[driver-dls]: https://img.shields.io/nuget/dt/ton?label= +[core-dls]: https://img.shields.io/nuget/dt/Vezel.Ton?label= +[tooling-dls]: https://img.shields.io/nuget/dt/Vezel.Ton.Tooling?label= +[service-dls]: https://img.shields.io/nuget/dt/Vezel.Ton.Service?label= + +To install a tool package in a project, run `dotnet tool install `. To +install it globally, also pass `-g`. + +To install a library package, run `dotnet add package `. + +For more information, please visit the +[project home page](https://docs.vezel.dev/ton). + +## Building + +You will need the .NET SDK and Node.js installed. Simply run `./cake` +(a [Bash](https://www.gnu.org/software/bash) script) to build artifacts and run +tests. You can also run `./cake pack` to avoid running tests, or `./cake test` +to just build and run tests. + +These commands will use the `Debug` configuration by default, which is suitable +for development and debugging. Pass `-c Release` instead to get an optimized +build. + +## License + +This project is licensed under the terms found in +[`LICENSE-0BSD`](LICENSE-0BSD). diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 0000000..33074bd --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,28 @@ +# Release + +Every major/minor release should come with its own `release/vX.Y` branch. To +create this branch, run `dotnet nbgv prepare-release` from the `master` branch. +Pass `--versionIncrement major` if the version being developed after this +release is going to involve a major version bump. + +Patch-level releases should be done out of the relevant major/minor branch. For +example, both `1.0.1` and `1.0.5` should come out of `release/v1.0`. So, there +is no need to run `dotnet nbgv prepare-release` in this case. + +Before tagging a release, run `./cake` in the release branch locally on all +platforms that you have access to, and do some manual system testing. Verify +that nothing has regressed. Also, ensure that the release branch builds and +tests successfully on [CI](https://github.com/vezel-dev/ton/actions). + +Next, run `dotnet nbgv tag` from the release branch to create a release tag, +followed by `git tag -f -m -s` to sign it, and then push it +with `git push origin `. Again, wait for CI to build and test the tag. If +something goes wrong on CI, you can run `git tag -d ` and +`git push origin :` to delete the tag until you resolve the issue(s), and +then repeat this step. + +Finally, to actually publish the release, go to the +[releases page](https://github.com/vezel-dev/ton/releases) to create a release +from the tag you pushed, ideally with some well-written release notes. Once the +release is published, a workflow will build and publish NuGet packages from the +tag. diff --git a/build.cake b/build.cake new file mode 100644 index 0000000..c8681be --- /dev/null +++ b/build.cake @@ -0,0 +1,328 @@ +#addin nuget:?package=Cake.DoInDirectory&version=6.0.0 +#addin nuget:?package=Cake.GitVersioning&version=3.6.133 +#addin nuget:?package=Cake.Npm&version=2.0.0 +#addin nuget:?package=Cake.Npx&version=1.7.0 + +#nullable enable + +// Arguments + +var target = Argument("t", "default"); +var configuration = Argument("c", "Debug"); +var filter = Argument("f", default(string)); + +// Environment + +var githubToken = EnvironmentVariable("GITHUB_TOKEN"); +var nugetToken = EnvironmentVariable("NUGET_TOKEN"); +var vsceToken = EnvironmentVariable("VSCE_TOKEN"); +var ovsxToken = EnvironmentVariable("OVSX_TOKEN"); + +// Paths + +var root = Context.Environment.WorkingDirectory; +var tonProj = root.CombineWithFilePath("ton.proj"); +var doc = root.Combine("doc"); +var src = root.Combine("src"); +var srcVscode = src.Combine("vscode"); +var driverCsproj = src.Combine("driver").CombineWithFilePath("driver.csproj"); +var testsCsproj = src.Combine("tests").CombineWithFilePath("tests.csproj"); +var trimmingCsproj = src.Combine("trimming").CombineWithFilePath("trimming.csproj"); +var @out = root.Combine("out"); +var outLogDotnet = @out.Combine("log").Combine("dotnet"); +var outPkg = @out.Combine("pkg"); +var outPkgDotnet = outPkg.Combine("dotnet"); +var outPkgVscode = outPkg.Combine("vscode"); + +// Globs + +var githubGlob = new GlobPattern(outPkgDotnet.Combine("debug").CombineWithFilePath("*.nupkg").FullPath); +var nugetGlob = new GlobPattern(outPkgDotnet.Combine("release").CombineWithFilePath("*.nupkg").FullPath); +var vscodeGlob = new GlobPattern(outPkgVscode.CombineWithFilePath("*.vsix").FullPath); + +// Utilities + +DotNetMSBuildSettings ConfigureMSBuild(string target) +{ + var prefix = $"{target}_{Environment.UserName}_{Environment.MachineName}_"; + var time = DateTime.Now; + + string name; + + do + { + name = $"{prefix}{time:yyyy-MM-dd_HH_mm_ss}.binlog"; + time = time.AddSeconds(1); + } + while (System.IO.File.Exists(name)); + + return new() + { + // TODO: https://github.com/dotnet/msbuild/issues/6756 + NoLogo = true, + BinaryLogger = new() + { + Enabled = true, + FileName = outLogDotnet.CombineWithFilePath(name).FullPath, + }, + ConsoleLoggerSettings = new() + { + NoSummary = true, + }, + ArgumentCustomization = args => args.Append("-ds:false"), + }; +} + +void NpmInstall(DirectoryPath directory) +{ + DoInDirectory(directory, NpmInstall); +} + +void RunCommand( + string name, + string[] tools, + Func appender, + Func checker) +{ + var code = StartProcess( + Context.Tools.Resolve(tools) ?? throw new CakeException($"{name}: Could not locate executable."), + new() + { + Arguments = appender(new()), + RedirectStandardOutput = true, + RedirectStandardError = true, + RedirectedStandardOutputHandler = text => + { + Console.Out.WriteLine(text); + + return text; + }, + RedirectedStandardErrorHandler = text => + { + Console.Error.WriteLine(text); + + return text; + }, + }, + out var stdOut, + out var stdErr); + + if (code != 0 && checker(string.Join(null, stdOut), string.Join(null, stdErr))) + throw new CakeException(code, $"{name}: Process returned an error (exit code {code})."); +} + +void RunDotNet(Func appender, Func checker) +{ + RunCommand(".NET CLI", new[] { "dotnet", "dotnet.exe" }, appender, checker); +} + +void RunVSCode(Func appender) +{ + RunCommand("VS Code", new[] { "code.cmd", "code" }, appender, (_, _) => true); +} + +void UploadVSCode(string command, string token) +{ + var args = new ProcessArgumentBuilder() + .Append("--pre-release") + .Append("--skip-duplicate") + .AppendSwitchQuotedSecret("-p", token); + + foreach (var file in GetFiles(vscodeGlob)) + _ = args.AppendSwitchQuoted("-i", file.FullPath); + + DoInDirectory(srcVscode, () => Npx($"{command} publish", args)); +} + +// Tasks + +Task("default") + .IsDependentOn("test") + .IsDependentOn("build") + .IsDependentOn("pack"); + +Task("default-editor") + .IsDependentOn("build") + .IsDependentOn("pack"); + +Task("restore-core") + .Does(() => + DotNetRestore( + tonProj.FullPath, + new() + { + MSBuildSettings = ConfigureMSBuild("restore"), + })); + +Task("restore-vscode") + .Does(() => NpmInstall(srcVscode)); + +Task("restore-doc") + .Does(() => NpmInstall(doc)); + +Task("restore") + .IsDependentOn("restore-core") + .IsDependentOn("restore-vscode") + .IsDependentOn("restore-doc"); + +Task("build-core") + .IsDependentOn("restore-core") + .Does(() => + DotNetBuild( + tonProj.FullPath, + new() + { + MSBuildSettings = ConfigureMSBuild("build"), + Configuration = configuration, + NoRestore = true, + })); + +Task("build-trimming") + .IsDependentOn("build-core") + .Does(() => + DotNetPublish( + trimmingCsproj.FullPath, + new() + { + MSBuildSettings = ConfigureMSBuild("publish"), + Configuration = configuration, + NoBuild = true, + })); + +Task("build-vscode") + .IsDependentOn("restore-vscode") + .Does(() => DoInDirectory(srcVscode, () => NpmRunScript("build"))); + +Task("build-doc") + .IsDependentOn("restore-doc") + .Does(() => DoInDirectory(doc, () => NpmRunScript("build"))); + +Task("build") + .IsDependentOn("build-trimming") + .IsDependentOn("build-vscode") + .IsDependentOn("build-doc"); + +Task("pack-core") + .IsDependentOn("build-core") + .Does(() => + DotNetPack( + tonProj.FullPath, + new() + { + MSBuildSettings = ConfigureMSBuild("pack"), + Configuration = configuration, + NoBuild = true, + })); + +Task("pack-vscode") + .IsDependentOn("build-vscode") + .Does(() => DoInDirectory(srcVscode, () => NpmRunScript("pack"))); + +Task("pack") + .IsDependentOn("pack-core") + .IsDependentOn("pack-vscode"); + +Task("test-core") + .IsDependentOn("build-core") + .Does(() => + DotNetTest( + testsCsproj.FullPath, + new() + { + MSBuildSettings = ConfigureMSBuild("test"), + Configuration = configuration, + NoBuild = true, + })); + +Task("test") + .IsDependentOn("test-core"); + +Task("install-core") + .IsDependentOn("pack-core") + .Does(() => + RunDotNet( + args => + args + .Append("tool") + .Append("update") + .Append("ton") + .Append("--prerelease") + .Append("-g"), + (_, _) => true)); + +Task("install-vscode") + .IsDependentOn("pack-vscode") + .Does(() => + { + var version = GitVersioningGetVersion(root.FullPath); + + RunVSCode( + args => args.AppendSwitchQuoted( + "--install-extension", + outPkgVscode.CombineWithFilePath($"ton-{version.NpmPackageVersion}.vsix").FullPath)); + }); + +Task("install") + .IsDependentOn("install-core") + .IsDependentOn("install-vscode"); + +Task("uninstall-core") + .Does(() => + RunDotNet( + args => + args + .Append("tool") + .Append("uninstall") + .Append("ton") + .Append("-g"), + (_, stdErr) => !stdErr.StartsWith("A tool with the package Id 'ton' could not be found."))); + +Task("uninstall-vscode") + .Does(() => RunVSCode(args => args.AppendSwitchQuoted("--uninstall-extension", "vezel.ton"))); + +Task("uninstall") + .IsDependentOn("uninstall-core") + .IsDependentOn("uninstall-vscode"); + +Task("upload-core-github") + .WithCriteria(BuildSystem.GitHubActions.Environment.Workflow.Ref == "refs/heads/master") + .WithCriteria(configuration == "Debug") + .IsDependentOn("pack-core") + .Does(() => + DotNetTool( + null, + "gpr push", + new ProcessArgumentBuilder() + .AppendQuoted(githubGlob) + .AppendSwitchQuotedSecret("-k", githubToken))); + +Task("upload-core-nuget") + .WithCriteria(BuildSystem.GitHubActions.Environment.Workflow.Ref.StartsWith("refs/tags/v")) + .WithCriteria(configuration == "Release") + .IsDependentOn("pack-core") + .Does(() => + { + foreach (var pkg in GetFiles(nugetGlob)) + DotNetNuGetPush( + pkg, + new() + { + Source = "https://api.nuget.org/v3/index.json", + ApiKey = nugetToken, + SkipDuplicate = true, + }); + }); + +Task("upload-vscode-vsce") + .WithCriteria(BuildSystem.GitHubActions.Environment.Workflow.Ref.StartsWith("refs/tags/v")) + .WithCriteria(configuration == "Release") + .IsDependentOn("pack-vscode") + .Does(() => UploadVSCode("vsce", vsceToken)); + +Task("upload-vscode-ovsx") + .WithCriteria(BuildSystem.GitHubActions.Environment.Workflow.Ref.StartsWith("refs/tags/v")) + .WithCriteria(configuration == "Release") + .IsDependentOn("pack-vscode") + .Does(() => UploadVSCode("ovsx", ovsxToken)); + +RunTarget(target); diff --git a/cake b/cake new file mode 100755 index 0000000..0c7a7fc --- /dev/null +++ b/cake @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -eou pipefail + +cd -- "$(dirname -- "$(readlink -e -- "${BASH_SOURCE[0]}")")" + +dotnet tool restore +dotnet cake build.cake -t "${1:-default}" "${@:2}" diff --git a/cake.config b/cake.config new file mode 100644 index 0000000..db9a181 --- /dev/null +++ b/cake.config @@ -0,0 +1,8 @@ +[Paths] +Addins=out/bld/addins +Cache=out/bld/cache +Tools=out/bld/tools + +[Settings] +SkipVerification=true +EnableScriptCache=true diff --git a/doc/.markdownlint-cli2.jsonc b/doc/.markdownlint-cli2.jsonc new file mode 100644 index 0000000..caf9f0a --- /dev/null +++ b/doc/.markdownlint-cli2.jsonc @@ -0,0 +1,8 @@ +{ + "globs": [ + "**/*.md" + ], + "ignores": [ + "node_modules" + ] +} diff --git a/doc/.markdownlint.json b/doc/.markdownlint.json new file mode 100644 index 0000000..50f3fd6 --- /dev/null +++ b/doc/.markdownlint.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json", + "extends": "../.markdownlint.json", + "MD033": { + "allowed_elements": [] + } +} diff --git a/doc/.npmrc b/doc/.npmrc new file mode 100644 index 0000000..d20c2fe --- /dev/null +++ b/doc/.npmrc @@ -0,0 +1,6 @@ +audit = false +engine-strict = true +fund = false +logs-dir = ../out/log/node/doc +logs-max = 9007199254740991 +save-exact = true diff --git a/doc/index.md b/doc/index.md new file mode 100644 index 0000000..3c46f48 --- /dev/null +++ b/doc/index.md @@ -0,0 +1,23 @@ +# Home + +**TON** (Tree Object Notation) is a modern data language featuring two dialects: +One for programmatic generation of data, and a static subset for safe data +interchange. + +**TON** is designed to be a pleasant and compact replacement for both +[XML](https://www.w3.org/TR/xml) and [JSON](https://www.json.org), combining the +best qualities of each, while allowing advanced users to programmatically +generate large data sets using the full language dialect. At its simplest, +**TON** can be used as a static data format just like XML or JSON, while at its +full potential, it can be used to maintain large and complex textual databases +at a level of maintainability that such data formats simply cannot achieve. + +The original motivation for the creation of **TON** was the maintenance of the +sorts of large data sheets that video games often use to describe things like +areas, items, quests, characters, skills, etc. The code dialect should be +well-suited to any similar use case. On the other hand, the data dialect can +is well-suited as a safe and more compact replacement for XML and JSON, e.g. in +networked APIs. + +**TON** is an open standard. This project provides both the specification and +the reference implementation in C#. diff --git a/doc/installation.md b/doc/installation.md new file mode 100644 index 0000000..bca2d71 --- /dev/null +++ b/doc/installation.md @@ -0,0 +1,15 @@ +# Installation + +TON can be installed as a +[.NET tool](https://learn.microsoft.com/en-us/dotnet/core/tools/global-tools) in +two ways: + +* To install TON globally, run `dotnet tool install ton -g`. This will allow you + to run the `ton` CLI driver anywhere, assuming you have + [set up your `PATH` appropriately](https://learn.microsoft.com/en-us/dotnet/core/tools/global-tools#install-a-global-tool). +* To install TON locally in a .NET-based project with a + [tool manifest](https://learn.microsoft.com/en-us/dotnet/core/tools/local-tools-how-to-use#create-a-manifest-file), + omit the `-g` option. This will require you to run `dotnet ton` from the + project directory. + + diff --git a/doc/package-lock.json b/doc/package-lock.json new file mode 100644 index 0000000..59c9237 --- /dev/null +++ b/doc/package-lock.json @@ -0,0 +1,457 @@ +{ + "name": "doc", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "markdownlint-cli2": "0.12.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", + "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", + "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^1.0.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/markdown-it": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.0.0.tgz", + "integrity": "sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.0.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdownlint": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.33.0.tgz", + "integrity": "sha512-4lbtT14A3m0LPX1WS/3d1m7Blg+ZwiLq36WvjQqFGsX3Gik99NV+VXp/PW3n+Q62xyPdbvGOCfjPqjW+/SKMig==", + "dev": true, + "dependencies": { + "markdown-it": "14.0.0", + "markdownlint-micromark": "0.1.8" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli2": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.12.1.tgz", + "integrity": "sha512-RcK+l5FjJEyrU3REhrThiEUXNK89dLYNJCYbvOUKypxqIGfkcgpz8g08EKqhrmUbYfYoLC5nEYQy53NhJSEtfQ==", + "dev": true, + "dependencies": { + "globby": "14.0.0", + "jsonc-parser": "3.2.0", + "markdownlint": "0.33.0", + "markdownlint-cli2-formatter-default": "0.0.4", + "micromatch": "4.0.5", + "yaml": "2.3.4" + }, + "bin": { + "markdownlint-cli2": "markdownlint-cli2.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli2-formatter-default": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.4.tgz", + "integrity": "sha512-xm2rM0E+sWgjpPn1EesPXx5hIyrN2ddUnUwnbCsD/ONxYtw3PX6LydvdH6dciWAoFDpwzbHM1TO7uHfcMd6IYg==", + "dev": true, + "peerDependencies": { + "markdownlint-cli2": ">=0.0.4" + } + }, + "node_modules/markdownlint-micromark": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.8.tgz", + "integrity": "sha512-1ouYkMRo9/6gou9gObuMDnvZM8jC/ly3QCFQyoSPCS2XV1ZClU0xpKbL1Ar3bWWRT1RnBZkWUEiNKrI2CwiBQA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/uc.micro": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.0.0.tgz", + "integrity": "sha512-DffL94LsNOccVn4hyfRe5rdKa273swqeA5DJpMOeFmEn1wCDc7nAbbB0gXlgBCL7TNzeTv6G7XVWzan7iJtfig==", + "dev": true + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/doc/package.json b/doc/package.json new file mode 100644 index 0000000..60bfc30 --- /dev/null +++ b/doc/package.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://json.schemastore.org/package.json", + "private": true, + "engines": { + "node": ">=18.0.0" + }, + "devDependencies": { + "markdownlint-cli2": "0.12.1" + }, + "scripts": { + "build": "npx markdownlint-cli2" + } +} diff --git a/doc/toc.md b/doc/toc.md new file mode 100644 index 0000000..4b611ff --- /dev/null +++ b/doc/toc.md @@ -0,0 +1,13 @@ +# Table of Contents + +* [Home](index.md) +* [Installation](installation.md) + +## Language + + + +## Tooling + +* [CLI Driver](tooling/cli-driver.md) +* [Editor Extensions](tooling/editor-extensions.md) diff --git a/doc/tooling/cli-driver.md b/doc/tooling/cli-driver.md new file mode 100644 index 0000000..e478b0f --- /dev/null +++ b/doc/tooling/cli-driver.md @@ -0,0 +1,113 @@ +# CLI Driver + +```text +ton [arguments...] [options...] +``` + +The ton command line tool is the driver for the reference implementation of TON. +It supports evaluation, validation, formatting, and conversion of TON code and +data files, and provides a language service for use in text editors. + +| Option | Description | Default | +| - | - | - | +| `--color ` | Specifies when to use colored output (`auto`, `always`, `never`). | `auto` | + +## ton check + +```text +ton check +``` + +Checks that a TON file evaluates successfully. + +For a code file, this command runs the script to completion and discards any +resulting data. For a data file, this command just checks whether the file +parses successfully. + +## ton convert + +```text +ton convert +``` + +Converts between TON and other data formats. + +Valid mode values are: + +* `xml2ton`: Convert an input XML file to a TON data file. +* `ton2xml`: Convert an input TON code or data file to an XML file. + +Note that conversion is done on a best-effort basis; some niche language +constructs may not be translated. + +## ton format + +```text +ton format [options...] +``` + +Formats a TON code or data file according to the official formatting +conventions. + +| Option | Description | Default | +| - | - | - | +| `--fix` | Enables automatic in-place fixing. | `true` | +| `--diff` | Enables printing diffs for offending code. | `true` | + +## ton info + +```text +ton info +``` + +Prints runtime environment information. + +## ton minify + +```text +ton minify +``` + +Formats a TON code or data file to be as small as possible while still remaining +valid. + +This can be useful when transferring TON files over a network. + +## ton pretty + +```text +ton pretty [input] +``` + +Pretty-prints a TON code or data file according to the official formatting +conventions. + +The result is printed to standard output. If no file is given, this command +reads from standard input. + +## ton reduce + +```text +ton reduce +``` + +Converts a TON code file to a data file. + +This command runs the script to completion and outputs the resulting data using +the official formatting conventions. If this command is invoked with a data file +as input, it effectively functions as a roundabout `ton format`. + +## ton serve + +```text +ton serve [options...] +``` + +Runs the TON language service. + +The language service can be used by e.g. the +[Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=vezel.ton). + +| Option | Description | Default | +| - | - | - | +| `--stdio` | Enables standard I/O communication. | `true` | diff --git a/doc/tooling/editor-extensions.md b/doc/tooling/editor-extensions.md new file mode 100644 index 0000000..b629ee1 --- /dev/null +++ b/doc/tooling/editor-extensions.md @@ -0,0 +1 @@ +# Editor Extensions diff --git a/dotnet-tools.json b/dotnet-tools.json new file mode 100644 index 0000000..0e40dff --- /dev/null +++ b/dotnet-tools.json @@ -0,0 +1,90 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "cake.tool": { + "version": "4.0.0", + "commands": [ + "dotnet-cake" + ] + }, + "dotnet-config": { + "version": "1.0.6", + "commands": [ + "dotnet-config" + ] + }, + "dotnet-counters": { + "version": "8.0.452401", + "commands": [ + "dotnet-counters" + ] + }, + "dotnet-dump": { + "version": "8.0.452401", + "commands": [ + "dotnet-dump" + ] + }, + "dotnet-file": { + "version": "1.4.1", + "commands": [ + "dotnet-file" + ] + }, + "dotnet-gcdump": { + "version": "8.0.452401", + "commands": [ + "dotnet-gcdump" + ] + }, + "dotnet-sos": { + "version": "8.0.452401", + "commands": [ + "dotnet-sos" + ] + }, + "dotnet-stack": { + "version": "8.0.452401", + "commands": [ + "dotnet-stack" + ] + }, + "dotnet-symbol": { + "version": "1.0.415602", + "commands": [ + "dotnet-symbol" + ] + }, + "dotnet-trace": { + "version": "8.0.452401", + "commands": [ + "dotnet-trace" + ] + }, + "gpr": { + "version": "0.1.294", + "commands": [ + "gpr" + ] + }, + "nbgv": { + "version": "3.6.133", + "commands": [ + "nbgv" + ] + }, + "sourcelink": { + "version": "3.1.1", + "commands": [ + "sourcelink" + ] + }, + "verify.tool": { + "version": "0.6.0", + "commands": [ + "dotnet-verify" + ] + } + } +} diff --git a/global.json b/global.json new file mode 100644 index 0000000..fb149e0 --- /dev/null +++ b/global.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://json.schemastore.org/global.json", + "sdk": { + "version": "8.0.101", + "rollForward": "disable", + "allowPrelease": false + }, + "msbuild-sdks": { + "Microsoft.Build.Traversal": "4.1.0" + } +} diff --git a/nuget.config b/nuget.config new file mode 100644 index 0000000..91952e7 --- /dev/null +++ b/nuget.config @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/common/common.cs b/src/common/common.cs new file mode 100644 index 0000000..ae5cefb --- /dev/null +++ b/src/common/common.cs @@ -0,0 +1,2 @@ +[assembly: DisableRuntimeMarshalling] +[module: SkipLocalsInit] diff --git a/src/common/common.csproj b/src/common/common.csproj new file mode 100644 index 0000000..96c655e --- /dev/null +++ b/src/common/common.csproj @@ -0,0 +1,18 @@ + + + Vezel.Ton.Common + true + $(Description) + +This package provides common functionality used by all TON packages. + Vezel.Ton.Common + Vezel.Ton + + + + + + + + + diff --git a/src/core/PublicAPI.Shipped.txt b/src/core/PublicAPI.Shipped.txt new file mode 100644 index 0000000..7dc5c58 --- /dev/null +++ b/src/core/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/core/PublicAPI.Unshipped.txt b/src/core/PublicAPI.Unshipped.txt new file mode 100644 index 0000000..7dc5c58 --- /dev/null +++ b/src/core/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/core/Semantics/Tree/SemanticTree.xml b/src/core/Semantics/Tree/SemanticTree.xml new file mode 100644 index 0000000..73b5311 --- /dev/null +++ b/src/core/Semantics/Tree/SemanticTree.xml @@ -0,0 +1,3 @@ + diff --git a/src/core/Syntax/Tree/SyntaxTree.xml b/src/core/Syntax/Tree/SyntaxTree.xml new file mode 100644 index 0000000..08fb72e --- /dev/null +++ b/src/core/Syntax/Tree/SyntaxTree.xml @@ -0,0 +1,3 @@ + diff --git a/src/core/core.cs b/src/core/core.cs new file mode 100644 index 0000000..ae5cefb --- /dev/null +++ b/src/core/core.cs @@ -0,0 +1,2 @@ +[assembly: DisableRuntimeMarshalling] +[module: SkipLocalsInit] diff --git a/src/core/core.csproj b/src/core/core.csproj new file mode 100644 index 0000000..1349d73 --- /dev/null +++ b/src/core/core.csproj @@ -0,0 +1,31 @@ + + + Vezel.Ton + true + $(Description) + +This package provides core parsing, analysis, and runtime services. + Vezel.Ton + Vezel.Ton + + + + + + + + + + + + + + + + + + + + diff --git a/src/core/core.targets b/src/core/core.targets new file mode 100644 index 0000000..3efb190 --- /dev/null +++ b/src/core/core.targets @@ -0,0 +1,4 @@ + + + + diff --git a/src/driver/.globalconfig b/src/driver/.globalconfig new file mode 100644 index 0000000..6ac5b69 --- /dev/null +++ b/src/driver/.globalconfig @@ -0,0 +1,3 @@ +global_level = 1 + +dotnet_diagnostic.CA2007.severity = none diff --git a/src/driver/Program.cs b/src/driver/Program.cs new file mode 100644 index 0000000..228552b --- /dev/null +++ b/src/driver/Program.cs @@ -0,0 +1,30 @@ +namespace Vezel.Ton.Driver; + +internal static class Program +{ + public static Task Main(string[] args) + { + using var parser = new Parser(static settings => + { + settings.GetoptMode = true; + settings.PosixlyCorrect = true; + settings.CaseSensitive = false; + settings.CaseInsensitiveEnumValues = true; + settings.HelpWriter = Terminal.StandardError.TextWriter; + }); + + using var cts = new CancellationTokenSource(); + + Terminal.Signaled += ctx => + { + ctx.Cancel = true; + + cts.Cancel(); + }; + + _ = args; + _ = cts; + + return Task.FromResult(0); // TODO + } +} diff --git a/src/driver/driver.cs b/src/driver/driver.cs new file mode 100644 index 0000000..ae5cefb --- /dev/null +++ b/src/driver/driver.cs @@ -0,0 +1,2 @@ +[assembly: DisableRuntimeMarshalling] +[module: SkipLocalsInit] diff --git a/src/driver/driver.csproj b/src/driver/driver.csproj new file mode 100644 index 0000000..963f176 --- /dev/null +++ b/src/driver/driver.csproj @@ -0,0 +1,36 @@ + + + ton + true + true + true + Exe + true + $(Description) + +This package provides the .NET global tool. + ton + LatestMajor + Vezel.Ton.Driver + en + true + + + + + + + + + + + + + + + + + + + + diff --git a/src/generators/Semantics/SemanticTree.xsd b/src/generators/Semantics/SemanticTree.xsd new file mode 100644 index 0000000..e4c4de5 --- /dev/null +++ b/src/generators/Semantics/SemanticTree.xsd @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/generators/Semantics/SemanticTreeComputedProperty.cs b/src/generators/Semantics/SemanticTreeComputedProperty.cs new file mode 100644 index 0000000..060496e --- /dev/null +++ b/src/generators/Semantics/SemanticTreeComputedProperty.cs @@ -0,0 +1,26 @@ +namespace Vezel.Ton.Generators.Semantics; + +public sealed class SemanticTreeComputedProperty : SemanticTreeProperty +{ + [XmlAttribute] + public required string Type { get; init; } + + [XmlAttribute] + public required string Body { get; init; } + + internal override string GetTypeName() + { + return Type; + } + + internal override string GetPropertyName() + { + return Name; + } + + internal override string GetParameterName() + { + // TODO: https://github.com/Sergio0694/PolySharp/issues/60 + throw new NotSupportedException(); + } +} diff --git a/src/generators/Semantics/SemanticTreeGenerator.cs b/src/generators/Semantics/SemanticTreeGenerator.cs new file mode 100644 index 0000000..7d6cb29 --- /dev/null +++ b/src/generators/Semantics/SemanticTreeGenerator.cs @@ -0,0 +1,386 @@ +namespace Vezel.Ton.Generators.Semantics; + +[Generator] +public sealed class SemanticTreeGenerator : IIncrementalGenerator +{ + public void Initialize(IncrementalGeneratorInitializationContext context) + { + context.RegisterSourceOutput( + context.AdditionalTextsProvider + .Where(static at => Path.GetFileName(at.Path) == "SemanticTree.xml"), + static (ctx, file) => + { + var text = file.GetText(ctx.CancellationToken)!.ToString(); + var settings = new XmlReaderSettings + { + XmlResolver = new XmlUrlResolver(), + ValidationType = ValidationType.Schema, + ValidationFlags = + XmlSchemaValidationFlags.ProcessSchemaLocation | + XmlSchemaValidationFlags.ReportValidationWarnings, + }; + + SemanticTreeRoot root; + + using (var stringReader = new StringReader(file.GetText(ctx.CancellationToken)!.ToString())) + using (var xmlReader = XmlReader.Create(stringReader, settings)) + root = (SemanticTreeRoot)new XmlSerializer(typeof(SemanticTreeRoot)).Deserialize(xmlReader); + + var baseName = Path.GetFileName(file.Path); + + foreach (var type in root.Types ?? []) + GenerateType(ctx, Path.ChangeExtension(baseName, $"{type.Name}Semantics.g.cs"), type); + }); + } + + private static void GenerateType(SourceProductionContext context, string name, SemanticTreeType type) + { + var sb = new StringBuilder(); + using var writer = new IndentedTextWriter(new StringWriter(sb)); + + writer.WriteLine("#nullable enable"); + writer.WriteLine(); + writer.WriteLine("using Vezel.Ton.Semantics.Binding;"); + writer.WriteLine("using Vezel.Ton.Semantics.Tree;"); + writer.WriteLine("using Vezel.Ton.Syntax.Tree;"); + writer.WriteLine(); + writer.WriteLine("namespace Vezel.Ton.Semantics.Tree"); + writer.WriteLine("{"); + + writer.Indent++; + + var typeName = $"{type.Name}Semantics"; + + writer.Write($"public {(type.Abstract ? "abstract" : "sealed")} partial class "); + writer.WriteLine($"{typeName} : {(type.Base is { } b ? $"{b}Semantics" : "SemanticNode")}"); + writer.WriteLine("{"); + + writer.Indent++; + + var syntaxTypeName = $"{type.Name}Syntax"; + + writer.WriteLine($"public new {syntaxTypeName} Syntax => Unsafe.As<{syntaxTypeName}>(base.Syntax);"); + writer.WriteLine(); + + if (!type.Root) + { + if (type.Parent is { } p) + writer.WriteLine($"public new {p}Semantics Parent => Unsafe.As<{p}Semantics>(base.Parent!);"); + else + writer.WriteLine("public new SemanticNode Parent => base.Parent!;"); + + writer.WriteLine(); + } + + var props = type.Properties ?? []; + + foreach (var prop in props) + { + var propType = prop.GetTypeName(); + var propName = prop.GetPropertyName(); + + writer.Write("public "); + + if (prop is SemanticTreeComputedProperty comp) + writer.WriteLine($"{propType} {propName} => {comp.Body};"); + else + { + var mod = string.Empty; + + if (type.Abstract) + mod = "abstract "; + else if (prop.Override) + mod = "override "; + + writer.WriteLine($"{mod}{propType} {propName} {{ get; }}"); + } + + writer.WriteLine(); + } + + if (type.Abstract) + { + writer.WriteLine($"private protected {typeName}({syntaxTypeName} syntax)"); + + writer.Indent++; + + writer.WriteLine(": base(syntax)"); + + writer.Indent--; + + writer.WriteLine("{"); + writer.WriteLine("}"); + } + else + { + var nodes = props.Where(static p => p is SemanticTreeNodeProperty or SemanticTreeNodesProperty).ToArray(); + + writer.Write("public override bool HasChildren"); + + if (nodes.Length == 0) + writer.WriteLine(" => false;"); + else if (nodes.Any(static p => p is SemanticTreeNodeProperty { Optional: false })) + writer.WriteLine(" => true;"); + else + { + writer.WriteLine(); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine("get"); + writer.WriteLine("{"); + + writer.Indent++; + + for (var i = 0; i < nodes.Length; i++) + { + var prop = nodes[i]; + var propName = prop.GetPropertyName(); + + switch (prop) + { + case SemanticTreeNodeProperty: + writer.WriteLine($"if ({propName} != null)"); + break; + case SemanticTreeNodesProperty: + writer.WriteLine($"if ({propName}.Count != 0)"); + break; + } + + writer.Indent++; + + writer.WriteLine("return true;"); + + writer.Indent--; + + if (i != nodes.Length - 1) + writer.WriteLine(); + } + + writer.WriteLine(); + writer.WriteLine("return false;"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + } + + writer.WriteLine(); + + var fields = props.Where(static p => p is not SemanticTreeComputedProperty).ToArray(); + + if (fields.Length != 0) + { + writer.WriteLine($"internal {typeName}("); + + writer.Indent++; + + writer.WriteLine($"{syntaxTypeName} syntax,"); + + for (var i = 0; i < fields.Length; i++) + { + var prop = fields[i]; + + writer.WriteLine( + $"{prop.GetTypeName()} {prop.GetParameterName()}{(i == fields.Length - 1 ? ")" : ",")}"); + } + + writer.WriteLine(": base(syntax)"); + + writer.Indent--; + + writer.WriteLine("{"); + + writer.Indent++; + + foreach (var prop in fields) + { + var param = prop.GetParameterName(); + + writer.Write( + $"{prop.GetPropertyName()} = "); + writer.WriteLine(prop is SemanticTreeNodesProperty ? $"new({param}, this);" : $"{param};"); + } + + foreach (var prop in fields.OfType()) + { + writer.WriteLine(); + writer.WriteLine( + $"{prop.GetParameterName()}{(prop.Optional ? "?" : string.Empty)}.SetParent(this);"); + } + + writer.Indent--; + + writer.WriteLine("}"); + } + else + { + writer.WriteLine($"internal {typeName}({syntaxTypeName} syntax)"); + + writer.Indent++; + + writer.WriteLine(": base(syntax)"); + + writer.Indent--; + + writer.WriteLine("{"); + writer.WriteLine("}"); + } + + writer.WriteLine(); + + writer.WriteLine("public override IEnumerable Children()"); + writer.WriteLine("{"); + + writer.Indent++; + + if (nodes.Length != 0) + { + for (var i = 0; i < nodes.Length; i++) + { + var prop = nodes[i]; + var propName = prop.GetPropertyName(); + + switch (prop) + { + case SemanticTreeNodeProperty p: + if (p.Optional) + { + writer.WriteLine($"if ({propName} != null)"); + + writer.Indent++; + } + + writer.WriteLine($"yield return {propName};"); + + if (p.Optional) + writer.Indent--; + + break; + default: + writer.WriteLine($"foreach (var item in {propName})"); + + writer.Indent++; + + writer.WriteLine("yield return item;"); + + writer.Indent--; + break; + } + + if (i != nodes.Length - 1) + writer.WriteLine(); + } + } + else + writer.WriteLine("return Array.Empty();"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.WriteLine(); + + writer.WriteLine("internal override void Visit(SemanticVisitor visitor)"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine($"visitor.Visit{type.Name}(this);"); + + writer.Indent--; + + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("internal override T? Visit(SemanticVisitor visitor)"); + + writer.Indent++; + + writer.WriteLine("where T : default"); + + writer.Indent--; + + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine($"return visitor.Visit{type.Name}(this);"); + + writer.Indent--; + + writer.WriteLine("}"); + } + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + + if (!type.Abstract) + { + writer.WriteLine(); + writer.WriteLine("namespace Vezel.Ton.Semantics"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine("public abstract partial class SemanticVisitor"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine($"public virtual void Visit{type.Name}({type.Name}Semantics node)"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine("Check.Null(node);"); + writer.WriteLine(); + writer.WriteLine("DefaultVisit(node);"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("public abstract partial class SemanticVisitor"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine($"public virtual T? Visit{type.Name}({type.Name}Semantics node)"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine("Check.Null(node);"); + writer.WriteLine(); + writer.WriteLine("return DefaultVisit(node);"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + } + + context.AddSource(name, sb.ToString()); + } +} diff --git a/src/generators/Semantics/SemanticTreeNodeProperty.cs b/src/generators/Semantics/SemanticTreeNodeProperty.cs new file mode 100644 index 0000000..19edd46 --- /dev/null +++ b/src/generators/Semantics/SemanticTreeNodeProperty.cs @@ -0,0 +1,27 @@ +namespace Vezel.Ton.Generators.Semantics; + +public sealed class SemanticTreeNodeProperty : SemanticTreeProperty +{ + [XmlAttribute] + public required string Type { get; init; } + + [XmlAttribute] + public required bool Optional { get; init; } + + internal override string GetTypeName() + { + return $"{Type}Semantics{(Optional ? "?" : string.Empty)}"; + } + + internal override string GetPropertyName() + { + return Name; + } + + internal override string GetParameterName() + { + var param = $"{char.ToLowerInvariant(Name[0])}{Name[1..]}"; + + return SyntaxFacts.GetKeywordKind(param) != SyntaxKind.None ? $"@{param}" : param; + } +} diff --git a/src/generators/Semantics/SemanticTreeNodesProperty.cs b/src/generators/Semantics/SemanticTreeNodesProperty.cs new file mode 100644 index 0000000..c3c198d --- /dev/null +++ b/src/generators/Semantics/SemanticTreeNodesProperty.cs @@ -0,0 +1,29 @@ +namespace Vezel.Ton.Generators.Semantics; + +public sealed class SemanticTreeNodesProperty : SemanticTreeProperty +{ + [XmlAttribute] + public required string Type { get; init; } + + [XmlAttribute] + public required bool Separated { get; init; } + + internal override string GetTypeName() + { + var type = $"SemanticNodeList<{Type}Semantics, {Type}Syntax>"; + + return Separated ? $"Separated{type}" : type; + } + + internal override string GetPropertyName() + { + return $"{Name}s"; + } + + internal override string GetParameterName() + { + var param = $"{char.ToLowerInvariant(Name[0])}{Name[1..]}s"; + + return SyntaxFacts.GetKeywordKind(param) != SyntaxKind.None ? $"@{param}" : param; + } +} diff --git a/src/generators/Semantics/SemanticTreeProperty.cs b/src/generators/Semantics/SemanticTreeProperty.cs new file mode 100644 index 0000000..d39fdb4 --- /dev/null +++ b/src/generators/Semantics/SemanticTreeProperty.cs @@ -0,0 +1,16 @@ +namespace Vezel.Ton.Generators.Semantics; + +public abstract class SemanticTreeProperty +{ + [XmlAttribute] + public string Name { get; set; } = null!; + + [XmlAttribute] + public bool Override { get; set; } + + internal abstract string GetTypeName(); + + internal abstract string GetPropertyName(); + + internal abstract string GetParameterName(); +} diff --git a/src/generators/Semantics/SemanticTreeRoot.cs b/src/generators/Semantics/SemanticTreeRoot.cs new file mode 100644 index 0000000..a62d992 --- /dev/null +++ b/src/generators/Semantics/SemanticTreeRoot.cs @@ -0,0 +1,9 @@ +namespace Vezel.Ton.Generators.Semantics; + +[XmlRoot("Tree", Namespace = "https://vezel.dev/ton/SemanticTree")] +public sealed class SemanticTreeRoot +{ + [SuppressMessage("", "CA1819")] + [XmlElement("Type")] + public SemanticTreeType[] Types { get; set; } = null!; +} diff --git a/src/generators/Semantics/SemanticTreeType.cs b/src/generators/Semantics/SemanticTreeType.cs new file mode 100644 index 0000000..1fae4ad --- /dev/null +++ b/src/generators/Semantics/SemanticTreeType.cs @@ -0,0 +1,26 @@ +namespace Vezel.Ton.Generators.Semantics; + +public sealed class SemanticTreeType +{ + [XmlAttribute] + public required string Name { get; init; } + + [XmlAttribute] + public required string? Base { get; init; } + + [XmlAttribute] + public required string? Parent { get; init; } + + [XmlAttribute] + public required bool Abstract { get; init; } + + [XmlAttribute] + public required bool Root { get; init; } + + [SuppressMessage("", "CA1819")] + [XmlElement("Value", Type = typeof(SemanticTreeValueProperty))] + [XmlElement("Node", Type = typeof(SemanticTreeNodeProperty))] + [XmlElement("Nodes", Type = typeof(SemanticTreeNodesProperty))] + [XmlElement("Computed", Type = typeof(SemanticTreeComputedProperty))] + public required SemanticTreeProperty[] Properties { get; init; } +} diff --git a/src/generators/Semantics/SemanticTreeValueProperty.cs b/src/generators/Semantics/SemanticTreeValueProperty.cs new file mode 100644 index 0000000..c1fd95d --- /dev/null +++ b/src/generators/Semantics/SemanticTreeValueProperty.cs @@ -0,0 +1,24 @@ +namespace Vezel.Ton.Generators.Semantics; + +public sealed class SemanticTreeValueProperty : SemanticTreeProperty +{ + [XmlAttribute] + public required string Type { get; init; } + + internal override string GetTypeName() + { + return Type; + } + + internal override string GetPropertyName() + { + return Name; + } + + internal override string GetParameterName() + { + var param = $"{char.ToLowerInvariant(Name[0])}{Name[1..]}"; + + return SyntaxFacts.GetKeywordKind(param) != SyntaxKind.None ? $"@{param}" : param; + } +} diff --git a/src/generators/Syntax/SyntaxTree.xsd b/src/generators/Syntax/SyntaxTree.xsd new file mode 100644 index 0000000..3b7de2f --- /dev/null +++ b/src/generators/Syntax/SyntaxTree.xsd @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/generators/Syntax/SyntaxTreeGenerator.cs b/src/generators/Syntax/SyntaxTreeGenerator.cs new file mode 100644 index 0000000..b94543a --- /dev/null +++ b/src/generators/Syntax/SyntaxTreeGenerator.cs @@ -0,0 +1,545 @@ +namespace Vezel.Ton.Generators.Syntax; + +[Generator] +public sealed class SyntaxTreeGenerator : IIncrementalGenerator +{ + public void Initialize(IncrementalGeneratorInitializationContext context) + { + context.RegisterSourceOutput( + context.AdditionalTextsProvider + .Where(static at => Path.GetFileName(at.Path) == "SyntaxTree.xml"), + static (ctx, file) => + { + var text = file.GetText(ctx.CancellationToken)!.ToString(); + var settings = new XmlReaderSettings + { + XmlResolver = new XmlUrlResolver(), + ValidationType = ValidationType.Schema, + ValidationFlags = + XmlSchemaValidationFlags.ProcessSchemaLocation | + XmlSchemaValidationFlags.ReportValidationWarnings, + }; + + SyntaxTreeRoot root; + + using (var stringReader = new StringReader(file.GetText(ctx.CancellationToken)!.ToString())) + using (var xmlReader = XmlReader.Create(stringReader, settings)) + root = (SyntaxTreeRoot)new XmlSerializer(typeof(SyntaxTreeRoot)).Deserialize(xmlReader); + + var baseName = Path.GetFileName(file.Path); + + foreach (var type in root.Types ?? []) + GenerateType(ctx, Path.ChangeExtension(baseName, $"{type.Name}Syntax.g.cs"), type); + }); + } + + private static void GenerateType(SourceProductionContext context, string name, SyntaxTreeType type) + { + var sb = new StringBuilder(); + using var writer = new IndentedTextWriter(new StringWriter(sb)); + + writer.WriteLine("#nullable enable"); + writer.WriteLine(); + writer.WriteLine("using Vezel.Ton.Syntax.Tree;"); + writer.WriteLine(); + writer.WriteLine("namespace Vezel.Ton.Syntax.Tree"); + writer.WriteLine("{"); + + writer.Indent++; + + var typeName = $"{type.Name}Syntax"; + + writer.Write($"public {(type.Abstract ? "abstract" : "sealed")} partial class "); + writer.WriteLine($"{typeName} : {(type.Base is { } b ? $"{b}Syntax" : "SyntaxNode")}"); + writer.WriteLine("{"); + + writer.Indent++; + + if (!type.Root) + { + if (type.Parent is { } p) + writer.WriteLine($"public new {p}Syntax Parent => Unsafe.As<{p}Syntax>(base.Parent!);"); + else + writer.WriteLine("public new SyntaxNode Parent => base.Parent!;"); + + writer.WriteLine(); + } + + var props = type.Properties ?? []; + + foreach (var prop in props) + { + var mod = string.Empty; + + if (type.Abstract) + mod = " abstract"; + else if (prop.Override) + mod = " override"; + + writer.WriteLine($"public{mod} {prop.GetTypeName()} {prop.GetPropertyName()} {{ get; }}"); + writer.WriteLine(); + } + + if (type.Abstract) + { + writer.WriteLine($"private protected {typeName}()"); + writer.WriteLine("{"); + writer.WriteLine("}"); + } + else + { + var nodes = props.Where(static p => p.CanContainNodes).ToArray(); + + writer.Write("public override bool HasNodes"); + + if (nodes.Length == 0) + writer.WriteLine(" => false;"); + else if (nodes.Any(static p => p is SyntaxTreeNodeProperty { Optional: false })) + writer.WriteLine(" => true;"); + else + { + writer.WriteLine(); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine("get"); + writer.WriteLine("{"); + + writer.Indent++; + + for (var i = 0; i < nodes.Length; i++) + { + var prop = nodes[i]; + var propName = prop.GetPropertyName(); + + switch (prop) + { + case SyntaxTreeNodeProperty: + writer.WriteLine($"if ({propName} != null)"); + break; + case SyntaxTreeNodesProperty { Separated: true } p: + writer.WriteLine($"if ({propName}.Elements.Length != 0)"); + break; + case SyntaxTreeNodesProperty p: + writer.WriteLine($"if ({propName}.Count != 0)"); + break; + } + + writer.Indent++; + + writer.WriteLine("return true;"); + + writer.Indent--; + + if (i != nodes.Length - 1) + writer.WriteLine(); + } + + writer.WriteLine(); + writer.WriteLine("return false;"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + } + + writer.WriteLine(); + + var tokens = props.Where(p => p.CanContainTokens).ToArray(); + + writer.Write("public override bool HasTokens"); + + if (tokens.Length == 0) + writer.WriteLine(" => false;"); + else if (tokens.Any(static p => p is SyntaxTreeTokenProperty { Optional: false })) + writer.WriteLine(" => true;"); + else + { + writer.WriteLine(); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine("get"); + writer.WriteLine("{"); + + writer.Indent++; + + for (var i = 0; i < tokens.Length; i++) + { + var prop = tokens[i]; + var propName = prop.GetPropertyName(); + + switch (prop) + { + case SyntaxTreeNodesProperty: + writer.WriteLine($"if ({propName}.Separators.Length != 0)"); + break; + case SyntaxTreeTokenProperty: + writer.WriteLine($"if ({propName} != null)"); + break; + case SyntaxTreeTokensProperty: + writer.WriteLine($"if ({propName}.Count != 0)"); + break; + } + + writer.Indent++; + + writer.WriteLine("return true;"); + + writer.Indent--; + + if (i != tokens.Length - 1) + writer.WriteLine(); + } + + writer.WriteLine(); + writer.WriteLine("return false;"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + } + + writer.WriteLine(); + + if (props.Length != 0) + { + writer.WriteLine($"internal {typeName}("); + + writer.Indent++; + + for (var i = 0; i < props.Length; i++) + { + var prop = props[i]; + + writer.WriteLine( + $"{prop.GetTypeName()} {prop.GetParameterName()}{(i == props.Length - 1 ? ")" : ",")}"); + } + + writer.Indent--; + + writer.WriteLine("{"); + + writer.Indent++; + + foreach (var prop in props) + { + var param = prop.GetParameterName(); + + writer.Write($"{prop.GetPropertyName()} = "); + writer.WriteLine( + prop is SyntaxTreeNodesProperty or SyntaxTreeTokensProperty + ? $"new({param}, this);" + : $"{param};"); + } + + foreach (var prop in props) + { + writer.WriteLine(); + + var param = prop.GetParameterName(); + + switch (prop) + { + case SyntaxTreeNodeProperty { Optional: true } or SyntaxTreeTokenProperty { Optional: true }: + writer.WriteLine($"{param}?.SetParent(this);"); + break; + case SyntaxTreeNodeProperty or SyntaxTreeTokenProperty: + writer.WriteLine($"{param}.SetParent(this);"); + break; + } + } + + writer.WriteLine(); + writer.WriteLine("Initialize();"); + + writer.Indent--; + + writer.WriteLine("}"); + } + else + { + writer.WriteLine($"internal {typeName}()"); + writer.WriteLine("{"); + writer.WriteLine("}"); + } + + writer.WriteLine(); + + writer.WriteLine("public override IEnumerable Children()"); + writer.WriteLine("{"); + + writer.Indent++; + + if (props.Length != 0) + { + for (var i = 0; i < props.Length; i++) + { + var prop = props[i]; + var propName = prop.GetPropertyName(); + + switch (prop) + { + case SyntaxTreeNodeProperty { Optional: true } or SyntaxTreeTokenProperty { Optional: true }: + writer.WriteLine($"if ({propName} != null)"); + + writer.Indent++; + + writer.WriteLine($"yield return {propName};"); + + writer.Indent--; + break; + case SyntaxTreeNodeProperty or SyntaxTreeTokenProperty: + writer.WriteLine($"yield return {propName};"); + break; + case SyntaxTreeNodesProperty or SyntaxTreeTokensProperty: + writer.WriteLine($"foreach (var item in {propName})"); + + writer.Indent++; + + writer.WriteLine("yield return item;"); + + writer.Indent--; + break; + } + + if (i != props.Length - 1) + writer.WriteLine(); + } + } + else + writer.WriteLine("return Array.Empty();"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.WriteLine(); + + writer.WriteLine("public override IEnumerable ChildNodes()"); + writer.WriteLine("{"); + + writer.Indent++; + + if (nodes.Length != 0) + { + for (var i = 0; i < nodes.Length; i++) + { + var prop = nodes[i]; + var propName = prop.GetPropertyName(); + + switch (prop) + { + case SyntaxTreeNodeProperty p: + if (p.Optional) + { + writer.WriteLine($"if ({propName} != null)"); + + writer.Indent++; + } + + writer.WriteLine($"yield return {propName};"); + + if (p.Optional) + writer.Indent--; + + break; + case SyntaxTreeNodesProperty p: + writer.WriteLine( + $"foreach (var item in {propName}{(p.Separated ? ".Elements" : string.Empty)})"); + + writer.Indent++; + + writer.WriteLine("yield return item;"); + + writer.Indent--; + break; + } + + if (i != nodes.Length - 1) + writer.WriteLine(); + } + } + else + writer.WriteLine("return Array.Empty();"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.WriteLine(); + + writer.WriteLine("public override IEnumerable ChildTokens()"); + writer.WriteLine("{"); + + writer.Indent++; + + if (tokens.Length != 0) + { + for (var i = 0; i < tokens.Length; i++) + { + var prop = tokens[i]; + var propName = prop.GetPropertyName(); + + switch (prop) + { + case SyntaxTreeNodesProperty: + writer.WriteLine($"foreach (var item in {propName}.Separators)"); + + writer.Indent++; + + writer.WriteLine("yield return item;"); + + writer.Indent--; + break; + case SyntaxTreeTokenProperty p: + if (p.Optional) + { + writer.WriteLine($"if ({propName} != null)"); + + writer.Indent++; + } + + writer.WriteLine($"yield return {propName};"); + + if (p.Optional) + writer.Indent--; + + break; + case SyntaxTreeTokensProperty p: + writer.WriteLine($"foreach (var item in {propName})"); + + writer.Indent++; + + if (p.Separated) + writer.WriteLine("yield return Unsafe.As(item);"); + else + writer.WriteLine("yield return item;"); + + writer.Indent--; + break; + } + + if (i != tokens.Length - 1) + writer.WriteLine(); + } + } + else + writer.WriteLine("return Array.Empty();"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.WriteLine(); + + writer.WriteLine("internal override void Visit(SyntaxVisitor visitor)"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine($"visitor.Visit{type.Name}(this);"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.WriteLine(); + + writer.WriteLine("internal override T? Visit(SyntaxVisitor visitor)"); + + writer.Indent++; + + writer.WriteLine("where T : default"); + + writer.Indent--; + + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine($"return visitor.Visit{type.Name}(this);"); + + writer.Indent--; + + writer.WriteLine("}"); + } + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + + if (!type.Abstract) + { + writer.WriteLine(); + writer.WriteLine("namespace Vezel.Ton.Syntax"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine("public abstract partial class SyntaxVisitor"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine($"public virtual void Visit{type.Name}({type.Name}Syntax node)"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine("Check.Null(node);"); + writer.WriteLine(); + writer.WriteLine("DefaultVisit(node);"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("public abstract partial class SyntaxVisitor"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine($"public virtual T? Visit{type.Name}({type.Name}Syntax node)"); + writer.WriteLine("{"); + + writer.Indent++; + + writer.WriteLine("Check.Null(node);"); + writer.WriteLine(); + writer.WriteLine("return DefaultVisit(node);"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + + writer.Indent--; + + writer.WriteLine("}"); + } + + context.AddSource(name, sb.ToString()); + } +} diff --git a/src/generators/Syntax/SyntaxTreeNodeProperty.cs b/src/generators/Syntax/SyntaxTreeNodeProperty.cs new file mode 100644 index 0000000..98bffe9 --- /dev/null +++ b/src/generators/Syntax/SyntaxTreeNodeProperty.cs @@ -0,0 +1,31 @@ +namespace Vezel.Ton.Generators.Syntax; + +public sealed class SyntaxTreeNodeProperty : SyntaxTreeProperty +{ + [XmlAttribute] + public required string Type { get; init; } + + [XmlAttribute] + public required bool Optional { get; init; } + + public override bool CanContainNodes => true; + + public override bool CanContainTokens => false; + + internal override string GetTypeName() + { + return $"{Type}Syntax{(Optional ? "?" : string.Empty)}"; + } + + internal override string GetPropertyName() + { + return Name; + } + + internal override string GetParameterName() + { + var param = $"{char.ToLowerInvariant(Name[0])}{Name[1..]}"; + + return SyntaxFacts.GetKeywordKind(param) != SyntaxKind.None ? $"@{param}" : param; + } +} diff --git a/src/generators/Syntax/SyntaxTreeNodesProperty.cs b/src/generators/Syntax/SyntaxTreeNodesProperty.cs new file mode 100644 index 0000000..b0cc9ab --- /dev/null +++ b/src/generators/Syntax/SyntaxTreeNodesProperty.cs @@ -0,0 +1,33 @@ +namespace Vezel.Ton.Generators.Syntax; + +public sealed class SyntaxTreeNodesProperty : SyntaxTreeProperty +{ + [XmlAttribute] + public required string Type { get; init; } + + [XmlAttribute] + public required bool Separated { get; init; } + + public override bool CanContainNodes => true; + + public override bool CanContainTokens => Separated; + + internal override string GetTypeName() + { + var type = $"SyntaxItemList<{Type}Syntax>"; + + return Separated ? $"Separated{type}" : type; + } + + internal override string GetPropertyName() + { + return $"{Name}s"; + } + + internal override string GetParameterName() + { + var param = $"{char.ToLowerInvariant(Name[0])}{Name[1..]}s"; + + return SyntaxFacts.GetKeywordKind(param) != SyntaxKind.None ? $"@{param}" : param; + } +} diff --git a/src/generators/Syntax/SyntaxTreeProperty.cs b/src/generators/Syntax/SyntaxTreeProperty.cs new file mode 100644 index 0000000..acbe994 --- /dev/null +++ b/src/generators/Syntax/SyntaxTreeProperty.cs @@ -0,0 +1,20 @@ +namespace Vezel.Ton.Generators.Syntax; + +public abstract class SyntaxTreeProperty +{ + [XmlAttribute] + public string Name { get; set; } = null!; + + [XmlAttribute] + public bool Override { get; set; } + + public abstract bool CanContainNodes { get; } + + public abstract bool CanContainTokens { get; } + + internal abstract string GetTypeName(); + + internal abstract string GetPropertyName(); + + internal abstract string GetParameterName(); +} diff --git a/src/generators/Syntax/SyntaxTreeRoot.cs b/src/generators/Syntax/SyntaxTreeRoot.cs new file mode 100644 index 0000000..5e8f575 --- /dev/null +++ b/src/generators/Syntax/SyntaxTreeRoot.cs @@ -0,0 +1,9 @@ +namespace Vezel.Ton.Generators.Syntax; + +[XmlRoot("Tree", Namespace = "https://vezel.dev/ton/SyntaxTree")] +public sealed class SyntaxTreeRoot +{ + [SuppressMessage("", "CA1819")] + [XmlElement("Type")] + public SyntaxTreeType[] Types { get; set; } = null!; +} diff --git a/src/generators/Syntax/SyntaxTreeTokenProperty.cs b/src/generators/Syntax/SyntaxTreeTokenProperty.cs new file mode 100644 index 0000000..952828c --- /dev/null +++ b/src/generators/Syntax/SyntaxTreeTokenProperty.cs @@ -0,0 +1,26 @@ +namespace Vezel.Ton.Generators.Syntax; + +public sealed class SyntaxTreeTokenProperty : SyntaxTreeProperty +{ + [XmlAttribute] + public required bool Optional { get; init; } + + public override bool CanContainNodes => false; + + public override bool CanContainTokens => true; + + internal override string GetTypeName() + { + return $"SyntaxToken{(Optional ? "?" : string.Empty)}"; + } + + internal override string GetPropertyName() + { + return $"{Name}Token"; + } + + internal override string GetParameterName() + { + return $"{char.ToLowerInvariant(Name[0])}{Name[1..]}Token"; + } +} diff --git a/src/generators/Syntax/SyntaxTreeTokensProperty.cs b/src/generators/Syntax/SyntaxTreeTokensProperty.cs new file mode 100644 index 0000000..0efd33e --- /dev/null +++ b/src/generators/Syntax/SyntaxTreeTokensProperty.cs @@ -0,0 +1,26 @@ +namespace Vezel.Ton.Generators.Syntax; + +public sealed class SyntaxTreeTokensProperty : SyntaxTreeProperty +{ + [XmlAttribute] + public required bool Separated { get; init; } + + public override bool CanContainNodes => false; + + public override bool CanContainTokens => true; + + internal override string GetTypeName() + { + return Separated ? "SeparatedSyntaxItemList" : "SyntaxItemList"; + } + + internal override string GetPropertyName() + { + return $"{Name}Tokens"; + } + + internal override string GetParameterName() + { + return $"{char.ToLowerInvariant(Name[0])}{Name[1..]}Tokens"; + } +} diff --git a/src/generators/Syntax/SyntaxTreeType.cs b/src/generators/Syntax/SyntaxTreeType.cs new file mode 100644 index 0000000..4004491 --- /dev/null +++ b/src/generators/Syntax/SyntaxTreeType.cs @@ -0,0 +1,26 @@ +namespace Vezel.Ton.Generators.Syntax; + +public sealed class SyntaxTreeType +{ + [XmlAttribute] + public required string Name { get; init; } + + [XmlAttribute] + public required string? Base { get; init; } + + [XmlAttribute] + public required string? Parent { get; init; } + + [XmlAttribute] + public required bool Abstract { get; init; } + + [XmlAttribute] + public required bool Root { get; init; } + + [SuppressMessage("", "CA1819")] + [XmlElement("Token", Type = typeof(SyntaxTreeTokenProperty))] + [XmlElement("Tokens", Type = typeof(SyntaxTreeTokensProperty))] + [XmlElement("Node", Type = typeof(SyntaxTreeNodeProperty))] + [XmlElement("Nodes", Type = typeof(SyntaxTreeNodesProperty))] + public required SyntaxTreeProperty[] Properties { get; init; } +} diff --git a/src/generators/generators.cs b/src/generators/generators.cs new file mode 100644 index 0000000..ae5cefb --- /dev/null +++ b/src/generators/generators.cs @@ -0,0 +1,2 @@ +[assembly: DisableRuntimeMarshalling] +[module: SkipLocalsInit] diff --git a/src/generators/generators.csproj b/src/generators/generators.csproj new file mode 100644 index 0000000..6776dc0 --- /dev/null +++ b/src/generators/generators.csproj @@ -0,0 +1,17 @@ + + + Vezel.Ton.Generators + true + Vezel.Ton.Generators + netstandard2.0 + + + + + + + + + + + diff --git a/src/service/PublicAPI.Shipped.txt b/src/service/PublicAPI.Shipped.txt new file mode 100644 index 0000000..7dc5c58 --- /dev/null +++ b/src/service/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/service/PublicAPI.Unshipped.txt b/src/service/PublicAPI.Unshipped.txt new file mode 100644 index 0000000..7dc5c58 --- /dev/null +++ b/src/service/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/service/service.cs b/src/service/service.cs new file mode 100644 index 0000000..ae5cefb --- /dev/null +++ b/src/service/service.cs @@ -0,0 +1,2 @@ +[assembly: DisableRuntimeMarshalling] +[module: SkipLocalsInit] diff --git a/src/service/service.csproj b/src/service/service.csproj new file mode 100644 index 0000000..5b73667 --- /dev/null +++ b/src/service/service.csproj @@ -0,0 +1,22 @@ + + + Vezel.Ton.Service + true + $(Description) + +This package provides the Language Server Protocol implementation. + Vezel.Ton.Service + Vezel.Ton.Service + + + + + + + + + + + + + diff --git a/src/service/service.targets b/src/service/service.targets new file mode 100644 index 0000000..3efb190 --- /dev/null +++ b/src/service/service.targets @@ -0,0 +1,4 @@ + + + + diff --git a/src/tests/.globalconfig b/src/tests/.globalconfig new file mode 100644 index 0000000..6ac5b69 --- /dev/null +++ b/src/tests/.globalconfig @@ -0,0 +1,3 @@ +global_level = 1 + +dotnet_diagnostic.CA2007.severity = none diff --git a/src/tests/Module.cs b/src/tests/Module.cs new file mode 100644 index 0000000..f2e9e9d --- /dev/null +++ b/src/tests/Module.cs @@ -0,0 +1,16 @@ +namespace Vezel.Ton.Tests; + +internal static class Module +{ + [ModuleInitializer] + internal static void Initialize() + { + VerifierSettings.InitializePlugins(); + VerifierSettings.IncludeObsoletes(); + VerifierSettings.IgnoreStackTrace(); + VerifierSettings.DontScrubGuids(); + VerifierSettings.DontScrubDateTimes(); + + DiffRunner.Disabled = true; + } +} diff --git a/src/tests/tests.cs b/src/tests/tests.cs new file mode 100644 index 0000000..ae5cefb --- /dev/null +++ b/src/tests/tests.cs @@ -0,0 +1,2 @@ +[assembly: DisableRuntimeMarshalling] +[module: SkipLocalsInit] diff --git a/src/tests/tests.csproj b/src/tests/tests.csproj new file mode 100644 index 0000000..f1d60e0 --- /dev/null +++ b/src/tests/tests.csproj @@ -0,0 +1,32 @@ + + + Vezel.Ton.Tests + Vezel.Ton.Tests + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tooling/PublicAPI.Shipped.txt b/src/tooling/PublicAPI.Shipped.txt new file mode 100644 index 0000000..7dc5c58 --- /dev/null +++ b/src/tooling/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/tooling/PublicAPI.Unshipped.txt b/src/tooling/PublicAPI.Unshipped.txt new file mode 100644 index 0000000..7dc5c58 --- /dev/null +++ b/src/tooling/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/tooling/tooling.cs b/src/tooling/tooling.cs new file mode 100644 index 0000000..ae5cefb --- /dev/null +++ b/src/tooling/tooling.cs @@ -0,0 +1,2 @@ +[assembly: DisableRuntimeMarshalling] +[module: SkipLocalsInit] diff --git a/src/tooling/tooling.csproj b/src/tooling/tooling.csproj new file mode 100644 index 0000000..7d2660f --- /dev/null +++ b/src/tooling/tooling.csproj @@ -0,0 +1,18 @@ + + + Vezel.Ton.Tooling + true + $(Description) + +This package provides user-facing tooling such as syntax coloring and diagnostic +rendering. + Vezel.Ton.Tooling + Vezel.Ton + + + + + + + + diff --git a/src/tooling/tooling.targets b/src/tooling/tooling.targets new file mode 100644 index 0000000..3efb190 --- /dev/null +++ b/src/tooling/tooling.targets @@ -0,0 +1,4 @@ + + + + diff --git a/src/trimming/Program.cs b/src/trimming/Program.cs new file mode 100644 index 0000000..31e21fd --- /dev/null +++ b/src/trimming/Program.cs @@ -0,0 +1,3 @@ +Console.WriteLine("What are you doing? 👀"); + +return 1; diff --git a/src/trimming/trimming.csproj b/src/trimming/trimming.csproj new file mode 100644 index 0000000..f87fba7 --- /dev/null +++ b/src/trimming/trimming.csproj @@ -0,0 +1,30 @@ + + + + + trimming + true + Exe + true + Vezel.Ton.Trimming + true + true + + + + + + + + + + + + + + + + diff --git a/src/vscode/.eslintrc.json b/src/vscode/.eslintrc.json new file mode 100644 index 0000000..632c352 --- /dev/null +++ b/src/vscode/.eslintrc.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://json.schemastore.org/eslintrc.json", + "extends": "../../.eslintrc.json", + // TODO: https://github.com/eslint/eslint/discussions/17092 + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2021 + } +} diff --git a/src/vscode/.npmrc b/src/vscode/.npmrc new file mode 100644 index 0000000..fff2988 --- /dev/null +++ b/src/vscode/.npmrc @@ -0,0 +1,6 @@ +audit = false +engine-strict = true +fund = false +logs-dir = ../../out/log/node/vscode +logs-max = 9007199254740991 +save-exact = true diff --git a/src/vscode/README.md b/src/vscode/README.md new file mode 100644 index 0000000..f81f43b --- /dev/null +++ b/src/vscode/README.md @@ -0,0 +1,13 @@ +# TON for Visual Studio Code + +This extension adds support for [TON](https://docs.vezel.dev/ton) to +[Visual Studio Code](https://code.visualstudio.com). Features include syntax and +semantic highlighting, code snippets, code navigation, code completion, document +formatting, and more. + +This extension can provide basic language features on its own, but the majority +of functionality requires the TON language server. To use the language server, +you must have the `ton` executable available in your `PATH`, or configure the +location manually with the `ton.executablePath` setting. See TON's +[installation instructions](https://docs.vezel.dev/TON/installation) for more +information. diff --git a/src/vscode/language-configuration.json b/src/vscode/language-configuration.json new file mode 100644 index 0000000..0b2200f --- /dev/null +++ b/src/vscode/language-configuration.json @@ -0,0 +1,72 @@ +{ + "comments": { + "lineComment": "//" + }, + "brackets": [ + [ + "(", + ")" + ], + [ + "[", + "]" + ], + [ + "{", + "}" + ] + ], + "colorizedBracketPairs": [ + [ + "(", + ")" + ], + [ + "[", + "]" + ], + [ + "{", + "}" + ] + ], + "autoClosingPairs": [ + { + "open": "[", + "close": "]" + }, + { + "open": "(", + "close": ")" + }, + { + "open": "{", + "close": "}" + }, + { + "open": "\"", + "close": "\"", + "notIn": [ + "string" + ] + } + ], + "surroundingPairs": [ + { + "open": "[", + "close": "]" + }, + { + "open": "(", + "close": ")" + }, + { + "open": "{", + "close": "}" + }, + { + "open": "\"", + "close": "\"" + } + ] +} diff --git a/src/vscode/package-lock.json b/src/vscode/package-lock.json new file mode 100644 index 0000000..ca47d52 --- /dev/null +++ b/src/vscode/package-lock.json @@ -0,0 +1,4144 @@ +{ + "name": "ton", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ton", + "license": "0BSD", + "dependencies": { + "vscode-languageclient": "9.0.1" + }, + "devDependencies": { + "@stylistic/eslint-plugin": "1.5.4", + "@types/node": "18.15.0", + "@types/vscode": "1.83.0", + "@typescript-eslint/eslint-plugin": "6.20.0", + "@typescript-eslint/parser": "6.20.0", + "@vscode/vsce": "2.23.0", + "cpy-cli": "5.0.0", + "esbuild": "0.20.0", + "eslint": "8.56.0", + "js-yaml": "4.1.0", + "mkdirp": "3.0.1", + "nerdbank-gitversioning": "3.6.133", + "ovsx": "0.8.3", + "rimraf": "5.0.5", + "symlink-dir": "5.2.1", + "typescript": "5.3.3" + }, + "engines": { + "node": ">=18.0.0", + "vscode": "^1.83.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", + "integrity": "sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz", + "integrity": "sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz", + "integrity": "sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz", + "integrity": "sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz", + "integrity": "sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz", + "integrity": "sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz", + "integrity": "sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz", + "integrity": "sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz", + "integrity": "sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz", + "integrity": "sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz", + "integrity": "sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz", + "integrity": "sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz", + "integrity": "sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz", + "integrity": "sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz", + "integrity": "sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz", + "integrity": "sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz", + "integrity": "sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz", + "integrity": "sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz", + "integrity": "sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz", + "integrity": "sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz", + "integrity": "sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@stylistic/eslint-plugin": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-1.5.4.tgz", + "integrity": "sha512-zWPXr+O67GC9KDAFkbL1U9UVqE6Iv69YMKhkIECCmE0GvClUJwdfsimm4XebEDondV7kfjMrTDZaYfrI5aS0Jg==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "1.5.4", + "@stylistic/eslint-plugin-jsx": "1.5.4", + "@stylistic/eslint-plugin-plus": "1.5.4", + "@stylistic/eslint-plugin-ts": "1.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-js": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-1.5.4.tgz", + "integrity": "sha512-3ctWb3NvJNV1MsrZN91cYp2EGInLPSoZKphXIbIRx/zjZxKwLDr9z4LMOWtqjq14li/OgqUUcMq5pj8fgbLoTw==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "escape-string-regexp": "^4.0.0", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-js/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@stylistic/eslint-plugin-jsx": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-1.5.4.tgz", + "integrity": "sha512-JUfrpCkeBCqt1IZ4QsP4WgxGza4PhK4LPbc0VnCjHKygl+rgqoDAovqOuzFJ49wJ4Ix3r6OIHFuwiBGswZEVvg==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "^1.5.4", + "estraverse": "^5.3.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-plus": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-1.5.4.tgz", + "integrity": "sha512-dI0Cs5vYX/0uMhQDY+NK0cKQ0Pe9B6jWYxd0Ndud+mNloDaVLrsmJocK4zn+YfhGEDs1E4Nk5uAPZEumIpDuSg==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^6.19.0" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@stylistic/eslint-plugin-ts": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-1.5.4.tgz", + "integrity": "sha512-NZDFVIlVNjuPvhT+0Cidm5IS3emtx338xbJTqs2xfOVRDGTpYwRHhNVEGa1rFOpYHmv0sAj6+OXbMDn7ul0K/g==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "1.5.4", + "@typescript-eslint/utils": "^6.19.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.15.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.0.tgz", + "integrity": "sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.83.0.tgz", + "integrity": "sha512-3mUtHqLAVz9hegut9au4xehuBrzRE3UJiQMpoEHkNl6XHliihO7eATx2BMHs0odsmmrwjJrlixx/Pte6M3ygDQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz", + "integrity": "sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/type-utils": "6.20.0", + "@typescript-eslint/utils": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", + "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", + "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz", + "integrity": "sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/utils": "6.20.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", + "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", + "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.20.0.tgz", + "integrity": "sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", + "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.20.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vscode/vsce": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.23.0.tgz", + "integrity": "sha512-Wf9yN8feZf4XmUW/erXyKQvCL577u72AQv4AI4Cwt5o5NyE49C5mpfw3pN78BJYYG3qnSIxwRo7JPvEurkQuNA==", + "dev": true, + "dependencies": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.2.1", + "find-yarn-workspace-root": "^2.0.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^7.5.2", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 14" + }, + "optionalDependencies": { + "keytar": "^7.7.0" + } + }, + "node_modules/@zkochan/rimraf": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@zkochan/rimraf/-/rimraf-2.1.3.tgz", + "integrity": "sha512-mCfR3gylCzPC+iqdxEA6z5SxJeOgzgbwmyxanKriIne5qZLswDe/M43aD3p5MNzwzXRhbZg/OX+MpES6Zk1a6A==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.10" + } + }, + "node_modules/@zkochan/rimraf/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", + "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/azure-devops-node-api": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", + "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "dev": true, + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dev": true, + "dependencies": { + "is-windows": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cp-file": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-10.0.0.tgz", + "integrity": "sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.10", + "nested-error-stacks": "^2.1.1", + "p-event": "^5.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cpy": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-10.1.0.tgz", + "integrity": "sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==", + "dev": true, + "dependencies": { + "arrify": "^3.0.0", + "cp-file": "^10.0.0", + "globby": "^13.1.4", + "junk": "^4.0.1", + "micromatch": "^4.0.5", + "nested-error-stacks": "^2.1.1", + "p-filter": "^3.0.0", + "p-map": "^6.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cpy-cli": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-5.0.0.tgz", + "integrity": "sha512-fb+DZYbL9KHc0BC4NYqGRrDIJZPXUmjjtqdw4XRRg8iV8dIfghUX/WiL+q4/B/KFTy3sK6jsbUhBaz0/Hxg7IQ==", + "dev": true, + "dependencies": { + "cpy": "^10.1.0", + "meow": "^12.0.1" + }, + "bin": { + "cpy": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cpy/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cpy/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", + "integrity": "sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.0", + "@esbuild/android-arm": "0.20.0", + "@esbuild/android-arm64": "0.20.0", + "@esbuild/android-x64": "0.20.0", + "@esbuild/darwin-arm64": "0.20.0", + "@esbuild/darwin-x64": "0.20.0", + "@esbuild/freebsd-arm64": "0.20.0", + "@esbuild/freebsd-x64": "0.20.0", + "@esbuild/linux-arm": "0.20.0", + "@esbuild/linux-arm64": "0.20.0", + "@esbuild/linux-ia32": "0.20.0", + "@esbuild/linux-loong64": "0.20.0", + "@esbuild/linux-mips64el": "0.20.0", + "@esbuild/linux-ppc64": "0.20.0", + "@esbuild/linux-riscv64": "0.20.0", + "@esbuild/linux-s390x": "0.20.0", + "@esbuild/linux-x64": "0.20.0", + "@esbuild/netbsd-x64": "0.20.0", + "@esbuild/openbsd-x64": "0.20.0", + "@esbuild/sunos-x64": "0.20.0", + "@esbuild/win32-arm64": "0.20.0", + "@esbuild/win32-ia32": "0.20.0", + "@esbuild/win32-x64": "0.20.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.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.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", + "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "optional": true + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "optional": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/junk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", + "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "optional": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/nerdbank-gitversioning": { + "version": "3.6.133", + "resolved": "https://registry.npmjs.org/nerdbank-gitversioning/-/nerdbank-gitversioning-3.6.133.tgz", + "integrity": "sha512-4BBDMaq1SY9vLgO7+cRRA6mcNZ73bgTW+1uBPT1iyWrZJHeSj/q+0eV2xcCXBxyyTMOmI3ERNcVrWD9jo70XbA==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2" + }, + "bin": { + "nbgv": "main.js", + "nbgv-setversion": "npmVersion.js" + } + }, + "node_modules/nested-error-stacks": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", + "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abi": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.37.0.tgz", + "integrity": "sha512-Wplt4KQCwXfzbzhoDf4n7nOkc7jrY6pKj/m9gb4uLxSGx0ApDxVu2UCbfoiKRj3cSgvxlvnN8jhTgH/p529Ydg==", + "dev": true, + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true, + "optional": true + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ovsx": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/ovsx/-/ovsx-0.8.3.tgz", + "integrity": "sha512-LG7wTzy4eYV/KolFeO4AwWPzQSARvCONzd5oHQlNvYOlji2r/zjbdK8pyObZN84uZlk6rQBWrJrAdJfh/SX0Hg==", + "dev": true, + "dependencies": { + "@vscode/vsce": "^2.19.0", + "commander": "^6.1.0", + "follow-redirects": "^1.14.6", + "is-ci": "^2.0.0", + "leven": "^3.1.0", + "semver": "^7.5.2", + "tmp": "^0.2.1" + }, + "bin": { + "ovsx": "lib/ovsx" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/p-event": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", + "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", + "dev": true, + "dependencies": { + "p-timeout": "^5.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", + "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", + "dev": true, + "dependencies": { + "p-map": "^5.1.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter/node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-6.0.0.tgz", + "integrity": "sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rename-overwrite": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rename-overwrite/-/rename-overwrite-5.0.0.tgz", + "integrity": "sha512-vSxE5Ww7Jnyotvaxi3Dj0vOMoojH8KMkBfs9xYeW/qNfJiLTcC1fmwTjrbGUq3mQSOCxkG0DbdcvwTUrpvBN4w==", + "dev": true, + "dependencies": { + "@zkochan/rimraf": "^2.1.2", + "fs-extra": "10.1.0" + }, + "engines": { + "node": ">=12.10" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symlink-dir": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/symlink-dir/-/symlink-dir-5.2.1.tgz", + "integrity": "sha512-HfqqI7BoCx3+482BUfoR1sXAFx5G90KrWImT5/J/a+HZWvzMTTA/hYKh2030WFYn7OwRRUAoMCQvqlwBMnhBUw==", + "dev": true, + "dependencies": { + "better-path-resolve": "^1.0.0", + "rename-overwrite": "^5.0.0" + }, + "bin": { + "symlink-dir": "dist/cli.js" + }, + "engines": { + "node": ">=12.10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", + "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", + "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "dev": true, + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "optional": true + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", + "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", + "dependencies": { + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.5" + }, + "engines": { + "vscode": "^1.82.0" + } + }, + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/src/vscode/package.json b/src/vscode/package.json new file mode 100644 index 0000000..5519580 --- /dev/null +++ b/src/vscode/package.json @@ -0,0 +1,219 @@ +{ + "name": "ton", + "displayName": "TON", + "description": "TON language support for Visual Studio Code.", + "publisher": "vezel", + "preview": true, + "license": "0BSD", + "homepage": "https://docs.vezel.dev/ton", + "repository": { + "type": "git", + "url": "https://github.com/vezel-dev/ton" + }, + "bugs": { + "url": "https://github.com/vezel-dev/ton/issues" + }, + "qna": "https://github.com/vezel-dev/ton/discussions", + "sponsor": { + "url": "https://github.com/sponsors/vezel-dev" + }, + "icon": "ton.png", + "badges": [ + { + "description": "License", + "url": "https://img.shields.io/github/license/vezel-dev/ton?color=brown", + "href": "https://github.com/vezel-dev/ton/blob/master/LICENSE-0BSD" + }, + { + "description": "Commits", + "url": "https://img.shields.io/github/commit-activity/m/vezel-dev/ton/master?label=commits&color=slateblue", + "href": "https://github.com/vezel-dev/ton/commits/master" + }, + { + "description": "Build", + "url": "https://img.shields.io/github/actions/workflow/status/vezel-dev/ton/build.yml?branch=master", + "href": "https://github.com/vezel-dev/ton/actions/workflows/build.yml" + }, + { + "description": "Discussions", + "url": "https://img.shields.io/github/discussions/vezel-dev/ton?color=teal", + "href": "https://github.com/vezel-dev/ton/discussions" + }, + { + "description": "Discord", + "url": "https://img.shields.io/discord/960716713136095232?color=peru&label=discord", + "href": "https://discord.gg/uD8maMVVFX" + } + ], + "categories": [ + "Formatters", + "Programming Languages", + "Snippets" + ], + "engines": { + "node": ">=18.0.0", + "vscode": "^1.83.0" + }, + "extensionKind": [ + "workspace" + ], + "capabilities": { + "virtualWorkspaces": false, + "untrustedWorkspaces": { + "supported": false + } + }, + "activationEvents": [ + "onLanguage:ton" + ], + "contributes": { + "commands": [ + { + "command": "ton.startServer", + "category": "TON", + "title": "Start Language Server" + }, + { + "command": "ton.stopServer", + "category": "TON", + "title": "Stop Language Server" + }, + { + "command": "ton.restartServer", + "category": "TON", + "title": "Restart Language Server" + } + ], + "configuration": [ + { + "title": "TON", + "properties": { + "ton.autoStartServer": { + "title": "Auto-Start Language Server", + "scope": "machine", + "type": "boolean", + "default": true, + "markdownDescription": "Controls whether the language server starts automatically." + }, + "ton.executablePath": { + "title": "Executable Path", + "scope": "machine", + "type": "string", + "format": "path", + "default": "ton", + "markdownDescription": "Configures the path to the `ton` executable." + }, + "ton.serverLogLevel": { + "title": "Language Server Log Level", + "scope": "machine", + "type": "string", + "enum": [ + "critical", + "error", + "warning", + "information", + "debug", + "trace" + ], + "default": "information", + "markdownDescription": "Controls the language server log level." + }, + "ton.trace.server": { + "title": "Language Server Tracing", + "scope": "machine", + "type": "string", + "enum": [ + "off", + "messages", + "verbose" + ], + "default": "off", + "markdownDescription": "Enables tracing of communication with the language server." + } + } + } + ], + "grammars": [ + { + "language": "ton", + "scopeName": "source.ton", + "path": "syntaxes/ton.tmLanguage.json" + } + ], + "languages": [ + { + "id": "ton", + "aliases": [ + "TON" + ], + "icon": { + "light": "ton.svg", + "dark": "ton.svg" + }, + "extensions": [ + ".ton" + ], + "configuration": "language-configuration.json" + } + ], + "problemMatchers": [ + { + "name": "ton", + "owner": "ton", + "fileLocation": "relative", + "pattern": [ + { + "regexp": "^(Warning|Error)\\[(.+)\\]: (.+)$", + "severity": 1, + "code": 2, + "message": 3 + }, + { + "regexp": "^---*> (.+) \\((\\d+),(\\d+)\\)-\\((\\d+),(\\d+)\\)$", + "file": 1, + "line": 2, + "column": 3, + "endLine": 4, + "endColumn": 5 + } + ] + } + ], + "snippets": [ + { + "language": "ton", + "path": "snippets/ton.snippets.json" + } + ] + }, + "devDependencies": { + "@stylistic/eslint-plugin": "1.5.4", + "@types/node": "18.15.0", + "@types/vscode": "1.83.0", + "@typescript-eslint/eslint-plugin": "6.20.0", + "@typescript-eslint/parser": "6.20.0", + "@vscode/vsce": "2.23.0", + "cpy-cli": "5.0.0", + "esbuild": "0.20.0", + "eslint": "8.56.0", + "js-yaml": "4.1.0", + "mkdirp": "3.0.1", + "nerdbank-gitversioning": "3.6.133", + "ovsx": "0.8.3", + "rimraf": "5.0.5", + "symlink-dir": "5.2.1", + "typescript": "5.3.3" + }, + "dependencies": { + "vscode-languageclient": "9.0.1" + }, + "scripts": { + "build": "tsc --noEmit && eslint src --ext ts && rimraf ../../out/bin/src/vscode && esbuild src/extension.ts --external:vscode --platform=node --target=es2022 --bundle --minify --sourcemap --outdir=../../out/bin/src/vscode && cpy README.md language-configuration.json package.json snippets ../../out/bin/src/vscode && mkdirp ../../out/bin/src/vscode/syntaxes && js-yaml syntaxes/ton.tmLanguage.yml > ../../out/bin/src/vscode/syntaxes/ton.tmLanguage.json && symlink-dir node_modules ../../out/bin/src/vscode/node_modules && cd ../../out/bin/src/vscode && cpy ../../../../LICENSE-0BSD . --flat --rename=LICENSE && cpy \"../../../../ton.{png,svg}\" . --flat && nbgv-setversion", + "pack": "cd ../../out/bin/src/vscode && mkdirp ../../../pkg/vscode && vsce package -o ../../../pkg/vscode" + }, + "vsce": { + "dependencies": false, + "prerelease": true + }, + "main": "extension.js" +} diff --git a/src/vscode/snippets/ton.snippets.json b/src/vscode/snippets/ton.snippets.json new file mode 100644 index 0000000..a4f4e62 --- /dev/null +++ b/src/vscode/snippets/ton.snippets.json @@ -0,0 +1,102 @@ +{ + "record expression": { + "prefix": "rec", + "body": [ + "rec {", + "\t$0", + "}" + ] + }, + "error expression": { + "prefix": "err", + "body": [ + "err ${1:name} {", + "\t$0", + "}" + ] + }, + "if expression": { + "prefix": "if", + "body": [ + "if ${1:condition} {", + "\t$0", + "}" + ] + }, + "if-else expression": { + "prefix": "ifelse", + "body": [ + "if ${1:condition} {", + "\t$0", + "} else {", + "}" + ] + }, + "match expression": { + "prefix": "match", + "body": [ + "match ${1:operand} {", + "\t${2:pattern} -> $0,", + "}" + ] + }, + "receive expression": { + "prefix": "recv", + "body": [ + "recv {", + "\t${1:name}(${2:parameters}) -> $0,", + "}" + ] + }, + "receive-else expression": { + "prefix": "recvelse", + "body": [ + "recv {", + "\t${1:name}(${2:parameters}) -> $0,", + "} else {", + "}" + ] + }, + "while expression": { + "prefix": "while", + "body": [ + "while ${1:condition} {", + "\t$0", + "}" + ] + }, + "while-else expression": { + "prefix": "whileelse", + "body": [ + "while ${1:condition} {", + "\t$0", + "} else {", + "}" + ] + }, + "for expression": { + "prefix": "for", + "body": [ + "for ${1:pattern} in ${2:collection} {", + "\t$0", + "}" + ] + }, + "for-else expression": { + "prefix": "forelse", + "body": [ + "for ${1:pattern} in ${2:collection} {", + "\t$0", + "} else {", + "}" + ] + }, + "try expression": { + "prefix": "try", + "body": [ + "try ${1:operand} catch {", + "\t${2:pattern} -> $0,", + "}" + ] + } +} diff --git a/src/vscode/src/extension.ts b/src/vscode/src/extension.ts new file mode 100644 index 0000000..0bf6ceb --- /dev/null +++ b/src/vscode/src/extension.ts @@ -0,0 +1,111 @@ +import { + Disposable, + type ExtensionContext, + MarkdownString, + StatusBarAlignment, + commands, + window, + workspace, +} from "vscode"; +import { + LanguageClient, + TransportKind, +} from "vscode-languageclient/node"; + +export async function activate(context : ExtensionContext) : Promise { + const cfg = workspace.getConfiguration("ton"); + const extensionChannel = window.createOutputChannel("TON", { log : true }); + const serverChannel = window.createOutputChannel("TON Language Server"); + const status = window.createStatusBarItem("TON", StatusBarAlignment.Left); + + let client : LanguageClient | null = null; + + pushDisposable(new Disposable(async () => client?.dispose())); + + function setStatus(icon : string, tooltip ?: string | undefined) : void { + status.text = `$(${icon}) TON`; + + if (tooltip !== undefined) + status.tooltip = new MarkdownString(tooltip); + } + + function pushDisposable(disposable : { dispose : () => unknown }) { + context.subscriptions.push(disposable); + } + + function registerCommand(name : string, callback : () => unknown) : void { + pushDisposable(commands.registerCommand(name, callback)); + } + + pushDisposable(extensionChannel); + pushDisposable(serverChannel); + pushDisposable(status); + + registerCommand( + "ton.startServer", + async () => { + if (client !== null) + return; + + extensionChannel.info("Starting TON language server..."); + setStatus("rocket", "Starting..."); + + client = new LanguageClient( + "ton", + { + command : cfg.get("executablePath", "ton"), + args : ["serve", "-l", cfg.get("serverLogLevel", "information")], + transport : TransportKind.stdio, + }, + { + outputChannel : serverChannel, + documentSelector : [ + { + scheme : "file", + language : "ton", + }, + ], + }); + + try { + await client.start(); + } catch (err) { + extensionChannel.show(true); + + extensionChannel.error("TON language server failed to start:", err); + setStatus("alert", `\`\`\`\n${err}\n\`\`\``); + + return; + } + + extensionChannel.info("TON language server started."); + setStatus("zap", client.initializeResult?.serverInfo?.version); + }); + + registerCommand("ton.stopServer", () => { + if (client === null) + return; + + extensionChannel.info("Stopping TON language server..."); + setStatus("history", "Stopping..."); + + void client.dispose(); + + client = null; + + extensionChannel.info("TON language server stopped."); + setStatus("circle-slash", "Language server manually stopped."); + }); + + registerCommand("ton.restartServer", async () => { + await commands.executeCommand("ton.stopServer"); + await commands.executeCommand("ton.startServer"); + }); + + status.show(); + + if (cfg.get("autoStartServer", true)) + await commands.executeCommand("ton.startServer"); + else + setStatus("circle-slash", "Language server not started due to `ton.autoStartServer` setting."); +} diff --git a/src/vscode/syntaxes/ton.tmLanguage.yml b/src/vscode/syntaxes/ton.tmLanguage.yml new file mode 100644 index 0000000..5ce9257 --- /dev/null +++ b/src/vscode/syntaxes/ton.tmLanguage.yml @@ -0,0 +1,40 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json +uuid: bbe9ac97-90ba-4d64-8502-4602a1132436 +name: ton +scopeName: source.ton +fileTypes: + - ton + +# This grammar is intentionally simple and only performs classification according to the lexical grammar. It also is not +# entirely faithful to the formal language grammar. More advanced (and 100% correct) classification based on the +# syntactic grammar and semantic knowledge is left to the language server. +patterns: + # Comments + - name: comment.line.ton + match: \s*//.* + # Operators + - name: keyword.operator.ton + match: ==?|!=|\+|-|~|\*|/|%|\&|\||\^|>(=|>>?)?|<(=|<)? + # Literals + - name: constant.language.ton + match: \b(false|nan|null|true|undef)\b + - name: constant.numeric.real.ton + match: '[0-9](_*[0-9])*\.[0-9](_*[0-9])*([eE][\+-]?[0-9](_*[0-9])*)?' + - name: constant.numeric.integer.ton + match: '0([oO][0-7](_*[0-7])*|[bB][0-1](_*[0-1])*|[xX][0-9a-fA-F](_*[0-9a-fA-F])*)|[0-9](_*[0-9])*' + - name: string.quoted.ton + begin: '"' + end: '"' + # Punctuators + - name: punctuation.ton + match: \.\.?|,|;|#|\(|\)|\[|\]|\{|\} + # Keywords + # TODO + # Identifiers + - name: support.type.ton + match: '[A-Z][0-9a-zA-Z]*' + - name: support.type.quoted.ton + begin: "'" + end: "'" + - name: variable.name.ton + match: \$[a-zA-Z][_0-9a-zA-Z]* diff --git a/src/vscode/tsconfig.json b/src/vscode/tsconfig.json new file mode 100644 index 0000000..dfb08d6 --- /dev/null +++ b/src/vscode/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "es2022", + "module": "commonjs", + "rootDir": "src" + } +} diff --git a/tasks.vs.json b/tasks.vs.json new file mode 100644 index 0000000..c5e574b --- /dev/null +++ b/tasks.vs.json @@ -0,0 +1,28 @@ +{ + "version": "0.2.1", + "tasks": [ + { + "taskLabel": "Build", + "contextType": "build", + "appliesTo": "/", + "type": "launch", + "commands": [ + { + "command": "dotnet", + "args": [ + "tool", + "restore" + ] + }, + { + "command": "dotnet", + "args": [ + "cake", + "-t", + "default-editor" + ] + } + ] + } + ] +} diff --git a/ton.ico b/ton.ico new file mode 100644 index 0000000..3db7fd4 Binary files /dev/null and b/ton.ico differ diff --git a/ton.png b/ton.png new file mode 100644 index 0000000..cbd9c3e Binary files /dev/null and b/ton.png differ diff --git a/ton.proj b/ton.proj new file mode 100644 index 0000000..f39cd35 --- /dev/null +++ b/ton.proj @@ -0,0 +1,5 @@ + + + + + diff --git a/ton.svg b/ton.svg new file mode 100644 index 0000000..264e142 --- /dev/null +++ b/ton.svg @@ -0,0 +1,44 @@ + + + TON + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..efa8168 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "allowArbitraryExtensions": true, + "allowJs": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "checkJs": true, + "isolatedModules": true, + "noFallthroughCasesInSwitch": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noPropertyAccessFromIndexSignature": true, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "strict": true, + "esModuleInterop": true + } +} diff --git a/version.json b/version.json new file mode 100644 index 0000000..85ef4e7 --- /dev/null +++ b/version.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", + "version": "0.1-dev", + "nuGetPackageVersion": { + "semVer": 2.0 + }, + "publicReleaseRefSpec": [ + "^refs/heads/master$", + "^refs/tags/v.*$" + ], + "cloudBuild": { + "setVersionVariables": false + }, + "release": { + "branchName": "release/v{version}", + "firstUnstableTag": "dev" + } +}