UNPKG

obsidian-dev-utils

Version:

This is the collection of useful functions that you can use for your Obsidian plugin development

372 lines (369 loc) • 35.1 kB
/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ (function initEsm(){if(globalThis.process){return}const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};globalThis.process=browserProcess})(); import eslint from "@eslint/js"; import stylistic from "@stylistic/eslint-plugin"; import { flatConfigs as eslintPluginImportXFlatConfigs } from "eslint-plugin-import-x"; import eslintPluginModulesNewlines from "eslint-plugin-modules-newlines"; import perfectionist from "eslint-plugin-perfectionist"; import tseslint from "typescript-eslint"; import { ObsidianPluginRepoPaths } from "../../obsidian/Plugin/ObsidianPluginRepoPaths.mjs"; import { join } from "../../Path.mjs"; import { getRootFolder } from "../Root.mjs"; const obsidianDevUtilsConfigs = tseslint.config( { files: [ join(ObsidianPluginRepoPaths.Src, ObsidianPluginRepoPaths.AnyPath, ObsidianPluginRepoPaths.AnyTs), join(ObsidianPluginRepoPaths.Src, ObsidianPluginRepoPaths.AnyPath, ObsidianPluginRepoPaths.AnyTsx), join(ObsidianPluginRepoPaths.Scripts, ObsidianPluginRepoPaths.AnyPath, ObsidianPluginRepoPaths.AnyTs), ObsidianPluginRepoPaths.EslintConfigCts, ObsidianPluginRepoPaths.EslintConfigTs, ObsidianPluginRepoPaths.EslintConfigMts ] }, { ignores: [ join(ObsidianPluginRepoPaths.AnyPath, ObsidianPluginRepoPaths.AnyCjs), join(ObsidianPluginRepoPaths.AnyPath, ObsidianPluginRepoPaths.AnyJs), join(ObsidianPluginRepoPaths.AnyPath, ObsidianPluginRepoPaths.AnyMjs), join(ObsidianPluginRepoPaths.Dist, ObsidianPluginRepoPaths.AnyPath) ] }, ...getEslintConfigs(), ...getTseslintConfigs(), ...getStylisticConfigs(), ...getImportXConfigs(), ...getPerfectionistConfigs(), ...getModulesNewlinesConfigs(), ...getModulesNewlinesConfigs(), ...getEslintImportResolverTypescriptConfigs() ); function excludeFilesProperty(config) { const newConfig = { ...config }; delete newConfig.files; return newConfig; } function getEslintConfigs() { return [ eslint.configs.recommended, { rules: { "accessor-pairs": "error", "array-callback-return": "error", "camelcase": "error", "capitalized-comments": "error", "complexity": "error", "consistent-this": "error", "curly": "error", "default-case": "error", "default-case-last": "error", "default-param-last": "error", "eqeqeq": "error", "func-name-matching": "error", "func-names": "error", "func-style": [ "error", "declaration", { allowArrowFunctions: false } ], "grouped-accessor-pairs": [ "error", "getBeforeSet" ], "guard-for-in": "error", "no-alert": "error", "no-array-constructor": "error", "no-bitwise": "error", "no-caller": "error", "no-console": [ "error", { allow: [ "warn", "error" ] } ], "no-constructor-return": "error", "no-div-regex": "error", "no-else-return": [ "error", { allowElseIf: false } ], "no-empty-function": "error", "no-extend-native": "error", "no-extra-bind": "error", "no-extra-label": "error", "no-implicit-coercion": [ "error", { allow: [ "!!" ] } ], "no-implied-eval": "error", "no-inner-declarations": "error", "no-iterator": "error", "no-label-var": "error", "no-labels": "error", "no-lone-blocks": "error", "no-lonely-if": "error", "no-loop-func": "error", "no-magic-numbers": [ "error", { detectObjects: true, enforceConst: true, ignore: [ -1, 0, 1 ] } ], "no-multi-assign": "error", "no-multi-str": "error", "no-negated-condition": "error", "no-nested-ternary": "error", "no-new-func": "error", "no-new-wrappers": "error", "no-object-constructor": "error", "no-octal-escape": "error", "no-promise-executor-return": "error", "no-proto": "error", "no-return-assign": "error", "no-script-url": "error", "no-self-compare": "error", "no-sequences": "error", "no-shadow": "error", "no-template-curly-in-string": "error", "no-throw-literal": "error", "no-unmodified-loop-condition": "error", "no-unneeded-ternary": "error", "no-unreachable-loop": "error", "no-unused-expressions": "error", "no-useless-assignment": "error", "no-useless-call": "error", "no-useless-computed-key": "error", "no-useless-concat": "error", "no-useless-constructor": "error", "no-useless-rename": "error", "no-useless-return": "error", "no-var": "error", "no-void": "error", "object-shorthand": "error", "operator-assignment": "error", "prefer-arrow-callback": "error", "prefer-const": "error", "prefer-exponentiation-operator": "error", "prefer-named-capture-group": "error", "prefer-numeric-literals": "error", "prefer-object-has-own": "error", "prefer-object-spread": "error", "prefer-promise-reject-errors": "error", "prefer-regex-literals": "error", "prefer-rest-params": "error", "prefer-spread": "error", "prefer-template": "error", "radix": "error", "require-atomic-updates": "error", "require-await": "error", "symbol-description": "error", "unicode-bom": "error", "vars-on-top": "error", "yoda": "error" } } ]; } function getEslintImportResolverTypescriptConfigs() { return [ { settings: { "import/resolver": { typescript: { alwaysTryTypes: true } } } } ]; } function getImportXConfigs() { return [ eslintPluginImportXFlatConfigs.recommended, eslintPluginImportXFlatConfigs.typescript, eslintPluginImportXFlatConfigs.errors, eslintPluginImportXFlatConfigs.warnings, { rules: { "import-x/consistent-type-specifier-style": "error", "import-x/extensions": ["error", "ignorePackages"], "import-x/first": "error", "import-x/imports-first": "error", "import-x/newline-after-import": "error", "import-x/no-absolute-path": "error", "import-x/no-amd": "error", "import-x/no-anonymous-default-export": "error", "import-x/no-commonjs": "error", "import-x/no-cycle": "error", "import-x/no-default-export": "error", "import-x/no-deprecated": "error", "import-x/no-duplicates": "error", "import-x/no-dynamic-require": "error", "import-x/no-empty-named-blocks": "error", "import-x/no-extraneous-dependencies": "error", "import-x/no-import-module-exports": "error", "import-x/no-mutable-exports": "error", "import-x/no-named-default": "error", "import-x/no-namespace": "error", "import-x/no-nodejs-modules": "error", "import-x/no-relative-packages": "error", "import-x/no-restricted-paths": "error", "import-x/no-self-import": "error", "import-x/no-unassigned-import": [ "error", { allow: [ "**/*.css", "**/*.sass", "**/*.scss" ] } ], "import-x/no-unused-modules": "error", "import-x/no-useless-path-segments": "error", "import-x/no-webpack-loader-syntax": "error" } } ]; } function getModulesNewlinesConfigs() { return [ { plugins: { "modules-newlines": eslintPluginModulesNewlines }, rules: { "modules-newlines/export-declaration-newline": "error", "modules-newlines/import-declaration-newline": "error" } } ]; } function getPerfectionistConfigs() { return [ perfectionist.configs["recommended-alphabetical"] ]; } function getStylisticConfigs() { return [ stylistic.configs.recommended, stylistic.configs.customize({ arrowParens: true, braceStyle: "1tbs", commaDangle: "never", semi: true }), { rules: { "@stylistic/indent": "off", "@stylistic/indent-binary-ops": "off", "@stylistic/jsx-one-expression-per-line": "off", "@stylistic/no-extra-semi": "error", "@stylistic/object-curly-newline": [ "error", { ExportDeclaration: { minProperties: 2, multiline: true }, ImportDeclaration: { minProperties: 2, multiline: true } } ], "@stylistic/operator-linebreak": [ "error", "before", { overrides: { "=": "after" } } ], "@stylistic/quotes": [ "error", "single", { allowTemplateLiterals: "never" } ] } } ]; } function getTseslintConfigs() { return [ // eslint-disable-next-line import-x/no-named-as-default-member ...tseslint.configs.strictTypeChecked.map(excludeFilesProperty), // eslint-disable-next-line import-x/no-named-as-default-member ...tseslint.configs.stylisticTypeChecked.map(excludeFilesProperty), { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true }, projectService: true, tsconfigRootDir: getRootFolder() ?? "" } } }, { rules: { "@typescript-eslint/explicit-function-return-type": "error", "@typescript-eslint/explicit-member-accessibility": "error", "@typescript-eslint/no-invalid-void-type": ["error", { allowAsThisParameter: true }], "@typescript-eslint/no-this-alias": ["error", { allowedNames: [ "that" ] }], "@typescript-eslint/no-unused-vars": [ "error", { args: "all", argsIgnorePattern: "^_", caughtErrors: "all", caughtErrorsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", ignoreRestSiblings: true, varsIgnorePattern: "^_" } ] } }, { settings: { react: { version: "detect" } } } ]; } export { obsidianDevUtilsConfigs }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL1NjcmlwdFV0aWxzL0VTTGludC9lc2xpbnQuY29uZmlnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIEVTTGludCBjb25maWd1cmF0aW9uIGZvciBUeXBlU2NyaXB0IHByb2plY3RzIHdpdGggdmFyaW91cyBwbHVnaW5zLlxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgRVNMaW50IGNvbmZpZ3VyYXRpb25zIGZvciBUeXBlU2NyaXB0IHByb2plY3RzLCBpbnRlZ3JhdGluZyBtdWx0aXBsZSBFU0xpbnQgcGx1Z2luc1xuICogc3VjaCBhcyBgQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlcmAsIGBAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpbmAsXG4gKiBgZXNsaW50LXBsdWdpbi1tb2R1bGVzLW5ld2xpbmVzYCwgYEBzdHlsaXN0aWMvZXNsaW50LXBsdWdpbmAuXG4gKiBJdCBzZXRzIHVwIHBhcnNlcnMsIHBsdWdpbnMsIGFuZCBydWxlcyBmb3IgbWFpbnRhaW5pbmcgY29kZSBxdWFsaXR5IGFuZCBjb25zaXN0ZW5jeS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1tYWdpYy1udW1iZXJzICovXG5cbmltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSAnZXNsaW50JztcbmltcG9ydCB0eXBlIHsgSW5maW5pdGVEZXB0aENvbmZpZ1dpdGhFeHRlbmRzIH0gZnJvbSAndHlwZXNjcmlwdC1lc2xpbnQnO1xuXG5pbXBvcnQgZXNsaW50IGZyb20gJ0Blc2xpbnQvanMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0XG5pbXBvcnQgc3R5bGlzdGljIGZyb20gJ0BzdHlsaXN0aWMvZXNsaW50LXBsdWdpbic7XG5pbXBvcnQgeyBmbGF0Q29uZmlncyBhcyBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MgfSBmcm9tICdlc2xpbnQtcGx1Z2luLWltcG9ydC14JztcbmltcG9ydCBlc2xpbnRQbHVnaW5Nb2R1bGVzTmV3bGluZXMgZnJvbSAnZXNsaW50LXBsdWdpbi1tb2R1bGVzLW5ld2xpbmVzJztcbmltcG9ydCBwZXJmZWN0aW9uaXN0IGZyb20gJ2VzbGludC1wbHVnaW4tcGVyZmVjdGlvbmlzdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHRcbmltcG9ydCB0c2VzbGludCBmcm9tICd0eXBlc2NyaXB0LWVzbGludCc7XG5cbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4vUGx1Z2luL09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLnRzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICcuLi8uLi9QYXRoLnRzJztcbmltcG9ydCB7IGdldFJvb3RGb2xkZXIgfSBmcm9tICcuLi9Sb290LnRzJztcblxuLyoqXG4gKiBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zIGZvciBUeXBlU2NyaXB0IHByb2plY3RzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZ3M6IExpbnRlci5Db25maWdbXSA9IHRzZXNsaW50LmNvbmZpZyhcbiAge1xuICAgIGZpbGVzOiBbXG4gICAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNyYywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55VHMpLFxuICAgICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVRzeCksXG4gICAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNjcmlwdHMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVRzKSxcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ0N0cyxcbiAgICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ1RzLFxuICAgICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRXNsaW50Q29uZmlnTXRzXG4gICAgXVxuICB9LFxuICB7XG4gICAgaWdub3JlczogW1xuICAgICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlDanMpLFxuICAgICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlKcyksXG4gICAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueU1qcyksXG4gICAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3QsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgpXG4gICAgXVxuICB9LFxuICAuLi5nZXRFc2xpbnRDb25maWdzKCksXG4gIC4uLmdldFRzZXNsaW50Q29uZmlncygpLFxuICAuLi5nZXRTdHlsaXN0aWNDb25maWdzKCksXG4gIC4uLmdldEltcG9ydFhDb25maWdzKCksXG4gIC4uLmdldFBlcmZlY3Rpb25pc3RDb25maWdzKCksXG4gIC4uLmdldE1vZHVsZXNOZXdsaW5lc0NvbmZpZ3MoKSxcbiAgLi4uZ2V0TW9kdWxlc05ld2xpbmVzQ29uZmlncygpLFxuICAuLi5nZXRFc2xpbnRJbXBvcnRSZXNvbHZlclR5cGVzY3JpcHRDb25maWdzKClcbikgYXMgTGludGVyLkNvbmZpZ1tdO1xuXG5mdW5jdGlvbiBleGNsdWRlRmlsZXNQcm9wZXJ0eTxDb25maWcgZXh0ZW5kcyB7IGZpbGVzPzogdW5rbm93biB9Pihjb25maWc6IENvbmZpZyk6IENvbmZpZyB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gIGRlbGV0ZSBuZXdDb25maWcuZmlsZXM7XG4gIHJldHVybiBuZXdDb25maWc7XG59XG5cbmZ1bmN0aW9uIGdldEVzbGludENvbmZpZ3MoKTogSW5maW5pdGVEZXB0aENvbmZpZ1dpdGhFeHRlbmRzW10ge1xuICByZXR1cm4gW1xuICAgIGVzbGludC5jb25maWdzLnJlY29tbWVuZGVkLFxuICAgIHtcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdhY2Nlc3Nvci1wYWlycyc6ICdlcnJvcicsXG4gICAgICAgICdhcnJheS1jYWxsYmFjay1yZXR1cm4nOiAnZXJyb3InLFxuICAgICAgICAnY2FtZWxjYXNlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2NhcGl0YWxpemVkLWNvbW1lbnRzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2NvbXBsZXhpdHknOiAnZXJyb3InLFxuICAgICAgICAnY29uc2lzdGVudC10aGlzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2N1cmx5JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZSc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LXBhcmFtLWxhc3QnOiAnZXJyb3InLFxuICAgICAgICAnZXFlcWVxJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZS1tYXRjaGluZyc6ICdlcnJvcicsXG4gICAgICAgICdmdW5jLW5hbWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtc3R5bGUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnZGVjbGFyYXRpb24nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93QXJyb3dGdW5jdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnZ3JvdXBlZC1hY2Nlc3Nvci1wYWlycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdnZXRCZWZvcmVTZXQnXG4gICAgICAgIF0sXG4gICAgICAgICdndWFyZC1mb3ItaW4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tYWxlcnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tYXJyYXktY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tYml0d2lzZSc6ICdlcnJvcicsXG4gICAgICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tY29uc29sZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICd3YXJuJyxcbiAgICAgICAgICAgICAgJ2Vycm9yJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWNvbnN0cnVjdG9yLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICduby1kaXYtcmVnZXgnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZWxzZS1yZXR1cm4nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd0Vsc2VJZjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1lbXB0eS1mdW5jdGlvbic6ICdlcnJvcicsXG4gICAgICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dHJhLWJpbmQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtbGFiZWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW1wbGljaXQtY29lcmNpb24nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvdzogW1xuICAgICAgICAgICAgICAnISEnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8taW1wbGllZC1ldmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWlubmVyLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbC12YXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbGFiZWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmVseS1pZic6ICdlcnJvcicsXG4gICAgICAgICduby1sb29wLWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbWFnaWMtbnVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldGVjdE9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBlbmZvcmNlQ29uc3Q6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmU6IFtcbiAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1tdWx0aS1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lZ2F0ZWQtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lc3RlZC10ZXJuYXJ5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy1mdW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy13cmFwcGVycyc6ICdlcnJvcicsXG4gICAgICAgICduby1vYmplY3QtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tb2N0YWwtZXNjYXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb21pc2UtZXhlY3V0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXJldHVybi1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2NyaXB0LXVybCc6ICdlcnJvcicsXG4gICAgICAgICduby1zZWxmLWNvbXBhcmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2VxdWVuY2VzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNoYWRvdyc6ICdlcnJvcicsXG4gICAgICAgICduby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdGhyb3ctbGl0ZXJhbCc6ICdlcnJvcicsXG4gICAgICAgICduby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubmVlZGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5yZWFjaGFibGUtbG9vcCc6ICdlcnJvcicsXG4gICAgICAgICduby11bnVzZWQtZXhwcmVzc2lvbnMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY2FsbCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbXB1dGVkLWtleSc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbmNhdCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbnN0cnVjdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmVuYW1lJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby12b2lkJzogJ2Vycm9yJyxcbiAgICAgICAgJ29iamVjdC1zaG9ydGhhbmQnOiAnZXJyb3InLFxuICAgICAgICAnb3BlcmF0b3ItYXNzaWdubWVudCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItYXJyb3ctY2FsbGJhY2snOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWNvbnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1leHBvbmVudGlhdGlvbi1vcGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbmFtZWQtY2FwdHVyZS1ncm91cCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbnVtZXJpYy1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LWhhcy1vd24nOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLW9iamVjdC1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVnZXgtbGl0ZXJhbHMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXJlc3QtcGFyYW1zJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ3JhZGl4JzogJ2Vycm9yJyxcbiAgICAgICAgJ3JlcXVpcmUtYXRvbWljLXVwZGF0ZXMnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hd2FpdCc6ICdlcnJvcicsXG4gICAgICAgICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgICAgICAndW5pY29kZS1ib20nOiAnZXJyb3InLFxuICAgICAgICAndmFycy1vbi10b3AnOiAnZXJyb3InLFxuICAgICAgICAneW9kYSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmZ1bmN0aW9uIGdldEVzbGludEltcG9ydFJlc29sdmVyVHlwZXNjcmlwdENvbmZpZ3MoKTogSW5maW5pdGVEZXB0aENvbmZpZ1dpdGhFeHRlbmRzW10ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICdpbXBvcnQvcmVzb2x2ZXInOiB7XG4gICAgICAgICAgdHlwZXNjcmlwdDoge1xuICAgICAgICAgICAgYWx3YXlzVHJ5VHlwZXM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydFhDb25maWdzKCk6IEluZmluaXRlRGVwdGhDb25maWdXaXRoRXh0ZW5kc1tdIHtcbiAgcmV0dXJuIFtcbiAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzLnR5cGVzY3JpcHQsXG4gICAgZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzLmVycm9ycyxcbiAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3Mud2FybmluZ3MsXG4gICAge1xuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvZXh0ZW5zaW9ucyc6IFsnZXJyb3InLCAnaWdub3JlUGFja2FnZXMnXSxcbiAgICAgICAgJ2ltcG9ydC14L2ZpcnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L2ltcG9ydHMtZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbmV3bGluZS1hZnRlci1pbXBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYWJzb2x1dGUtcGF0aCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWNvbW1vbmpzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWN5Y2xlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlcHJlY2F0ZWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZHVwbGljYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1keW5hbWljLXJlcXVpcmUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZW1wdHktbmFtZWQtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWltcG9ydC1tb2R1bGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1tdXRhYmxlLWV4cG9ydHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbmFtZWQtZGVmYXVsdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lc3BhY2UnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVsYXRpdmUtcGFja2FnZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVzdHJpY3RlZC1wYXRocyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1zZWxmLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby11bmFzc2lnbmVkLWltcG9ydCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICcqKi8qLmNzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNhc3MnLFxuICAgICAgICAgICAgICAnKiovKi5zY3NzJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVudXNlZC1tb2R1bGVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby13ZWJwYWNrLWxvYWRlci1zeW50YXgnOiAnZXJyb3InXG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVzTmV3bGluZXNDb25maWdzKCk6IEluZmluaXRlRGVwdGhDb25maWdXaXRoRXh0ZW5kc1tdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgICdtb2R1bGVzLW5ld2xpbmVzJzogZXNsaW50UGx1Z2luTW9kdWxlc05ld2xpbmVzXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ21vZHVsZXMtbmV3bGluZXMvZXhwb3J0LWRlY2xhcmF0aW9uLW5ld2xpbmUnOiAnZXJyb3InLFxuICAgICAgICAnbW9kdWxlcy1uZXdsaW5lcy9pbXBvcnQtZGVjbGFyYXRpb24tbmV3bGluZSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmZ1bmN0aW9uIGdldFBlcmZlY3Rpb25pc3RDb25maWdzKCk6IEluZmluaXRlRGVwdGhDb25maWdXaXRoRXh0ZW5kc1tdIHtcbiAgcmV0dXJuIFtcbiAgICBwZXJmZWN0aW9uaXN0LmNvbmZpZ3NbJ3JlY29tbWVuZGVkLWFscGhhYmV0aWNhbCddXG4gIF07XG59XG5cbmZ1bmN0aW9uIGdldFN0eWxpc3RpY0NvbmZpZ3MoKTogSW5maW5pdGVEZXB0aENvbmZpZ1dpdGhFeHRlbmRzW10ge1xuICByZXR1cm4gW1xuICAgIHN0eWxpc3RpYy5jb25maWdzLnJlY29tbWVuZGVkLFxuICAgIHN0eWxpc3RpYy5jb25maWdzLmN1c3RvbWl6ZSh7XG4gICAgICBhcnJvd1BhcmVuczogdHJ1ZSxcbiAgICAgIGJyYWNlU3R5bGU6ICcxdGJzJyxcbiAgICAgIGNvbW1hRGFuZ2xlOiAnbmV2ZXInLFxuICAgICAgc2VtaTogdHJ1ZVxuICAgIH0pLFxuICAgIHtcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAc3R5bGlzdGljL2luZGVudCc6ICdvZmYnLFxuICAgICAgICAnQHN0eWxpc3RpYy9pbmRlbnQtYmluYXJ5LW9wcyc6ICdvZmYnLFxuICAgICAgICAnQHN0eWxpc3RpYy9qc3gtb25lLWV4cHJlc3Npb24tcGVyLWxpbmUnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvbm8tZXh0cmEtc2VtaSc6ICdlcnJvcicsXG4gICAgICAgICdAc3R5bGlzdGljL29iamVjdC1jdXJseS1uZXdsaW5lJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgRXhwb3J0RGVjbGFyYXRpb246IHtcbiAgICAgICAgICAgICAgbWluUHJvcGVydGllczogMixcbiAgICAgICAgICAgICAgbXVsdGlsaW5lOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSW1wb3J0RGVjbGFyYXRpb246IHtcbiAgICAgICAgICAgICAgbWluUHJvcGVydGllczogMixcbiAgICAgICAgICAgICAgbXVsdGlsaW5lOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnQHN0eWxpc3RpYy9vcGVyYXRvci1saW5lYnJlYWsnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnYmVmb3JlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgICAgICAgJz0nOiAnYWZ0ZXInXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnQHN0eWxpc3RpYy9xdW90ZXMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd1RlbXBsYXRlTGl0ZXJhbHM6ICduZXZlcidcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmZ1bmN0aW9uIGdldFRzZXNsaW50Q29uZmlncygpOiBJbmZpbml0ZURlcHRoQ29uZmlnV2l0aEV4dGVuZHNbXSB7XG4gIHJldHVybiBbXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyXG4gICAgLi4udHNlc2xpbnQuY29uZmlncy5zdHJpY3RUeXBlQ2hlY2tlZC5tYXAoZXhjbHVkZUZpbGVzUHJvcGVydHkpLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlclxuICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3R5bGlzdGljVHlwZUNoZWNrZWQubWFwKGV4Y2x1ZGVGaWxlc1Byb3BlcnR5KSxcbiAgICB7XG4gICAgICBsYW5ndWFnZU9wdGlvbnM6IHtcbiAgICAgICAgcGFyc2VyT3B0aW9uczoge1xuICAgICAgICAgIGVjbWFGZWF0dXJlczoge1xuICAgICAgICAgICAganN4OiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9qZWN0U2VydmljZTogdHJ1ZSxcbiAgICAgICAgICB0c2NvbmZpZ1Jvb3REaXI6IGdldFJvb3RGb2xkZXIoKSA/PyAnJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBydWxlczoge1xuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eSc6ICdlcnJvcicsXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93QXNUaGlzUGFyYW1ldGVyOiB0cnVlXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93ZWROYW1lczogW1xuICAgICAgICAgICAgJ3RoYXQnXG4gICAgICAgICAgXVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFyZ3M6ICdhbGwnLFxuICAgICAgICAgICAgYXJnc0lnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBjYXVnaHRFcnJvcnM6ICdhbGwnLFxuICAgICAgICAgICAgY2F1Z2h0RXJyb3JzSWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGRlc3RydWN0dXJlZEFycmF5SWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGlnbm9yZVJlc3RTaWJsaW5nczogdHJ1ZSxcbiAgICAgICAgICAgIHZhcnNJZ25vcmVQYXR0ZXJuOiAnXl8nXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHZlcnNpb246ICdkZXRlY3QnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBZ0JBLE9BQU8sWUFBWTtBQUVuQixPQUFPLGVBQWU7QUFDdEIsU0FBUyxlQUFlLHNDQUFzQztBQUM5RCxPQUFPLGlDQUFpQztBQUN4QyxPQUFPLG1CQUFtQjtBQUUxQixPQUFPLGNBQWM7QUFFckIsU0FBUywrQkFBK0I7QUFDeEMsU0FBUyxZQUFZO0FBQ3JCLFNBQVMscUJBQXFCO0FBS3ZCLE1BQU0sMEJBQTJDLFNBQVM7QUFBQSxFQUMvRDtBQUFBLElBQ0UsT0FBTztBQUFBLE1BQ0wsS0FBSyx3QkFBd0IsS0FBSyx3QkFBd0IsU0FBUyx3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