UNPKG

@fenge/eslint-config

Version:

A super strict eslint config for linting js/ts/package.json.

544 lines 73.5 kB
import * as fengePlugin from "@fenge/eslint-plugin"; import tsPlugin from "@typescript-eslint/eslint-plugin"; import confusingKeys from "confusing-browser-globals"; import checkFilePlugin from "eslint-plugin-check-file"; import esxPlugin from "eslint-plugin-es-x"; import * as esmPlugin from "eslint-plugin-esm"; import fpPlugin from "eslint-plugin-fp"; import importPlugin from "eslint-plugin-import"; import nPlugin from "eslint-plugin-n"; import promisePlugin from "eslint-plugin-promise"; import reactPlugin from "eslint-plugin-react"; import reactHooksPlugin from "eslint-plugin-react-hooks"; import simpleImportSortPlugin from "eslint-plugin-simple-import-sort"; import sonarjsPlugin from "eslint-plugin-sonarjs"; import unicornPlugin from "eslint-plugin-unicorn"; import globals from "globals"; export function getJsBase() { // copied from https://github.com/standard/eslint-config-standard/blob/master/src/index.ts // prettier-ignore const standardConfigRules = { 'no-var': 'error', 'object-shorthand': ['error', 'properties'], 'accessor-pairs': ['error', { setWithoutGet: true, enforceForClassMembers: true }], // 'array-bracket-spacing': ['error', 'never'], 'array-callback-return': ['error', { allowImplicit: false, checkForEach: false }], // 'arrow-spacing': ['error', { before: true, after: true }], // 'block-spacing': ['error', 'always'], // 'brace-style': ['error', '1tbs', { allowSingleLine: true }], camelcase: ['error', { allow: ['^UNSAFE_'], properties: 'never', ignoreGlobals: true }], // 'comma-dangle': ['error', { // arrays: 'never', // objects: 'never', // imports: 'never', // exports: 'never', // functions: 'never' // }], // 'comma-spacing': ['error', { before: false, after: true }], // 'comma-style': ['error', 'last'], // 'computed-property-spacing': ['error', 'never', { enforceForClassMembers: true }], 'constructor-super': 'error', // curly: ['error', 'multi-line'], 'default-case-last': 'error', // 'dot-location': ['error', 'property'], // 'dot-notation': ['error', { allowKeywords: true }], // TODO: This should be enabled. Disable it as it conflicts with ts when enabling ts-check // 'eol-last': 'error', eqeqeq: ['error', 'always', { null: 'ignore' }], // 'func-call-spacing': ['error', 'never'], // 'generator-star-spacing': ['error', { before: true, after: true }], // indent: ['error', 2, { // SwitchCase: 1, // VariableDeclarator: 1, // outerIIFEBody: 1, // MemberExpression: 1, // FunctionDeclaration: { parameters: 1, body: 1 }, // FunctionExpression: { parameters: 1, body: 1 }, // CallExpression: { arguments: 1 }, // ArrayExpression: 1, // ObjectExpression: 1, // ImportDeclaration: 1, // flatTernaryExpressions: false, // ignoreComments: false, // ignoredNodes: [ // 'TemplateLiteral *', // 'JSXElement', // 'JSXElement > *', // 'JSXAttribute', // 'JSXIdentifier', // 'JSXNamespacedName', // 'JSXMemberExpression', // 'JSXSpreadAttribute', // 'JSXExpressionContainer', // 'JSXOpeningElement', // 'JSXClosingElement', // 'JSXFragment', // 'JSXOpeningFragment', // 'JSXClosingFragment', // 'JSXText', // 'JSXEmptyExpression', // 'JSXSpreadChild' // ], // offsetTernaryExpressions: true // }], // 'key-spacing': ['error', { beforeColon: false, afterColon: true }], // 'keyword-spacing': ['error', { before: true, after: true }], // 'lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }], // 'multiline-ternary': ['error', 'always-multiline'], 'new-cap': ['error', { newIsCap: true, capIsNew: false, properties: true }], // 'new-parens': 'error', 'no-array-constructor': 'error', 'no-async-promise-executor': 'error', 'no-caller': 'error', 'no-case-declarations': 'error', 'no-class-assign': 'error', 'no-compare-neg-zero': 'error', 'no-cond-assign': 'error', 'no-const-assign': 'error', 'no-constant-condition': ['error', { checkLoops: false }], 'no-control-regex': 'error', 'no-debugger': 'error', 'no-delete-var': 'error', 'no-dupe-args': 'error', 'no-dupe-class-members': 'error', 'no-dupe-keys': 'error', 'no-duplicate-case': 'error', 'no-useless-backreference': 'error', 'no-empty': ['error', { allowEmptyCatch: true }], 'no-empty-character-class': 'error', 'no-empty-pattern': 'error', 'no-eval': 'error', 'no-ex-assign': 'error', 'no-extend-native': 'error', 'no-extra-bind': 'error', 'no-extra-boolean-cast': 'error', // 'no-extra-parens': ['error', 'functions'], 'no-fallthrough': 'error', // 'no-floating-decimal': 'error', 'no-func-assign': 'error', 'no-global-assign': 'error', 'no-implied-eval': 'error', 'no-import-assign': 'error', 'no-invalid-regexp': 'error', 'no-irregular-whitespace': 'error', 'no-iterator': 'error', 'no-labels': ['error', { allowLoop: false, allowSwitch: false }], 'no-lone-blocks': 'error', 'no-loss-of-precision': 'error', 'no-misleading-character-class': 'error', 'no-prototype-builtins': 'error', 'no-useless-catch': 'error', // 'no-mixed-operators': ['error', { // groups: [ // ['==', '!=', '===', '!==', '>', '>=', '<', '<='], // ['&&', '||'], // ['in', 'instanceof'] // ], // allowSamePrecedence: true // }], // 'no-mixed-spaces-and-tabs': 'error', // 'no-multi-spaces': 'error', 'no-multi-str': 'error', // 'no-multiple-empty-lines': ['error', { max: 1, maxBOF: 0, maxEOF: 0 }], 'no-new': 'error', 'no-new-func': 'error', // 'no-new-object': 'error', // 'no-new-symbol': 'error', 'no-new-wrappers': 'error', 'no-obj-calls': 'error', 'no-octal': 'error', 'no-octal-escape': 'error', 'no-proto': 'error', 'no-redeclare': ['error', { builtinGlobals: false }], 'no-regex-spaces': 'error', 'no-return-assign': ['error', 'except-parens'], 'no-self-assign': ['error', { props: true }], 'no-self-compare': 'error', 'no-sequences': 'error', 'no-shadow-restricted-names': 'error', 'no-sparse-arrays': 'error', // 'no-tabs': 'error', // 'no-template-curly-in-string': 'error', // VSCode an WebStorm can detect it. Enabling this will decrease flexibility. For example, long content containing ${foo} is reasonable. 'no-this-before-super': 'error', 'no-throw-literal': 'error', // 'no-trailing-spaces': 'error', 'no-undef': 'error', // 'no-undef-init': 'error', // It conflict with `init-declarations` // 'no-unexpected-multiline': 'error', 'no-unmodified-loop-condition': 'error', 'no-unneeded-ternary': ['error', { defaultAssignment: false }], 'no-unreachable': 'error', 'no-unreachable-loop': 'error', 'no-unsafe-finally': 'error', 'no-unsafe-negation': 'error', 'no-unused-expressions': ['error', { enforceForJSX: true, allowShortCircuit: true, allowTernary: true, allowTaggedTemplates: true }], 'no-unused-vars': ['error', { args: 'none', caughtErrors: 'none', ignoreRestSiblings: true, vars: 'all' }], 'no-use-before-define': ['error', { functions: false, classes: false, variables: false }], 'no-useless-call': 'error', 'no-useless-computed-key': 'error', 'no-useless-constructor': 'error', 'no-useless-escape': 'error', 'no-useless-rename': 'error', 'no-useless-return': 'error', 'no-void': 'error', // 'no-whitespace-before-property': 'error', 'no-with': 'error', // 'object-curly-newline': ['error', { multiline: true, consistent: true }], // 'object-curly-spacing': ['error', 'always'], // 'object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }], 'one-var': ['error', { initialized: 'never' }], // 'operator-linebreak': ['error', 'after', { overrides: { '?': 'before', ':': 'before', '|>': 'before' } }], // 'padded-blocks': ['error', { blocks: 'never', switches: 'never', classes: 'never' }], 'prefer-const': ['error', { destructuring: 'all' }], 'prefer-promise-reject-errors': 'error', 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }], // 'quote-props': ['error', 'as-needed'], // quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: false }], // 'rest-spread-spacing': ['error', 'never'], // semi: ['error', 'never'], // 'semi-spacing': ['error', { before: false, after: true }], // 'space-before-blocks': ['error', 'always'], // 'space-before-function-paren': ['error', 'always'], // 'space-in-parens': ['error', 'never'], // 'space-infix-ops': 'error', // 'space-unary-ops': ['error', { words: true, nonwords: false }], // 'spaced-comment': ['error', 'always', { // line: { markers: ['*package', '!', '/', ',', '='] }, // block: { balanced: true, markers: ['*package', '!', ',', ':', '::', 'flow-include'], exceptions: ['*'] } // }], 'symbol-description': 'error', // 'template-curly-spacing': ['error', 'never'], // 'template-tag-spacing': ['error', 'never'], 'unicode-bom': ['error', 'never'], 'use-isnan': ['error', { enforceForSwitchCase: true, enforceForIndexOf: true }], 'valid-typeof': ['error', { requireStringLiterals: true }], // 'wrap-iife': ['error', 'any', { functionPrototypeMethods: true }], // 'yield-star-spacing': ['error', 'both'], yoda: ['error', 'never'], }; return { name: "fenge/javascript", files: ["**/*.{js,cjs,mjs,jsx}"], // https://eslint.org/docs/latest/use/configure/language-options languageOptions: { ecmaVersion: "latest", sourceType: "module", parserOptions: { // TODO `ecmaVersion` and `sourceType` are no standard here. import/no-default-export required this ecmaVersion: "latest", sourceType: "module", ecmaFeatures: { jsx: true, }, }, globals: { ...Object.fromEntries(Object.entries(globals.browser) .filter(([k]) => !confusingKeys.includes(k)) .filter(([k]) => !["self", "global"].includes(k))), }, }, plugins: { "check-file": checkFilePlugin, fp: fpPlugin, n: nPlugin, import: importPlugin, promise: promisePlugin, react: reactPlugin, "react-hooks": reactHooksPlugin, sonarjs: sonarjsPlugin, unicorn: unicornPlugin, "es-x": esxPlugin, esm: esmPlugin, "simple-import-sort": simpleImportSortPlugin, "@fenge": fengePlugin, "@typescript-eslint": { rules: tsPlugin.rules }, // TODO: Ugly. Submit a pr to typescript-plugin to fix it. }, rules: { // 1. standard config rules ...standardConfigRules, // 2. code style for a better readability "arrow-body-style": ["error", "as-needed"], // Sort imports by prettier. Turn in off. // "simple-import-sort/imports": [ // "error", // { groups: [["^\\u0000", "^node:", "^@?\\w", "^", "^\\."]] }, // ], "simple-import-sort/exports": "error", "unicorn/prefer-node-protocol": "error", "unicorn/escape-case": "error", // '\ud834' -> '\uD834' // "unicorn/number-literal-case": "error", // 0XFF -> 0xFF // conflict with prettier // 3. ban some syntaxes to reduce mistakes "default-param-last": "error", "for-direction": "error", "func-name-matching": "error", "func-names": "error", // always require a name for function declaration "func-style": ["error", "declaration", { allowArrowFunctions: true }], "getter-return": "error", "init-declarations": "error", "logical-assignment-operators": [ "error", "always", { enforceForIfStatements: true }, ], "max-depth": ["error", { max: 5 }], "max-params": ["error", { max: 4 }], "no-bitwise": "error", "no-console": "error", "no-constant-binary-expression": "error", "no-dupe-else-if": "error", "no-duplicate-imports": "error", "no-empty-static-block": "error", "no-empty-function": "error", "no-implicit-coercion": [ "error", { disallowTemplateShorthand: true, allow: ["!!"] }, ], // forbid code like `const num = +str`; "no-inner-declarations": "error", // TODO: change the rule value to `["error","functions",{blockScopedFunctions:"disallow"}]` when eslint is v9 "no-invalid-this": "error", "no-lonely-if": "error", "no-multi-assign": "error", "no-new-native-nonconstructor": "error", "no-nonoctal-decimal-escape": "error", "no-object-constructor": "error", "no-param-reassign": "error", "no-plusplus": "error", "no-setter-return": "error", "no-shadow": ["error", { ignoreOnInitialization: true }], "no-unsafe-optional-chaining": [ "error", { disallowArithmeticOperators: true }, ], "no-unused-labels": "error", "no-unused-private-class-members": "error", "require-await": "error", "require-yield": "error", "prefer-arrow-callback": "error", "prefer-exponentiation-operator": "error", "prefer-object-has-own": "error", // "prefer-object-spread": "error", "prefer-spread": "error", "prefer-template": "error", // check-file "check-file/filename-blocklist": [ "error", { "**/*.mjs": "*.js", "**/*.cjs": "*.js", "**/*.mts": "*.ts", "**/*.cts": "*.ts", "**/*.spec.*": "*.test.*", // Node.js built-in support *.test.js. See https://nodejs.org/api/test.html#running-tests-from-the-command-line. }, ], // es "es-x/no-accessor-properties": "error", "es-x/no-async-iteration": "error", "es-x/no-generators": "error", "es-x/no-hashbang": "error", "es-x/no-legacy-object-prototype-accessor-methods": "error", "es-x/no-top-level-await": "error", // esm "esm/existing-file-imports": "error", "esm/no-declaration-file-imports": "error", "esm/no-directory-imports": "error", "esm/no-dynamic-imports": "error", "esm/no-empty-exports": "error", "esm/no-git-ignored-imports": "error", "esm/no-phantom-dep-imports": "error", "esm/no-relative-parent-imports": "error", "esm/no-rename-exports": "error", "esm/no-rename-imports": "error", "esm/no-side-effect-imports": "error", "esm/no-useless-path-segments": "error", "esm/required-exports": "error", "esm/top-side-effect-imports": "error", // fp "fp/no-arguments": "error", "fp/no-delete": "error", // import "import/export": "error", "import/first": "error", // "import/newline-after-import": "error", // already handled by prettier's plugin `@ianvs/prettier-plugin-sort-imports` "import/no-absolute-path": "error", "import/no-commonjs": [ "error", { allowRequire: false, allowConditionalRequire: false, allowPrimitiveModules: false, }, ], /** * 1. The ESM specification didn’t say anything about interoperability with CommonJS. See: https://blog.andrewbran.ch/default-exports-in-commonjs-libraries/ * 2. Reexporting like `export * from 'foo'` will be difficult. */ "import/no-default-export": "error", "import/no-duplicates": "error", "import/no-dynamic-require": "error", "import/no-empty-named-blocks": "error", // The feature of this rule is already handled by Prettier. But we still put it here. "import/no-mutable-exports": "error", // forbid code like `export let count = 3` "import/no-named-default": "error", "import/no-relative-packages": "error", // forbid to import module from other monorepo packages by relative paths "import/no-self-import": "error", "import/no-webpack-loader-syntax": "error", // n "n/handle-callback-err": ["error", "^(err|error)$"], "n/no-callback-literal": "error", "n/no-deprecated-api": "error", "n/no-exports-assign": "error", "n/no-new-require": "error", "n/no-path-concat": "error", "n/no-process-exit": "error", "n/no-unpublished-bin": "error", "n/prefer-global/buffer": ["error", "never"], "n/prefer-global/console": "error", "n/prefer-global/process": ["error", "never"], "n/prefer-global/text-decoder": "error", "n/prefer-global/text-encoder": "error", "n/prefer-global/url": "error", "n/prefer-global/url-search-params": "error", "n/process-exit-as-throw": "error", // promise "promise/no-return-wrap": "error", "promise/param-names": "error", "promise/prefer-catch": "error", // react // "react/hook-use-state": "error", // This rule will cause some warnings because we don't specify the version of react. "react/jsx-filename-extension": [ "error", { allow: "as-needed", extensions: [".jsx", ".tsx"] }, ], "react/jsx-key": "error", "react/jsx-no-duplicate-props": "error", "react/jsx-no-undef": "error", "react/jsx-no-useless-fragment": "error", "react/jsx-props-no-spread-multi": "error", "react/jsx-uses-vars": "error", // react-hooks "react-hooks/exhaustive-deps": "error", "react-hooks/rules-of-hooks": "error", // sonarjs "sonarjs/no-collapsible-if": "error", "sonarjs/no-all-duplicated-branches": "error", "sonarjs/no-identical-conditions": "error", "sonarjs/no-identical-expressions": "error", "sonarjs/no-ignored-return": "error", "sonarjs/no-inverted-boolean-check": "error", "sonarjs/no-nested-switch": "error", "sonarjs/no-useless-catch": "error", "sonarjs/prefer-immediate-return": "error", // unicorn // 'unicorn/no-null': 'error', // null can be useful when interact with json. "unicorn/consistent-assert": "error", "unicorn/consistent-date-clone": "error", "unicorn/consistent-destructuring": "error", "unicorn/consistent-empty-array-spread": "error", "unicorn/error-message": "error", "unicorn/explicit-length-check": "error", "unicorn/filename-case": [ "error", { cases: { kebabCase: true, pascalCase: true } }, ], "unicorn/import-style": [ "error", { styles: { react: { named: true }, child_process: { default: true }, fs: { default: true }, "fs/promises": { default: true }, process: { default: true }, "util/types": { named: true }, "node:child_process": { default: true }, "node:fs": { default: true }, "node:fs/promises": { default: true }, "node:process": { default: true }, "node:util/types": { named: true }, }, }, ], "unicorn/new-for-builtins": "error", "unicorn/no-abusive-eslint-disable": "error", "unicorn/no-accessor-recursion": "error", "unicorn/no-array-callback-reference": "error", "unicorn/no-array-method-this-argument": "error", "unicorn/no-await-in-promise-methods": "error", "unicorn/no-for-loop": "error", "unicorn/no-instanceof-builtins": "error", "unicorn/no-lonely-if": "error", "unicorn/no-named-default": "error", "unicorn/no-negation-in-equality-check": "error", "unicorn/no-new-array": "error", "unicorn/no-new-buffer": "error", "unicorn/no-process-exit": "error", // Prefer `n/no-process-exit`, but at the same time using this rule seems have no problem "unicorn/no-single-promise-in-promise-methods": "error", "unicorn/no-static-only-class": "error", "unicorn/no-thenable": "error", "unicorn/no-this-assignment": "error", "unicorn/no-typeof-undefined": "error", "unicorn/no-unreadable-array-destructuring": "error", "unicorn/no-unreadable-iife": "error", "unicorn/no-useless-fallback-in-spread": "error", "unicorn/no-useless-spread": "error", "unicorn/no-useless-switch-case": "error", "unicorn/no-zero-fractions": "error", "unicorn/prefer-array-flat-map": "error", "unicorn/prefer-date-now": "error", "unicorn/prefer-export-from": "error", "unicorn/prefer-global-this": "error", "unicorn/prefer-includes": "error", "unicorn/prefer-logical-operator-over-ternary": "error", "unicorn/prefer-math-min-max": "error", "unicorn/prefer-module": "error", "unicorn/prefer-negative-index": "error", "unicorn/prefer-number-properties": "error", "unicorn/prefer-object-from-entries": "error", "unicorn/prefer-optional-catch-binding": "error", "unicorn/prefer-regexp-test": "error", "unicorn/prefer-string-replace-all": "error", "unicorn/prefer-string-slice": "error", "unicorn/prefer-ternary": "error", "unicorn/require-array-join-separator": "error", "unicorn/require-number-to-fixed-digits-argument": "error", "unicorn/text-encoding-identifier-case": "error", "unicorn/throw-new-error": "error", "@fenge/call-arguments-length": "error", "@fenge/no-instanceof-builtin": "error", "@fenge/no-nested-class": "error", "@fenge/no-nested-function": "error", "@fenge/no-restricted-loops": "error", "@fenge/no-top-level-arrow-function": "error", "@fenge/no-unnecessary-template-string": "error", "@typescript-eslint/ban-ts-comment": [ "error", { "ts-expect-error": true, "ts-ignore": true, "ts-nocheck": true, }, ], "@typescript-eslint/no-this-alias": "error", "@typescript-eslint/no-useless-empty-export": "error", "@typescript-eslint/prefer-for-of": "error", }, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25maWcvanMvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sUUFBUSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hELE9BQU8sYUFBYSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sZUFBZSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxRQUFRLE1BQU0sa0JBQWtCLENBQUM7QUFDeEMsT0FBTyxZQUFZLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxhQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxXQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxnQkFBZ0IsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLHNCQUFzQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sYUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sYUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUU5QixNQUFNLFVBQVUsU0FBUztJQUN2QiwwRkFBMEY7SUFDMUYsa0JBQWtCO0lBQ2xCLE1BQU0sbUJBQW1CLEdBQUc7UUFDMUIsUUFBUSxFQUFFLE9BQU87UUFDakIsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO1FBRTNDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNsRiwrQ0FBK0M7UUFDL0MsdUJBQXVCLEVB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LE9BQU87WUFDaEQsNEJBQTRCLEVBQUUsT0FBTztZQUNyQyxtQ0FBbUMsRUFBRSxPQUFPO1lBQzVDLDZCQUE2QixFQUFFLE9BQU87WUFDdEMsd0JBQXdCLEVBQUUsT0FBTztZQUNqQyxzQ0FBc0MsRUFBRSxPQUFPO1lBQy9DLGlEQUFpRCxFQUFFLE9BQU87WUFDMUQsdUNBQXVDLEVBQUUsT0FBTztZQUNoRCx5QkFBeUIsRUFBRSxPQUFPO1lBRWxDLDhCQUE4QixFQUFFLE9BQU87WUFDdkMsOEJBQThCLEVBQUUsT0FBTztZQUN2Qyx3QkFBd0IsRUFBRSxPQUFPO1lBQ2pDLDJCQUEyQixFQUFFLE9BQU87WUFDcEMsNEJBQTRCLEVBQUUsT0FBTztZQUNyQyxvQ0FBb0MsRUFBRSxPQUFPO1lBQzdDLHVDQUF1QyxFQUFFLE9BQU87WUFFaEQsbUNBQW1DLEVBQUU7Z0JBQ25DLE9BQU87Z0JBQ1A7b0JBQ0UsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLFlBQVksRUFBRSxJQUFJO2lCQUNuQjthQUNGO1lBQ0Qsa0NBQWtDLEVBQUUsT0FBTztZQUMzQyw0Q0FBNEMsRUFBRSxPQUFPO1lBQ3JELGtDQUFrQyxFQUFFLE9BQU87U0FDNUM7S0FDTyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZlbmdlUGx1Z2luIGZyb20gXCJAZmVuZ2UvZXNsaW50LXBsdWdpblwiO1xuaW1wb3J0IHRzUGx1Z2luIGZyb20gXCJAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpblwiO1xuaW1wb3J0IGNvbmZ1c2luZ0tleXMgZnJvbSBcImNvbmZ1c2luZy1icm93c2VyLWdsb2JhbHNcIjtcbmltcG9ydCBjaGVja0ZpbGVQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tY2hlY2stZmlsZVwiO1xuaW1wb3J0IGVzeFBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1lcy14XCI7XG5pbXBvcnQgKiBhcyBlc21QbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tZXNtXCI7XG5pbXBvcnQgZnBQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tZnBcIjtcbmltcG9ydCBpbXBvcnRQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4taW1wb3J0XCI7XG5pbXBvcnQgblBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1uXCI7XG5pbXBvcnQgcHJvbWlzZVBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1wcm9taXNlXCI7XG5pbXBvcnQgcmVhY3RQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tcmVhY3RcIjtcbmltcG9ydCByZWFjdEhvb2tzUGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLXJlYWN0LWhvb2tzXCI7XG5pbXBvcnQgc2ltcGxlSW1wb3J0U29ydFBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1zaW1wbGUtaW1wb3J0LXNvcnRcIjtcbmltcG9ydCBzb25hcmpzUGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLXNvbmFyanNcIjtcbmltcG9ydCB1bmljb3JuUGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLXVuaWNvcm5cIjtcbmltcG9ydCBnbG9iYWxzIGZyb20gXCJnbG9iYWxzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRKc0Jhc2UoKSB7XG4gIC8vIGNvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zdGFuZGFyZC9lc2xpbnQtY29uZmlnLXN0YW5kYXJkL2Jsb2IvbWFzdGVyL3NyYy9pbmRleC50c1xuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgY29uc3Qgc3RhbmRhcmRDb25maWdSdWxlcyA9IHtcbiAgICAnbm8tdmFyJzogJ2Vycm9yJyxcbiAgICAnb2JqZWN0LXNob3J0aGFuZCc6IFsnZXJyb3InLCAncHJvcGVydGllcyddLFxuXG4gICAgJ2FjY2Vzc29yLXBhaXJzJzogWydlcnJvcicsIHsgc2V0V2l0aG91dEdldDogdHJ1ZSwgZW5mb3JjZUZvckNsYXNzTWVtYmVyczogdHJ1ZSB9XSxcbiAgICAvLyAnYXJyYXktYnJhY2tldC1zcGFjaW5nJzogWydlcnJvcicsICduZXZlciddLFxuICAgICdhcnJheS1jYWxsYmFjay1yZXR1cm4nOiBbJ2Vycm9yJywge1xuICAgICAgYWxsb3dJbXBsaWNpdDogZmFsc2UsXG4gICAgICBjaGVja0ZvckVhY2g6IGZhbHNlXG4gICAgfV0sXG4gICAgLy8gJ2Fycm93LXNwYWNpbmcnOiBbJ2Vycm9yJywgeyBiZWZvcmU6IHRydWUsIGFmdGVyOiB0cnVlIH1dLFxuICAgIC8vICdibG9jay1zcGFjaW5nJzogWydlcnJvcicsICdhbHdheXMnXSxcbiAgICAvLyAnYnJhY2Utc3R5bGUnOiBbJ2Vycm9yJywgJzF0YnMnLCB7IGFsbG93U2luZ2xlTGluZTogdHJ1ZSB9XSxcbiAgICBjYW1lbGNhc2U6IFsnZXJyb3InLCB7XG4gICAgICBhbGxvdzogWydeVU5TQUZFXyddLFxuICAgICAgcHJvcGVydGllczogJ25ldmVyJyxcbiAgICAgIGlnbm9yZUdsb2JhbHM6IHRydWVcbiAgICB9XSxcbiAgICAvLyAnY29tbWEtZGFuZ2xlJzogWydlcnJvcicsIHtcbiAgICAvLyAgIGFycmF5czogJ25ldmVyJyxcbiAgICAvLyAgIG9iamVjdHM6ICduZXZlcicsXG4gICAgLy8gICBpbXBvcnRzOiAnbmV2ZXInLFxuICAgIC8vICAgZXhwb3J0czogJ25ldmVyJyxcbiAgICAvLyAgIGZ1bmN0aW9uczogJ25ldmVyJ1xuICAgIC8vIH1dLFxuICAgIC8vICdjb21tYS1zcGFjaW5nJzogWydlcnJvcicsIHsgYmVmb3JlOiBmYWxzZSwgYWZ0ZXI6IHRydWUgfV0sXG4gICAgLy8gJ2NvbW1hLXN0eWxlJzogWydlcnJvcicsICdsYXN0J10sXG4gICAgLy8gJ2NvbXB1dGVkLXByb3BlcnR5LXNwYWNpbmcnOiBbJ2Vycm9yJywgJ25ldmVyJywgeyBlbmZvcmNlRm9yQ2xhc3NNZW1iZXJzOiB0cnVlIH1dLFxuICAgICdjb25zdHJ1Y3Rvci1zdXBlcic6ICdlcnJvcicsXG4gICAgLy8gY3VybHk6IFsnZXJyb3InLCAnbXVsdGktbGluZSddLFxuICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgLy8gJ2RvdC1sb2NhdGlvbic6IFsnZXJyb3InLCAncHJvcGVydHknXSxcbiAgICAvLyAnZG90LW5vdGF0aW9uJzogWydlcnJvcicsIHsgYWxsb3dLZXl3b3JkczogdHJ1ZSB9XSwgLy8gVE9ETzogVGhpcyBzaG91bGQgYmUgZW5hYmxlZC4gRGlzYWJsZSBpdCBhcyBpdCBjb25mbGljdHMgd2l0aCB0cyB3aGVuIGVuYWJsaW5nIHRzLWNoZWNrXG4gICAgLy8gJ2VvbC1sYXN0JzogJ2Vycm9yJyxcbiAgICBlcWVxZXE6IFsnZXJyb3InLCAnYWx3YXlzJywgeyBudWxsOiAnaWdub3JlJyB9XSxcbiAgICAvLyAnZnVuYy1jYWxsLXNwYWNpbmcnOiBbJ2Vycm9yJywgJ25ldmVyJ10sXG4gICAgLy8gJ2dlbmVyYXRvci1zdGFyLXNwYWNpbmcnOiBbJ2Vycm9yJywgeyBiZWZvcmU6IHRydWUsIGFmdGVyOiB0cnVlIH1dLFxuICAgIC8vIGluZGVudDogWydlcnJvcicsIDIsIHtcbiAgICAvLyAgIFN3aXRjaENhc2U6IDEsXG4gICAgLy8gICBWYXJpYWJsZURlY2xhcmF0b3I6IDEsXG4gICAgLy8gICBvdXRlcklJRkVCb2R5OiAxLFxuICAgIC8vICAgTWVtYmVyRXhwcmVzc2lvbjogMSxcbiAgICAvLyAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IHsgcGFyYW1ldGVyczogMSwgYm9keTogMSB9LFxuICAgIC8vICAgRnVuY3Rpb25FeHByZXNzaW9uOiB7IHBhcmFtZXRlcnM6IDEsIGJvZHk6IDEgfSxcbiAgICAvLyAgIENhbGxFeHByZXNzaW9uOiB7IGFyZ3VtZW50czogMSB9LFxuICAgIC8vICAgQXJyYXlFeHByZXNzaW9uOiAxLFxuICAgIC8vICAgT2JqZWN0RXhwcmVzc2lvbjogMSxcbiAgICAvLyAgIEltcG9ydERlY2xhcmF0aW9uOiAxLFxuICAgIC8vICAgZmxhdFRlcm5hcnlFeHByZXNzaW9uczogZmFsc2UsXG4gICAgLy8gICBpZ25vcmVDb21tZW50czogZmFsc2UsXG4gICAgLy8gICBpZ25vcmVkTm9kZXM6IFtcbiAgICAvLyAgICAgJ1RlbXBsYXRlTGl0ZXJhbCAqJyxcbiAgICAvLyAgICAgJ0pTWEVsZW1lbnQnLFxuICAgIC8vICAgICAnSlNYRWxlbWVudCA+IConLFxuICAgIC8vICAgICAnSlNYQXR0cmlidXRlJyxcbiAgICAvLyAgICAgJ0pTWElkZW50aWZpZXInLFxuICAgIC8vICAgICAnSlNYTmFtZXNwYWNlZE5hbWUnLFxuICAgIC8vICAgICAnSlNYTWVtYmVyRXhwcmVzc2lvbicsXG4gICAgLy8gICAgICdKU1hTcHJlYWRBdHRyaWJ1dGUnLFxuICAgIC8vICAgICAnSlNYRXhwcmVzc2lvbkNvbnRhaW5lcicsXG4gICAgLy8gICAgICdKU1hPcGVuaW5nRWxlbWVudCcsXG4gICAgLy8gICAgICdKU1hDbG9zaW5nRWxlbWVudCcsXG4gICAgLy8gICAgICdKU1hGcmFnbWVudCcsXG4gICAgLy8gICAgICdKU1hPcGVuaW5nRnJhZ21lbnQnLFxuICAgIC8vICAgICAnSlNYQ2xvc2luZ0ZyYWdtZW50JyxcbiAgICAvLyAgICAgJ0pTWFRleHQnLFxuICAgIC8vICAgICAnSlNYRW1wdHlFeHByZXNzaW9uJyxcbiAgICAvLyAgICAgJ0pTWFNwcmVhZENoaWxkJ1xuICAgIC8vICAgXSxcbiAgICAvLyAgIG9mZnNldFRlcm5hcnlFeHByZXNzaW9uczogdHJ1ZVxuICAgIC8vIH1dLFxuICAgIC8vICdrZXktc3BhY2luZyc6IFsnZXJyb3InLCB7IGJlZm9yZUNvbG9uOiBmYWxzZSwgYWZ0ZXJDb2xvbjogdHJ1ZSB9XSxcbiAgICAvLyAna2V5d29yZC1zcGFjaW5nJzogWydlcnJvcicsIHsgYmVmb3JlOiB0cnVlLCBhZnRlcjogdHJ1ZSB9XSxcbiAgICAvLyAnbGluZXMtYmV0d2Vlbi1jbGFzcy1tZW1iZXJzJzogWydlcnJvcicsICdhbHdheXMnLCB7IGV4Y2VwdEFmdGVyU2luZ2xlTGluZTogdHJ1ZSB9XSxcbiAgICAvLyAnbXVsdGlsaW5lLXRlcm5hcnknOiBbJ2Vycm9yJywgJ2Fsd2F5cy1tdWx0aWxpbmUnXSxcbiAgICAnbmV3LWNhcCc6IFsnZXJyb3InLCB7IG5ld0lzQ2FwOiB0cnVlLCBjYXBJc05ldzogZmFsc2UsIHByb3BlcnRpZXM6IHRydWUgfV0sXG4gICAgLy8gJ25ldy1wYXJlbnMnOiAnZXJyb3InLFxuICAgICduby1hcnJheS1jb25zdHJ1Y3Rvcic6ICdlcnJvcicsXG4gICAgJ25vLWFzeW5jLXByb21pc2UtZXhlY3V0b3InOiAnZXJyb3InLFxuICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICduby1jYXNlLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgJ25vLWNsYXNzLWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ25vLWNvbXBhcmUtbmVnLXplcm8nOiAnZXJyb3InLFxuICAgICduby1jb25kLWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ25vLWNvbnN0LWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ25vLWNvbnN0YW50LWNvbmRpdGlvbic6IFsnZXJyb3InLCB7IGNoZWNrTG9vcHM6IGZhbHNlIH1dLFxuICAgICduby1jb250cm9sLXJlZ2V4JzogJ2Vycm9yJyxcbiAgICAnbm8tZGVidWdnZXInOiAnZXJyb3InLFxuICAgICduby1kZWxldGUtdmFyJzogJ2Vycm9yJyxcbiAgICAnbm8tZHVwZS1hcmdzJzogJ2Vycm9yJyxcbiAgICAnbm8tZHVwZS1jbGFzcy1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAnbm8tZHVwZS1rZXlzJzogJ2Vycm9yJyxcbiAgICAnbm8tZHVwbGljYXRlLWNhc2UnOiAnZXJyb3InLFxuICAgICduby11c2VsZXNzLWJhY2tyZWZlcmVuY2UnOiAnZXJyb3InLFxuICAgICduby1lbXB0eSc6IFsnZXJyb3InLCB7IGFsbG93RW1wdHlDYXRjaDogdHJ1ZSB9XSxcbiAgICAnbm8tZW1wdHktY2hhcmFjdGVyLWNsYXNzJzogJ2Vycm9yJyxcbiAgICAnbm8tZW1wdHktcGF0dGVybic6ICdlcnJvcicsXG4gICAgJ25vLWV2YWwnOiAnZXJyb3InLFxuICAgICduby1leC1hc3NpZ24nOiAnZXJyb3InLFxuICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAnbm8tZXh0cmEtYmluZCc6ICdlcnJvcicsXG4gICAgJ25vLWV4dHJhLWJvb2xlYW4tY2FzdCc6ICdlcnJvcicsXG4gICAgLy8gJ25vLWV4dHJhLXBhcmVucyc6IFsnZXJyb3InLCAnZnVuY3Rpb25zJ10sXG4gICAgJ25vLWZhbGx0aHJvdWdoJzogJ2Vycm9yJyxcbiAgICAvLyAnbm8tZmxvYXRpbmctZGVjaW1hbCc6ICdlcnJvcicsXG4gICAgJ25vLWZ1bmMtYXNzaWduJzogJ2Vycm9yJyxcbiAgICAnbm8tZ2xvYmFsLWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ25vLWltcGxpZWQtZXZhbCc6ICdlcnJvcicsXG4gICAgJ25vLWltcG9ydC1hc3NpZ24nOiAnZXJyb3InLFxuICAgICduby1pbnZhbGlkLXJlZ2V4cCc6ICdlcnJvcicsXG4gICAgJ25vLWlycmVndWxhci13aGl0ZXNwYWNlJzogJ2Vycm9yJyxcbiAgICAnbm8taXRlcmF0b3InOiAnZXJyb3InLFxuICAgICduby1sYWJlbHMnOiBbJ2Vycm9yJywgeyBhbGxvd0xvb3A6IGZhbHNlLCBhbGxvd1N3aXRjaDogZmFsc2UgfV0sXG4gICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAnbm8tbG9zcy1vZi1wcmVjaXNpb24nOiAnZXJyb3InLFxuICAgICduby1taXNsZWFkaW5nLWNoYXJhY3Rlci1jbGFzcyc6ICdlcnJvcicsXG4gICAgJ25vLXByb3RvdHlwZS1idWlsdGlucyc6ICdlcnJvcicsXG4gICAgJ25vLXVzZWxlc3MtY2F0Y2gnOiAnZXJyb3InLFxuICAgIC8vICduby1taXhlZC1vcGVyYXRvcnMnOiBbJ2Vycm9yJywge1xuICAgIC8vICAgZ3JvdXBzOiBbXG4gICAgLy8gICAgIFsnPT0nLCAnIT0nLCAnPT09JywgJyE9PScsICc+JywgJz49JywgJzwnLCAnPD0nXSxcbiAgICAvLyAgICAgWycmJicsICd8fCddLFxuICAgIC8vICAgICBbJ2luJywgJ2luc3RhbmNlb2YnXVxuICAgIC8vICAgXSxcbiAgICAvLyAgIGFsbG93U2FtZVByZWNlZGVuY2U6IHRydWVcbiAgICAvLyB9XSxcbiAgICAvLyAnbm8tbWl4ZWQtc3BhY2VzLWFuZC10YWJzJzogJ2Vycm9yJyxcbiAgICAvLyAnbm8tbXVsdGktc3BhY2VzJzogJ2Vycm9yJyxcbiAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAvLyAnbm8tbXVsdGlwbGUtZW1wdHktbGluZXMnOiBbJ2Vycm9yJywgeyBtYXg6IDEsIG1heEJPRjogMCwgbWF4RU9GOiAwIH1dLFxuICAgICduby1uZXcnOiAnZXJyb3InLFxuICAgICduby1uZXctZnVuYyc6ICdlcnJvcicsXG4gICAgLy8gJ25vLW5ldy1vYmplY3QnOiAnZXJyb3InLFxuICAgIC8vICduby1uZXctc3ltYm9sJzogJ2Vycm9yJyxcbiAgICAnbm8tbmV3LXdyYXBwZXJzJzogJ2Vycm9yJyxcbiAgICAnbm8tb2JqLWNhbGxzJzogJ2Vycm9