@mnaoumov/obsidian-dev-toolkit 0.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +15 -1
- package/bundlers/esbuild/package.json +6 -0
- package/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/dependency/package.json +6 -0
- package/bundlers/esbuild-impl/fix-source-maps-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/index/package.json +6 -0
- package/bundlers/esbuild-impl/obsidian-plugin-builder/package.json +6 -0
- package/bundlers/esbuild-impl/package.json +6 -0
- package/bundlers/esbuild-impl/preprocess-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/rename-css-plugin/package.json +6 -0
- package/bundlers/index/package.json +6 -0
- package/bundlers/package.json +6 -0
- package/dist/demo-vault-helper/main.js +1264 -0
- package/dist/demo-vault-helper/manifest.json +9 -0
- package/dist/integration-test-plugin/main.js +54167 -0
- package/dist/integration-test-plugin/manifest.json +8 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +322 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +38 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/dependency.cjs +240 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/dependency.d.cts +20 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +213 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +34 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +179 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +7 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +362 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +98 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +234 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +30 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.cjs +171 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.d.cts +14 -0
- package/dist/lib/cjs/bundlers/esbuild.cjs +164 -0
- package/dist/lib/cjs/bundlers/esbuild.d.cts +11 -0
- package/dist/lib/cjs/bundlers/index.cjs +167 -0
- package/dist/lib/cjs/bundlers/index.d.cts +3 -0
- package/dist/lib/cjs/demo-vault-app-json.cjs +186 -0
- package/dist/lib/cjs/demo-vault-app-json.d.cts +93 -0
- package/dist/lib/cjs/demo-vault-buttons.cjs +567 -0
- package/dist/lib/cjs/demo-vault-buttons.d.cts +259 -0
- package/dist/lib/cjs/demo-vault-coverage.cjs +713 -0
- package/dist/lib/cjs/demo-vault-coverage.d.cts +533 -0
- package/dist/lib/cjs/demo-vault.cjs +296 -0
- package/dist/lib/cjs/demo-vault.d.cts +33 -0
- package/dist/lib/cjs/formatters/dprint.cjs +160 -0
- package/dist/lib/cjs/formatters/dprint.d.cts +15 -0
- package/dist/lib/cjs/formatters/index.cjs +164 -0
- package/dist/lib/cjs/formatters/index.d.cts +2 -0
- package/dist/lib/cjs/index.cjs +194 -0
- package/dist/lib/cjs/index.d.cts +16 -0
- package/dist/lib/cjs/integration-test-setup.cjs +129 -0
- package/dist/lib/cjs/integration-test-setup.d.cts +33 -0
- package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +163 -0
- package/dist/lib/cjs/integration-test-vitest-global-setup.d.cts +39 -0
- package/dist/lib/cjs/jest-setup.cjs +134 -0
- package/dist/lib/cjs/jest-setup.d.cts +13 -0
- package/dist/lib/cjs/linters/eslint-config.cjs +403 -0
- package/dist/lib/cjs/linters/eslint-config.d.cts +25 -0
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +200 -0
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +14 -0
- package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +255 -0
- package/dist/lib/cjs/linters/eslint-rules/manifest-description.d.cts +54 -0
- package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.cjs +218 -0
- package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.d.cts +141 -0
- package/dist/lib/cjs/linters/eslint-rules/manifest-id.cjs +215 -0
- package/dist/lib/cjs/linters/eslint-rules/manifest-id.d.cts +32 -0
- package/dist/lib/cjs/linters/eslint-rules/manifest-name.cjs +216 -0
- package/dist/lib/cjs/linters/eslint-rules/manifest-name.d.cts +30 -0
- package/dist/lib/cjs/linters/eslint-rules/manifest-schema.cjs +316 -0
- package/dist/lib/cjs/linters/eslint-rules/manifest-schema.d.cts +45 -0
- package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.cjs +259 -0
- package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +657 -0
- package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +247 -0
- package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +181 -0
- package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +13 -0
- package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.cjs +263 -0
- package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.d.cts +30 -0
- package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.cjs +215 -0
- package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.d.cts +29 -0
- package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.cjs +278 -0
- package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.d.cts +18 -0
- package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.cjs +306 -0
- package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint.cjs +160 -0
- package/dist/lib/cjs/linters/eslint.d.cts +15 -0
- package/dist/lib/cjs/linters/index.cjs +185 -0
- package/dist/lib/cjs/linters/index.d.cts +9 -0
- package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +171 -0
- package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +12 -0
- package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +164 -0
- package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
- package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.cjs +246 -0
- package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.d.cts +32 -0
- package/dist/lib/cjs/linters/markdownlint.cjs +160 -0
- package/dist/lib/cjs/linters/markdownlint.d.cts +15 -0
- package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +176 -0
- package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.d.cts +40 -0
- package/dist/lib/cjs/linters/plugin-names.cjs +249 -0
- package/dist/lib/cjs/linters/plugin-names.d.cts +81 -0
- package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +216 -0
- package/dist/lib/cjs/obsidian-plugin-repo-paths.d.cts +253 -0
- package/dist/lib/cjs/setup.cjs +163 -0
- package/dist/lib/cjs/setup.d.cts +21 -0
- package/dist/lib/cjs/templates.cjs +172 -0
- package/dist/lib/cjs/templates.d.cts +13 -0
- package/dist/lib/cjs/test-runners/index.cjs +170 -0
- package/dist/lib/cjs/test-runners/index.d.cts +4 -0
- package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +211 -0
- package/dist/lib/cjs/test-runners/integration-test-plugin.d.cts +44 -0
- package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +157 -0
- package/dist/lib/cjs/test-runners/performance-eval-cap.d.cts +27 -0
- package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +217 -0
- package/dist/lib/cjs/test-runners/stale-build-global-setup.d.cts +86 -0
- package/dist/lib/cjs/test-runners/vitest-config.cjs +484 -0
- package/dist/lib/cjs/test-runners/vitest-config.d.cts +200 -0
- package/dist/lib/cjs/version.cjs +262 -0
- package/dist/lib/cjs/version.d.cts +92 -0
- package/dist/lib/cjs/vitest-setup.cjs +134 -0
- package/dist/lib/cjs/vitest-setup.d.cts +11 -0
- package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +38 -0
- package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +218 -0
- package/dist/lib/esm/bundlers/esbuild-impl/dependency.d.mts +20 -0
- package/dist/lib/esm/bundlers/esbuild-impl/dependency.mjs +130 -0
- package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +34 -0
- package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +108 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +7 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +56 -0
- package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +98 -0
- package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +247 -0
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +30 -0
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +126 -0
- package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.d.mts +14 -0
- package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.mjs +63 -0
- package/dist/lib/esm/bundlers/esbuild.d.mts +11 -0
- package/dist/lib/esm/bundlers/esbuild.mjs +58 -0
- package/dist/lib/esm/bundlers/index.d.mts +3 -0
- package/dist/lib/esm/bundlers/index.mjs +48 -0
- package/dist/lib/esm/demo-vault-app-json.d.mts +93 -0
- package/dist/lib/esm/demo-vault-app-json.mjs +75 -0
- package/dist/lib/esm/demo-vault-buttons.d.mts +259 -0
- package/dist/lib/esm/demo-vault-buttons.mjs +452 -0
- package/dist/lib/esm/demo-vault-coverage.d.mts +533 -0
- package/dist/lib/esm/demo-vault-coverage.mjs +619 -0
- package/dist/lib/esm/demo-vault.d.mts +33 -0
- package/dist/lib/esm/demo-vault.mjs +197 -0
- package/dist/lib/esm/formatters/dprint.d.mts +15 -0
- package/dist/lib/esm/formatters/dprint.mjs +52 -0
- package/dist/lib/esm/formatters/index.d.mts +2 -0
- package/dist/lib/esm/formatters/index.mjs +46 -0
- package/dist/lib/esm/index.d.mts +16 -0
- package/dist/lib/esm/index.mjs +66 -0
- package/dist/lib/esm/integration-test-setup.d.mts +33 -0
- package/dist/lib/esm/integration-test-setup.mjs +44 -0
- package/dist/lib/esm/integration-test-vitest-global-setup.d.mts +39 -0
- package/dist/lib/esm/integration-test-vitest-global-setup.mjs +57 -0
- package/dist/lib/esm/jest-setup.d.mts +13 -0
- package/dist/lib/esm/jest-setup.mjs +53 -0
- package/dist/lib/esm/linters/eslint-config.d.mts +25 -0
- package/dist/lib/esm/linters/eslint-config.mjs +290 -0
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +14 -0
- package/dist/lib/esm/linters/eslint-rules/index.mjs +70 -0
- package/dist/lib/esm/linters/eslint-rules/manifest-description.d.mts +54 -0
- package/dist/lib/esm/linters/eslint-rules/manifest-description.mjs +146 -0
- package/dist/lib/esm/linters/eslint-rules/manifest-helpers.d.mts +141 -0
- package/dist/lib/esm/linters/eslint-rules/manifest-helpers.mjs +90 -0
- package/dist/lib/esm/linters/eslint-rules/manifest-id.d.mts +32 -0
- package/dist/lib/esm/linters/eslint-rules/manifest-id.mjs +109 -0
- package/dist/lib/esm/linters/eslint-rules/manifest-name.d.mts +30 -0
- package/dist/lib/esm/linters/eslint-rules/manifest-name.mjs +110 -0
- package/dist/lib/esm/linters/eslint-rules/manifest-schema.d.mts +45 -0
- package/dist/lib/esm/linters/eslint-rules/manifest-schema.mjs +212 -0
- package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.mjs +150 -0
- package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +551 -0
- package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.mjs +138 -0
- package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +13 -0
- package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +73 -0
- package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.d.mts +30 -0
- package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.mjs +157 -0
- package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.d.mts +29 -0
- package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.mjs +108 -0
- package/dist/lib/esm/linters/eslint-rules/require-component-suffix.d.mts +18 -0
- package/dist/lib/esm/linters/eslint-rules/require-component-suffix.mjs +167 -0
- package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.mjs +197 -0
- package/dist/lib/esm/linters/eslint.d.mts +15 -0
- package/dist/lib/esm/linters/eslint.mjs +52 -0
- package/dist/lib/esm/linters/index.d.mts +9 -0
- package/dist/lib/esm/linters/index.mjs +60 -0
- package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +12 -0
- package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +66 -0
- package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
- package/dist/lib/esm/linters/markdownlint-rules/index.mjs +46 -0
- package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.d.mts +32 -0
- package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.mjs +130 -0
- package/dist/lib/esm/linters/markdownlint.d.mts +15 -0
- package/dist/lib/esm/linters/markdownlint.mjs +52 -0
- package/dist/lib/esm/linters/obsidianmd-rule-custom-message.d.mts +40 -0
- package/dist/lib/esm/linters/obsidianmd-rule-custom-message.mjs +67 -0
- package/dist/lib/esm/linters/plugin-names.d.mts +81 -0
- package/dist/lib/esm/linters/plugin-names.mjs +141 -0
- package/dist/lib/esm/obsidian-plugin-repo-paths.d.mts +253 -0
- package/dist/lib/esm/obsidian-plugin-repo-paths.mjs +108 -0
- package/dist/lib/esm/setup.d.mts +21 -0
- package/dist/lib/esm/setup.mjs +55 -0
- package/dist/lib/esm/templates.d.mts +13 -0
- package/dist/lib/esm/templates.mjs +57 -0
- package/dist/lib/esm/test-runners/index.d.mts +4 -0
- package/dist/lib/esm/test-runners/index.mjs +50 -0
- package/dist/lib/esm/test-runners/integration-test-plugin.d.mts +44 -0
- package/dist/lib/esm/test-runners/integration-test-plugin.mjs +94 -0
- package/dist/lib/esm/test-runners/performance-eval-cap.d.mts +27 -0
- package/dist/lib/esm/test-runners/performance-eval-cap.mjs +48 -0
- package/dist/lib/esm/test-runners/stale-build-global-setup.d.mts +86 -0
- package/dist/lib/esm/test-runners/stale-build-global-setup.mjs +115 -0
- package/dist/lib/esm/test-runners/vitest-config.d.mts +200 -0
- package/dist/lib/esm/test-runners/vitest-config.mjs +369 -0
- package/dist/lib/esm/version.d.mts +92 -0
- package/dist/lib/esm/version.mjs +160 -0
- package/dist/lib/esm/vitest-setup.d.mts +11 -0
- package/dist/lib/esm/vitest-setup.mjs +53 -0
- package/dist/templates/.markdownlint-cli2.mjs +4 -0
- package/dist/templates/.nano-staged.mjs +4 -0
- package/dist/templates/commitlint.config.ts +3 -0
- package/dist/templates/dprint.json +26 -0
- package/dist/templates/eslint.config.mts +3 -0
- package/dist/templates/scripts/build/build-clean.ts +4 -0
- package/dist/templates/scripts/build/build-compile-svelte.ts +4 -0
- package/dist/templates/scripts/build/build-compile-typescript.ts +4 -0
- package/dist/templates/scripts/build/build-compile.ts +4 -0
- package/dist/templates/scripts/build/build-templates.ts +4 -0
- package/dist/templates/scripts/bundlers/esbuild/build.ts +4 -0
- package/dist/templates/scripts/bundlers/esbuild/dev.ts +4 -0
- package/dist/templates/scripts/commitlint-config.ts +3 -0
- package/dist/templates/scripts/eslint-config.ts +10 -0
- package/dist/templates/scripts/formatters/dprint/format-check.ts +8 -0
- package/dist/templates/scripts/formatters/dprint/format.ts +8 -0
- package/dist/templates/scripts/gate/gate.ts +10 -0
- package/dist/templates/scripts/linters/cspell/spellcheck.ts +8 -0
- package/dist/templates/scripts/linters/eslint/lint-fix.ts +8 -0
- package/dist/templates/scripts/linters/eslint/lint.ts +8 -0
- package/dist/templates/scripts/linters/markdownlint/lint-md-fix.ts +8 -0
- package/dist/templates/scripts/linters/markdownlint/lint-md.ts +8 -0
- package/dist/templates/scripts/linters/over-exposure/find-overexposed-fix.ts +25 -0
- package/dist/templates/scripts/linters/over-exposure/find-overexposed.ts +15 -0
- package/dist/templates/scripts/markdownlint-cli2-config.ts +3 -0
- package/dist/templates/scripts/nano-staged-config.ts +3 -0
- package/dist/templates/scripts/test-runners/vitest/test-coverage.ts +4 -0
- package/dist/templates/scripts/test-runners/vitest/test-watch.ts +4 -0
- package/dist/templates/scripts/test-runners/vitest/test.ts +4 -0
- package/dist/templates/scripts/version/version.ts +10 -0
- package/dist/templates/scripts/vitest-config.ts +3 -0
- package/dist/templates/vitest.config.ts +3 -0
- package/formatters/dprint/package.json +6 -0
- package/formatters/index/package.json +6 -0
- package/formatters/package.json +6 -0
- package/linters/eslint/package.json +6 -0
- package/linters/eslint-config/package.json +6 -0
- package/linters/eslint-rules/index/package.json +6 -0
- package/linters/eslint-rules/manifest-description/package.json +6 -0
- package/linters/eslint-rules/manifest-helpers/package.json +6 -0
- package/linters/eslint-rules/manifest-id/package.json +6 -0
- package/linters/eslint-rules/manifest-name/package.json +6 -0
- package/linters/eslint-rules/manifest-schema/package.json +6 -0
- package/linters/eslint-rules/no-local-obsidian-internals/package.json +6 -0
- package/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian/package.json +6 -0
- package/linters/eslint-rules/no-untrusted-input-events/package.json +6 -0
- package/linters/eslint-rules/obsidian-dev-utils-plugin/package.json +6 -0
- package/linters/eslint-rules/package.json +6 -0
- package/linters/eslint-rules/plugin-name-as-code/package.json +6 -0
- package/linters/eslint-rules/plugin-name-as-code-in-ui/package.json +6 -0
- package/linters/eslint-rules/require-component-suffix/package.json +6 -0
- package/linters/eslint-rules/require-plugin-api-contract-schemas/package.json +6 -0
- package/linters/index/package.json +6 -0
- package/linters/markdownlint/package.json +6 -0
- package/linters/markdownlint-cli2-config/package.json +6 -0
- package/linters/markdownlint-rules/index/package.json +6 -0
- package/linters/markdownlint-rules/package.json +6 -0
- package/linters/markdownlint-rules/plugin-name-as-code/package.json +6 -0
- package/linters/obsidianmd-rule-custom-message/package.json +6 -0
- package/linters/package.json +6 -0
- package/linters/plugin-names/package.json +6 -0
- package/package.json +302 -13
- package/test-runners/index/package.json +6 -0
- package/test-runners/integration-test-plugin/package.json +6 -0
- package/test-runners/package.json +6 -0
- package/test-runners/performance-eval-cap/package.json +6 -0
- package/test-runners/stale-build-global-setup/package.json +6 -0
- package/test-runners/vitest-config/package.json +6 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return "/";
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: "android"
|
|
20
|
+
};
|
|
21
|
+
const existingProcess = globalThis.process;
|
|
22
|
+
if (!existingProcess) {
|
|
23
|
+
globalThis.process = browserProcess;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (existingProcess.versions?.node) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const existingProcessRecord = existingProcess;
|
|
30
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
31
|
+
existingProcessRecord[key] ??= value;
|
|
32
|
+
}
|
|
33
|
+
existingProcessRecord["browser"] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function keepName($unknown) {
|
|
37
|
+
return $unknown;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
(function initCjs() {
|
|
41
|
+
const globalThisRecord = globalThis;
|
|
42
|
+
ensureDisposeSymbols();
|
|
43
|
+
globalThisRecord["__name"] ??= keepName;
|
|
44
|
+
globalThisRecord["__extractDefault"] ??= extractDefault;
|
|
45
|
+
ensureBrowserProcess();
|
|
46
|
+
function extractDefault(module) {
|
|
47
|
+
return module && module.__esModule && "default" in module ? module.default : module;
|
|
48
|
+
}
|
|
49
|
+
})();
|
|
50
|
+
})();
|
|
51
|
+
(function patchObsidianRequire() {
|
|
52
|
+
const originalRequire = require;
|
|
53
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
require = Object.assign(
|
|
58
|
+
(id) => requirePatched(id),
|
|
59
|
+
originalRequire,
|
|
60
|
+
{
|
|
61
|
+
__isPatched: true
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
function extractDefault(module) {
|
|
66
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
70
|
+
'@codemirror/autocomplete',
|
|
71
|
+
'@codemirror/collab',
|
|
72
|
+
'@codemirror/commands',
|
|
73
|
+
'@codemirror/language',
|
|
74
|
+
'@codemirror/lint',
|
|
75
|
+
'@codemirror/search',
|
|
76
|
+
'@codemirror/state',
|
|
77
|
+
'@codemirror/text',
|
|
78
|
+
'@codemirror/view',
|
|
79
|
+
'@lezer/common',
|
|
80
|
+
'@lezer/highlight',
|
|
81
|
+
'@lezer/lr',
|
|
82
|
+
'obsidian']
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
86
|
+
'@codemirror/closebrackets',
|
|
87
|
+
'@codemirror/comment',
|
|
88
|
+
'@codemirror/fold',
|
|
89
|
+
'@codemirror/gutter',
|
|
90
|
+
'@codemirror/highlight',
|
|
91
|
+
'@codemirror/history',
|
|
92
|
+
'@codemirror/matchbrackets',
|
|
93
|
+
'@codemirror/panel',
|
|
94
|
+
'@codemirror/rangeset',
|
|
95
|
+
'@codemirror/rectangular-selection',
|
|
96
|
+
'@codemirror/stream-parser',
|
|
97
|
+
'@codemirror/tooltip']
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
function requirePatched(id) {
|
|
101
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
102
|
+
return originalRequire?.(id);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
106
|
+
if (globalThis.app.isMobile) {
|
|
107
|
+
if (id === 'process' || id === 'node:process') {
|
|
108
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
109
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
110
|
+
|
|
111
|
+
return process;
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
const module = originalRequire?.(id);
|
|
115
|
+
if (module) {
|
|
116
|
+
return extractDefault(module);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
121
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
122
|
+
return {};
|
|
123
|
+
}
|
|
124
|
+
})();
|
|
125
|
+
|
|
126
|
+
"use strict";
|
|
127
|
+
var __defProp = Object.defineProperty;
|
|
128
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
129
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
130
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
131
|
+
var __export = (target, all) => {
|
|
132
|
+
for (var name in all)
|
|
133
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
134
|
+
};
|
|
135
|
+
var __copyProps = (to, from, except, desc) => {
|
|
136
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
137
|
+
for (let key of __getOwnPropNames(from))
|
|
138
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
139
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
140
|
+
}
|
|
141
|
+
return to;
|
|
142
|
+
};
|
|
143
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
144
|
+
var manifest_name_exports = {};
|
|
145
|
+
__export(manifest_name_exports, {
|
|
146
|
+
MESSAGE_ID_CONTAINS_OBSIDIAN: () => MESSAGE_ID_CONTAINS_OBSIDIAN,
|
|
147
|
+
MESSAGE_ID_CONTAINS_PLUGIN: () => MESSAGE_ID_CONTAINS_PLUGIN,
|
|
148
|
+
MESSAGE_ID_INVALID_CHARACTERS: () => MESSAGE_ID_INVALID_CHARACTERS,
|
|
149
|
+
manifestName: () => manifestName
|
|
150
|
+
});
|
|
151
|
+
module.exports = __toCommonJS(manifest_name_exports);
|
|
152
|
+
var import_manifest_helpers = require('./manifest-helpers.cjs');
|
|
153
|
+
const MESSAGE_ID_CONTAINS_OBSIDIAN = "nameContainsObsidian";
|
|
154
|
+
const MESSAGE_ID_CONTAINS_PLUGIN = "nameContainsPlugin";
|
|
155
|
+
const MESSAGE_ID_INVALID_CHARACTERS = "nameInvalidCharacters";
|
|
156
|
+
const ALLOWED_NAME_CHARACTERS = /^[A-Za-z0-9 \-+()]+$/;
|
|
157
|
+
const OBSIDIAN_VARIANTS = /obsi|sidian/i;
|
|
158
|
+
const manifestName = {
|
|
159
|
+
create(context) {
|
|
160
|
+
return {
|
|
161
|
+
Document(node) {
|
|
162
|
+
const manifestObject = (0, import_manifest_helpers.getManifestObject)(node);
|
|
163
|
+
if (!manifestObject) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const member = (0, import_manifest_helpers.findManifestMember)(manifestObject, "name");
|
|
167
|
+
if (!member) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const name = (0, import_manifest_helpers.getStringValue)(member.value);
|
|
171
|
+
if (name === null) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const reportNode = (0, import_manifest_helpers.toReportNode)(member.value);
|
|
175
|
+
if (OBSIDIAN_VARIANTS.test(name)) {
|
|
176
|
+
context.report({
|
|
177
|
+
messageId: MESSAGE_ID_CONTAINS_OBSIDIAN,
|
|
178
|
+
node: reportNode
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
if (name.toLowerCase().includes("plugin")) {
|
|
182
|
+
context.report({
|
|
183
|
+
messageId: MESSAGE_ID_CONTAINS_PLUGIN,
|
|
184
|
+
node: reportNode
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
if (!ALLOWED_NAME_CHARACTERS.test(name)) {
|
|
188
|
+
context.report({
|
|
189
|
+
messageId: MESSAGE_ID_INVALID_CHARACTERS,
|
|
190
|
+
node: reportNode
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
},
|
|
196
|
+
meta: {
|
|
197
|
+
docs: {
|
|
198
|
+
description: "Enforce the Community directory's constraints on a plugin's `manifest.json` `name`"
|
|
199
|
+
},
|
|
200
|
+
messages: {
|
|
201
|
+
[MESSAGE_ID_CONTAINS_OBSIDIAN]: "The `name` must not contain `Obsidian` or a variant of it. It is implied by the context of the plugin directory.",
|
|
202
|
+
[MESSAGE_ID_CONTAINS_PLUGIN]: "The `name` must not contain `Plugin`.",
|
|
203
|
+
[MESSAGE_ID_INVALID_CHARACTERS]: "The `name` must use Basic Latin only, with hyphens, plus signs and parentheses the only permitted punctuation."
|
|
204
|
+
},
|
|
205
|
+
schema: [],
|
|
206
|
+
type: "problem"
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
210
|
+
0 && (module.exports = {
|
|
211
|
+
MESSAGE_ID_CONTAINS_OBSIDIAN,
|
|
212
|
+
MESSAGE_ID_CONTAINS_PLUGIN,
|
|
213
|
+
MESSAGE_ID_INVALID_CHARACTERS,
|
|
214
|
+
manifestName
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL21hbmlmZXN0LW5hbWUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbWFuaWZlc3QtbmFtZVxuICpcbiAqIEVuZm9yY2VzIHRoZSBDb21tdW5pdHkgZGlyZWN0b3J5J3MgY29uc3RyYWludHMgb24gYSBwbHVnaW4ncyBgbWFuaWZlc3QuanNvbmAgYG5hbWVgOiBubyBgT2JzaWRpYW5gIG9yXG4gKiBpdHMgdmFyaWFudHMsIG5vIGBQbHVnaW5gLCBhbmQgQmFzaWMgTGF0aW4gb25seSB3aXRoIGh5cGhlbnMsIHBsdXMgc2lnbnMgYW5kIHBhcmVudGhlc2VzIHRoZSBzb2xlXG4gKiBwZXJtaXR0ZWQgcHVuY3R1YXRpb24uXG4gKlxuICogUnVucyBvbiB0aGUgYEBlc2xpbnQvanNvbmAgYGpzb24vanNvbmAgbGFuZ3VhZ2U7IHNlZSBgbWFuaWZlc3QtaGVscGVycy50c2AgZm9yIHdoeSB0aGUgQVNUIGlzIE1vbW9hXG4gKiByYXRoZXIgdGhhbiBFU1RyZWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHtcbiAgZmluZE1hbmlmZXN0TWVtYmVyLFxuICBnZXRNYW5pZmVzdE9iamVjdCxcbiAgZ2V0U3RyaW5nVmFsdWUsXG4gIHRvUmVwb3J0Tm9kZVxufSBmcm9tICcuL21hbmlmZXN0LWhlbHBlcnMudHMnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgbmFtZSBjb250YWlucyBgT2JzaWRpYW5gIG9yIG9uZSBvZiBpdHMgdmFyaWFudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0NPTlRBSU5TX09CU0lESUFOID0gJ25hbWVDb250YWluc09ic2lkaWFuJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gdGhlIG5hbWUgY29udGFpbnMgYFBsdWdpbmAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0NPTlRBSU5TX1BMVUdJTiA9ICduYW1lQ29udGFpbnNQbHVnaW4nO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgbmFtZSBob2xkcyBhIGNoYXJhY3RlciBvdXRzaWRlIEJhc2ljIExhdGluLCBvciBwdW5jdHVhdGlvbiB0aGUgZGlyZWN0b3J5IHJlamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0lOVkFMSURfQ0hBUkFDVEVSUyA9ICduYW1lSW52YWxpZENoYXJhY3RlcnMnO1xuXG4vKipcblRoZSBvbmx5IGNoYXJhY3RlcnMgYSBwbHVnaW4gbmFtZSBtYXkgaG9sZDogQmFzaWMgTGF0aW4gbGV0dGVycyBhbmQgZGlnaXRzLCBzcGFjZXMsIGFuZCB0aGUgdGhyZWVcbnBlcm1pdHRlZCBwdW5jdHVhdGlvbiBtYXJrcy5cbiAqL1xuY29uc3QgQUxMT1dFRF9OQU1FX0NIQVJBQ1RFUlMgPSAvXltBLVphLXowLTkgXFwtKygpXSskLztcblxuLyoqXG5gT2JzaWRpYW5gIGFuZCB0aGUgdHdvIHZhcmlhbnRzIHRoZSBkaXJlY3RvcnkgYWxzbyByZWplY3RzLlxuICovXG5jb25zdCBPQlNJRElBTl9WQVJJQU5UUyA9IC9vYnNpfHNpZGlhbi9pO1xuXG4vKipcbiAqIEVTTGludCBydWxlIGVuZm9yY2luZyB0aGUgQ29tbXVuaXR5IGRpcmVjdG9yeSdzIGNvbnN0cmFpbnRzIG9uIGEgcGx1Z2luJ3MgYG1hbmlmZXN0Lmpzb25gIGBuYW1lYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hbmlmZXN0TmFtZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICBEb2N1bWVudChub2RlOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0T2JqZWN0ID0gZ2V0TWFuaWZlc3RPYmplY3Qobm9kZSk7XG5cbiAgICAgICAgaWYgKCFtYW5pZmVzdE9iamVjdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lbWJlciA9IGZpbmRNYW5pZmVzdE1lbWJlcihtYW5pZmVzdE9iamVjdCwgJ25hbWUnKTtcblxuICAgICAgICBpZiAoIW1lbWJlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWUgPSBnZXRTdHJpbmdWYWx1ZShtZW1iZXIudmFsdWUpO1xuXG4gICAgICAgIGlmIChuYW1lID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVwb3J0Tm9kZSA9IHRvUmVwb3J0Tm9kZShtZW1iZXIudmFsdWUpO1xuXG4gICAgICAgIGlmIChPQlNJRElBTl9WQVJJQU5UUy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0NPTlRBSU5TX09CU0lESUFOLFxuICAgICAgICAgICAgbm9kZTogcmVwb3J0Tm9kZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygncGx1Z2luJykpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfQ09OVEFJTlNfUExVR0lOLFxuICAgICAgICAgICAgbm9kZTogcmVwb3J0Tm9kZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBTExPV0VEX05BTUVfQ0hBUkFDVEVSUy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0lOVkFMSURfQ0hBUkFDVEVSUyxcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2UgdGhlIENvbW11bml0eSBkaXJlY3RvcnlcXCdzIGNvbnN0cmFpbnRzIG9uIGEgcGx1Z2luXFwncyBgbWFuaWZlc3QuanNvbmAgYG5hbWVgJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEX0NPTlRBSU5TX09CU0lESUFOXTogJ1RoZSBgbmFtZWAgbXVzdCBub3QgY29udGFpbiBgT2JzaWRpYW5gIG9yIGEgdmFyaWFudCBvZiBpdC4gSXQgaXMgaW1wbGllZCBieSB0aGUgY29udGV4dCBvZiB0aGUgcGx1Z2luIGRpcmVjdG9yeS4nLFxuICAgICAgW01FU1NBR0VfSURfQ09OVEFJTlNfUExVR0lOXTogJ1RoZSBgbmFtZWAgbXVzdCBub3QgY29udGFpbiBgUGx1Z2luYC4nLFxuICAgICAgW01FU1NBR0VfSURfSU5WQUxJRF9DSEFSQUNURVJTXTogJ1RoZSBgbmFtZWAgbXVzdCB1c2UgQmFzaWMgTGF0aW4gb25seSwgd2l0aCBoeXBoZW5zLCBwbHVzIHNpZ25zIGFuZCBwYXJlbnRoZXNlcyB0aGUgb25seSBwZXJtaXR0ZWQgcHVuY3R1YXRpb24uJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBLDhCQUtPO0FBS0EsTUFBTSwrQkFBK0I7QUFLckMsTUFBTSw2QkFBNkI7QUFLbkMsTUFBTSxnQ0FBZ0M7QUFNN0MsTUFBTSwwQkFBMEI7QUFLaEMsTUFBTSxvQkFBb0I7QUFLbkIsTUFBTSxlQUFnQztBQUFBLEVBQzNDLE9BQU8sU0FBUztBQUNkLFdBQU87QUFBQSxNQUNMLFNBQVMsTUFBcUI7QUFDNUIsY0FBTSxxQkFBaUIsMkNBQWtCLElBQUk7QUFFN0MsWUFBSSxDQUFDLGdCQUFnQjtBQUNuQjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLGFBQVMsNENBQW1CLGdCQUFnQixNQUFNO0FBRXhELFlBQUksQ0FBQyxRQUFRO0FBQ1g7QUFBQSxRQUNGO0FBRUEsY0FBTSxXQUFPLHdDQUFlLE9BQU8sS0FBSztBQUV4QyxZQUFJLFNBQVMsTUFBTTtBQUNqQjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLGlCQUFhLHNDQUFhLE9BQU8sS0FBSztBQUU1QyxZQUFJLGtCQUFrQixLQUFLLElBQUksR0FBRztBQUNoQyxrQkFBUSxPQUFPO0FBQUEsWUFDYixXQUFXO0FBQUEsWUFDWCxNQUFNO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUksS0FBSyxZQUFZLEVBQUUsU0FBUyxRQUFRLEdBQUc7QUFDekMsa0JBQVEsT0FBTztBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFFQSxZQUFJLENBQUMsd0JBQXdCLEtBQUssSUFBSSxHQUFHO0FBQ3ZDLGtCQUFRLE9BQU87QUFBQSxZQUNiLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyw0QkFBNEIsR0FBRztBQUFBLE1BQ2hDLENBQUMsMEJBQTBCLEdBQUc7QUFBQSxNQUM5QixDQUFDLDZCQUE2QixHQUFHO0FBQUEsSUFDbkM7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLElBQ1QsTUFBTTtBQUFBLEVBQ1I7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// <reference path="../../index.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* ESLint rule: manifest-name
|
|
6
|
+
*
|
|
7
|
+
* Enforces the Community directory's constraints on a plugin's `manifest.json` `name`: no `Obsidian` or
|
|
8
|
+
* its variants, no `Plugin`, and Basic Latin only with hyphens, plus signs and parentheses the sole
|
|
9
|
+
* permitted punctuation.
|
|
10
|
+
*
|
|
11
|
+
* Runs on the `@eslint/json` `json/json` language; see `manifest-helpers.ts` for why the AST is Momoa
|
|
12
|
+
* rather than ESTree.
|
|
13
|
+
*/
|
|
14
|
+
import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
|
|
15
|
+
/**
|
|
16
|
+
Message ID reported when the name contains `Obsidian` or one of its variants.
|
|
17
|
+
*/
|
|
18
|
+
export declare const MESSAGE_ID_CONTAINS_OBSIDIAN = "nameContainsObsidian";
|
|
19
|
+
/**
|
|
20
|
+
Message ID reported when the name contains `Plugin`.
|
|
21
|
+
*/
|
|
22
|
+
export declare const MESSAGE_ID_CONTAINS_PLUGIN = "nameContainsPlugin";
|
|
23
|
+
/**
|
|
24
|
+
Message ID reported when the name holds a character outside Basic Latin, or punctuation the directory rejects.
|
|
25
|
+
*/
|
|
26
|
+
export declare const MESSAGE_ID_INVALID_CHARACTERS = "nameInvalidCharacters";
|
|
27
|
+
/**
|
|
28
|
+
* ESLint rule enforcing the Community directory's constraints on a plugin's `manifest.json` `name`.
|
|
29
|
+
*/
|
|
30
|
+
export declare const manifestName: Rule.RuleModule;
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return "/";
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: "android"
|
|
20
|
+
};
|
|
21
|
+
const existingProcess = globalThis.process;
|
|
22
|
+
if (!existingProcess) {
|
|
23
|
+
globalThis.process = browserProcess;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (existingProcess.versions?.node) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const existingProcessRecord = existingProcess;
|
|
30
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
31
|
+
existingProcessRecord[key] ??= value;
|
|
32
|
+
}
|
|
33
|
+
existingProcessRecord["browser"] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function keepName($unknown) {
|
|
37
|
+
return $unknown;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
(function initCjs() {
|
|
41
|
+
const globalThisRecord = globalThis;
|
|
42
|
+
ensureDisposeSymbols();
|
|
43
|
+
globalThisRecord["__name"] ??= keepName;
|
|
44
|
+
globalThisRecord["__extractDefault"] ??= extractDefault;
|
|
45
|
+
ensureBrowserProcess();
|
|
46
|
+
function extractDefault(module) {
|
|
47
|
+
return module && module.__esModule && "default" in module ? module.default : module;
|
|
48
|
+
}
|
|
49
|
+
})();
|
|
50
|
+
})();
|
|
51
|
+
(function patchObsidianRequire() {
|
|
52
|
+
const originalRequire = require;
|
|
53
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
require = Object.assign(
|
|
58
|
+
(id) => requirePatched(id),
|
|
59
|
+
originalRequire,
|
|
60
|
+
{
|
|
61
|
+
__isPatched: true
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
function extractDefault(module) {
|
|
66
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
70
|
+
'@codemirror/autocomplete',
|
|
71
|
+
'@codemirror/collab',
|
|
72
|
+
'@codemirror/commands',
|
|
73
|
+
'@codemirror/language',
|
|
74
|
+
'@codemirror/lint',
|
|
75
|
+
'@codemirror/search',
|
|
76
|
+
'@codemirror/state',
|
|
77
|
+
'@codemirror/text',
|
|
78
|
+
'@codemirror/view',
|
|
79
|
+
'@lezer/common',
|
|
80
|
+
'@lezer/highlight',
|
|
81
|
+
'@lezer/lr',
|
|
82
|
+
'obsidian']
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
86
|
+
'@codemirror/closebrackets',
|
|
87
|
+
'@codemirror/comment',
|
|
88
|
+
'@codemirror/fold',
|
|
89
|
+
'@codemirror/gutter',
|
|
90
|
+
'@codemirror/highlight',
|
|
91
|
+
'@codemirror/history',
|
|
92
|
+
'@codemirror/matchbrackets',
|
|
93
|
+
'@codemirror/panel',
|
|
94
|
+
'@codemirror/rangeset',
|
|
95
|
+
'@codemirror/rectangular-selection',
|
|
96
|
+
'@codemirror/stream-parser',
|
|
97
|
+
'@codemirror/tooltip']
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
function requirePatched(id) {
|
|
101
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
102
|
+
return originalRequire?.(id);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
106
|
+
if (globalThis.app.isMobile) {
|
|
107
|
+
if (id === 'process' || id === 'node:process') {
|
|
108
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
109
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
110
|
+
|
|
111
|
+
return process;
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
const module = originalRequire?.(id);
|
|
115
|
+
if (module) {
|
|
116
|
+
return extractDefault(module);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
121
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
122
|
+
return {};
|
|
123
|
+
}
|
|
124
|
+
})();
|
|
125
|
+
|
|
126
|
+
"use strict";
|
|
127
|
+
var __defProp = Object.defineProperty;
|
|
128
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
129
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
130
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
131
|
+
var __export = (target, all) => {
|
|
132
|
+
for (var name in all)
|
|
133
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
134
|
+
};
|
|
135
|
+
var __copyProps = (to, from, except, desc) => {
|
|
136
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
137
|
+
for (let key of __getOwnPropNames(from))
|
|
138
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
139
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
140
|
+
}
|
|
141
|
+
return to;
|
|
142
|
+
};
|
|
143
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
144
|
+
var manifest_schema_exports = {};
|
|
145
|
+
__export(manifest_schema_exports, {
|
|
146
|
+
MESSAGE_ID_DISALLOWED_KEY: () => MESSAGE_ID_DISALLOWED_KEY,
|
|
147
|
+
MESSAGE_ID_DUPLICATE_KEY: () => MESSAGE_ID_DUPLICATE_KEY,
|
|
148
|
+
MESSAGE_ID_EMPTY_FUNDING_URL: () => MESSAGE_ID_EMPTY_FUNDING_URL,
|
|
149
|
+
MESSAGE_ID_INVALID_FUNDING_URL: () => MESSAGE_ID_INVALID_FUNDING_URL,
|
|
150
|
+
MESSAGE_ID_INVALID_TYPE: () => MESSAGE_ID_INVALID_TYPE,
|
|
151
|
+
MESSAGE_ID_MISSING_KEY: () => MESSAGE_ID_MISSING_KEY,
|
|
152
|
+
MESSAGE_ID_MUST_BE_ROOT_OBJECT: () => MESSAGE_ID_MUST_BE_ROOT_OBJECT,
|
|
153
|
+
manifestSchema: () => manifestSchema
|
|
154
|
+
});
|
|
155
|
+
module.exports = __toCommonJS(manifest_schema_exports);
|
|
156
|
+
var import_manifest_helpers = require('./manifest-helpers.cjs');
|
|
157
|
+
const MESSAGE_ID_DISALLOWED_KEY = "disallowedKey";
|
|
158
|
+
const MESSAGE_ID_DUPLICATE_KEY = "duplicateKey";
|
|
159
|
+
const MESSAGE_ID_EMPTY_FUNDING_URL = "emptyFundingUrl";
|
|
160
|
+
const MESSAGE_ID_INVALID_TYPE = "invalidType";
|
|
161
|
+
const MESSAGE_ID_INVALID_FUNDING_URL = "invalidFundingUrl";
|
|
162
|
+
const MESSAGE_ID_MISSING_KEY = "missingKey";
|
|
163
|
+
const MESSAGE_ID_MUST_BE_ROOT_OBJECT = "mustBeRootObject";
|
|
164
|
+
const ALWAYS_REQUIRED_KEYS = ["author", "description", "id", "isDesktopOnly", "name", "version"];
|
|
165
|
+
const KEY_NODE_TYPES = /* @__PURE__ */ new Map([
|
|
166
|
+
["author", [import_manifest_helpers.JSON_NODE_TYPE_STRING]],
|
|
167
|
+
["authorUrl", [import_manifest_helpers.JSON_NODE_TYPE_STRING]],
|
|
168
|
+
["description", [import_manifest_helpers.JSON_NODE_TYPE_STRING]],
|
|
169
|
+
["fundingUrl", [import_manifest_helpers.JSON_NODE_TYPE_OBJECT, import_manifest_helpers.JSON_NODE_TYPE_STRING]],
|
|
170
|
+
["id", [import_manifest_helpers.JSON_NODE_TYPE_STRING]],
|
|
171
|
+
["isDesktopOnly", [import_manifest_helpers.JSON_NODE_TYPE_BOOLEAN]],
|
|
172
|
+
["minAppVersion", [import_manifest_helpers.JSON_NODE_TYPE_STRING]],
|
|
173
|
+
["name", [import_manifest_helpers.JSON_NODE_TYPE_STRING]],
|
|
174
|
+
["version", [import_manifest_helpers.JSON_NODE_TYPE_STRING]]
|
|
175
|
+
]);
|
|
176
|
+
const manifestSchema = {
|
|
177
|
+
create(context) {
|
|
178
|
+
return {
|
|
179
|
+
Document(node) {
|
|
180
|
+
const manifestObject = (0, import_manifest_helpers.getManifestObject)(node);
|
|
181
|
+
if (!manifestObject) {
|
|
182
|
+
context.report({
|
|
183
|
+
messageId: MESSAGE_ID_MUST_BE_ROOT_OBJECT,
|
|
184
|
+
node: (0, import_manifest_helpers.toReportNode)(node)
|
|
185
|
+
});
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
reportDuplicateKeys({ context, manifestObject });
|
|
189
|
+
reportMissingKeys({ context, manifestObject });
|
|
190
|
+
reportKeyValues({ context, manifestObject });
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
},
|
|
194
|
+
meta: {
|
|
195
|
+
docs: {
|
|
196
|
+
description: "Validate the structure of a plugin's root `manifest.json`"
|
|
197
|
+
},
|
|
198
|
+
messages: {
|
|
199
|
+
[MESSAGE_ID_DISALLOWED_KEY]: "The `{{ key }}` property is not allowed in the manifest.",
|
|
200
|
+
[MESSAGE_ID_DUPLICATE_KEY]: "The `{{ key }}` property is defined more than once.",
|
|
201
|
+
[MESSAGE_ID_EMPTY_FUNDING_URL]: "The `fundingUrl` property cannot be empty. Remove it instead when no donations are accepted.",
|
|
202
|
+
[MESSAGE_ID_INVALID_FUNDING_URL]: "The `fundingUrl` object must only contain string values.",
|
|
203
|
+
[MESSAGE_ID_INVALID_TYPE]: "The `{{ key }}` property must be of type `{{ expectedType }}`, but was `{{ actualType }}`.",
|
|
204
|
+
[MESSAGE_ID_MISSING_KEY]: "The manifest is missing the required `{{ key }}` property.",
|
|
205
|
+
[MESSAGE_ID_MUST_BE_ROOT_OBJECT]: "The manifest must be a single JSON object."
|
|
206
|
+
},
|
|
207
|
+
schema: [],
|
|
208
|
+
type: "problem"
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
function reportDuplicateKeys(params) {
|
|
212
|
+
const { context, manifestObject } = params;
|
|
213
|
+
const seenKeys = /* @__PURE__ */ new Set();
|
|
214
|
+
for (const member of manifestObject.members) {
|
|
215
|
+
const key = (0, import_manifest_helpers.getMemberKey)(member);
|
|
216
|
+
if (seenKeys.has(key)) {
|
|
217
|
+
context.report({
|
|
218
|
+
data: { key },
|
|
219
|
+
messageId: MESSAGE_ID_DUPLICATE_KEY,
|
|
220
|
+
node: (0, import_manifest_helpers.toReportNode)(member.name)
|
|
221
|
+
});
|
|
222
|
+
} else {
|
|
223
|
+
seenKeys.add(key);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function reportFundingUrl(params) {
|
|
228
|
+
const { context, member } = params;
|
|
229
|
+
const stringValue = (0, import_manifest_helpers.getStringValue)(member.value);
|
|
230
|
+
if (stringValue !== null) {
|
|
231
|
+
if (stringValue === "") {
|
|
232
|
+
context.report({
|
|
233
|
+
messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
|
|
234
|
+
node: (0, import_manifest_helpers.toReportNode)(member.value)
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
const fundingObject = member.value;
|
|
240
|
+
if (fundingObject.members.length === 0) {
|
|
241
|
+
context.report({
|
|
242
|
+
messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
|
|
243
|
+
node: (0, import_manifest_helpers.toReportNode)(fundingObject)
|
|
244
|
+
});
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
for (const fundingMember of fundingObject.members) {
|
|
248
|
+
const fundingValue = (0, import_manifest_helpers.getStringValue)(fundingMember.value);
|
|
249
|
+
if (fundingValue === null) {
|
|
250
|
+
context.report({
|
|
251
|
+
messageId: MESSAGE_ID_INVALID_FUNDING_URL,
|
|
252
|
+
node: (0, import_manifest_helpers.toReportNode)(fundingMember.value)
|
|
253
|
+
});
|
|
254
|
+
} else if (fundingValue === "") {
|
|
255
|
+
context.report({
|
|
256
|
+
messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
|
|
257
|
+
node: (0, import_manifest_helpers.toReportNode)(fundingMember.value)
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function reportKeyValues(params) {
|
|
263
|
+
const { context, manifestObject } = params;
|
|
264
|
+
for (const member of manifestObject.members) {
|
|
265
|
+
const key = (0, import_manifest_helpers.getMemberKey)(member);
|
|
266
|
+
const expectedNodeTypes = KEY_NODE_TYPES.get(key);
|
|
267
|
+
if (!expectedNodeTypes) {
|
|
268
|
+
context.report({
|
|
269
|
+
data: { key },
|
|
270
|
+
messageId: MESSAGE_ID_DISALLOWED_KEY,
|
|
271
|
+
node: (0, import_manifest_helpers.toReportNode)(member.name)
|
|
272
|
+
});
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
if (!expectedNodeTypes.includes(member.value.type)) {
|
|
276
|
+
context.report({
|
|
277
|
+
data: {
|
|
278
|
+
actualType: member.value.type,
|
|
279
|
+
expectedType: expectedNodeTypes.join(" or "),
|
|
280
|
+
key
|
|
281
|
+
},
|
|
282
|
+
messageId: MESSAGE_ID_INVALID_TYPE,
|
|
283
|
+
node: (0, import_manifest_helpers.toReportNode)(member.value)
|
|
284
|
+
});
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
if (key === "fundingUrl") {
|
|
288
|
+
reportFundingUrl({ context, member });
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function reportMissingKeys(params) {
|
|
293
|
+
const { context, manifestObject } = params;
|
|
294
|
+
const requiredKeys = [...ALWAYS_REQUIRED_KEYS, ...(0, import_manifest_helpers.getManifestStringValue)(manifestObject, "version") === import_manifest_helpers.UNRELEASED_VERSION ? [] : ["minAppVersion"]];
|
|
295
|
+
for (const key of requiredKeys) {
|
|
296
|
+
if (!(0, import_manifest_helpers.findManifestMember)(manifestObject, key)) {
|
|
297
|
+
context.report({
|
|
298
|
+
data: { key },
|
|
299
|
+
messageId: MESSAGE_ID_MISSING_KEY,
|
|
300
|
+
node: (0, import_manifest_helpers.toReportNode)(manifestObject)
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
306
|
+
0 && (module.exports = {
|
|
307
|
+
MESSAGE_ID_DISALLOWED_KEY,
|
|
308
|
+
MESSAGE_ID_DUPLICATE_KEY,
|
|
309
|
+
MESSAGE_ID_EMPTY_FUNDING_URL,
|
|
310
|
+
MESSAGE_ID_INVALID_FUNDING_URL,
|
|
311
|
+
MESSAGE_ID_INVALID_TYPE,
|
|
312
|
+
MESSAGE_ID_MISSING_KEY,
|
|
313
|
+
MESSAGE_ID_MUST_BE_ROOT_OBJECT,
|
|
314
|
+
manifestSchema
|
|
315
|
+
});
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL21hbmlmZXN0LXNjaGVtYS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBtYW5pZmVzdC1zY2hlbWFcbiAqXG4gKiBWYWxpZGF0ZXMgdGhlIHN0cnVjdHVyZSBvZiBhIHBsdWdpbidzIHJvb3QgYG1hbmlmZXN0Lmpzb25gIC0gdGhlIHJlcXVpcmVkIGtleXMsIHRoZSBrZXlzIHRoZSBDb21tdW5pdHlcbiAqIGRpcmVjdG9yeSBkb2VzIG5vdCBhbGxvdywgZHVwbGljYXRlIGtleXMsIGVhY2ggdmFsdWUncyB0eXBlLCBhbmQgdGhlIHNoYXBlIG9mIGBmdW5kaW5nVXJsYC5cbiAqXG4gKiBSdW5zIG9uIHRoZSBgQGVzbGludC9qc29uYCBganNvbi9qc29uYCBsYW5ndWFnZTsgc2VlIGBtYW5pZmVzdC1oZWxwZXJzLnRzYCBmb3Igd2h5IHRoZSBBU1QgaXMgTW9tb2FcbiAqIHJhdGhlciB0aGFuIEVTVHJlZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEpzb25NZW1iZXJOb2RlLFxuICBKc29uT2JqZWN0Tm9kZVxufSBmcm9tICcuL21hbmlmZXN0LWhlbHBlcnMudHMnO1xuXG5pbXBvcnQge1xuICBmaW5kTWFuaWZlc3RNZW1iZXIsXG4gIGdldE1hbmlmZXN0T2JqZWN0LFxuICBnZXRNYW5pZmVzdFN0cmluZ1ZhbHVlLFxuICBnZXRNZW1iZXJLZXksXG4gIGdldFN0cmluZ1ZhbHVlLFxuICBKU09OX05PREVfVFlQRV9CT09MRUFOLFxuICBKU09OX05PREVfVFlQRV9PQkpFQ1QsXG4gIEpTT05fTk9ERV9UWVBFX1NUUklORyxcbiAgdG9SZXBvcnROb2RlLFxuICBVTlJFTEVBU0VEX1ZFUlNJT05cbn0gZnJvbSAnLi9tYW5pZmVzdC1oZWxwZXJzLnRzJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSBrZXkgdGhlIENvbW11bml0eSBkaXJlY3RvcnkgZG9lcyBub3QgYWxsb3cgaXMgcHJlc2VudC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfRElTQUxMT1dFRF9LRVkgPSAnZGlzYWxsb3dlZEtleSc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIHRoZSBzYW1lIGtleSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9EVVBMSUNBVEVfS0VZID0gJ2R1cGxpY2F0ZUtleSc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGBmdW5kaW5nVXJsYCBpcyBhbiBlbXB0eSBzdHJpbmcsIGFuIGVtcHR5IG9iamVjdCwgb3IgYW4gb2JqZWN0IHdpdGggYW4gZW1wdHkgdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0VNUFRZX0ZVTkRJTkdfVVJMID0gJ2VtcHR5RnVuZGluZ1VybCc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgdmFsdWUgaGFzIHRoZSB3cm9uZyB0eXBlLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9JTlZBTElEX1RZUEUgPSAnaW52YWxpZFR5cGUnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIGBmdW5kaW5nVXJsYCBvYmplY3QgaG9sZHMgYSBub24tc3RyaW5nIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9JTlZBTElEX0ZVTkRJTkdfVVJMID0gJ2ludmFsaWRGdW5kaW5nVXJsJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSByZXF1aXJlZCBrZXkgaXMgbWlzc2luZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfTUlTU0lOR19LRVkgPSAnbWlzc2luZ0tleSc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIHRoZSBtYW5pZmVzdCdzIHRvcC1sZXZlbCB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9NVVNUX0JFX1JPT1RfT0JKRUNUID0gJ211c3RCZVJvb3RPYmplY3QnO1xuXG4vKipcblRoZSBrZXlzIGV2ZXJ5IG1hbmlmZXN0IG11c3QgY2FycnksIHdoZXRoZXIgb3Igbm90IHRoZSBwbHVnaW4gaGFzIGJlZW4gcmVsZWFzZWQuXG4gKi9cbmNvbnN0IEFMV0FZU19SRVFVSVJFRF9LRVlTID0gWydhdXRob3InLCAnZGVzY3JpcHRpb24nLCAnaWQnLCAnaXNEZXNrdG9wT25seScsICduYW1lJywgJ3ZlcnNpb24nXTtcblxuLyoqXG5UaGUgTW9tb2Egbm9kZSB0eXBlIGVhY2ggYWxsb3dlZCBrZXkncyB2YWx1ZSBtYXkgaGF2ZS4gQSBrZXkgYWJzZW50IGZyb20gdGhpcyBtYXAgaXMgbm90IGFsbG93ZWQgYXQgYWxsLlxuICovXG5jb25zdCBLRVlfTk9ERV9UWVBFUyA9IG5ldyBNYXA8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4oW1xuICBbJ2F1dGhvcicsIFtKU09OX05PREVfVFlQRV9TVFJJTkddXSxcbiAgWydhdXRob3JVcmwnLCBbSlNPTl9OT0RFX1RZUEVfU1RSSU5HXV0sXG4gIFsnZGVzY3JpcHRpb24nLCBbSlNPTl9OT0RFX1RZUEVfU1RSSU5HXV0sXG4gIFsnZnVuZGluZ1VybCcsIFtKU09OX05PREVfVFlQRV9PQkpFQ1QsIEpTT05fTk9ERV9UWVBFX1NUUklOR11dLFxuICBbJ2lkJywgW0pTT05fTk9ERV9UWVBFX1NUUklOR11dLFxuICBbJ2lzRGVza3RvcE9ubHknLCBbSlNPTl9OT0RFX1RZUEVfQk9PTEVBTl1dLFxuICBbJ21pbkFwcFZlcnNpb24nLCBbSlNPTl9OT0RFX1RZUEVfU1RSSU5HXV0sXG4gIFsnbmFtZScsIFtKU09OX05PREVfVFlQRV9TVFJJTkddXSxcbiAgWyd2ZXJzaW9uJywgW0pTT05fTk9ERV9UWVBFX1NUUklOR11dXG5dKTtcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSB2YWxpZGF0aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgYSBwbHVnaW4ncyByb290IGBtYW5pZmVzdC5qc29uYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hbmlmZXN0U2NoZW1hOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIERvY3VtZW50KG5vZGU6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3RPYmplY3QgPSBnZXRNYW5pZmVzdE9iamVjdChub2RlKTtcblxuICAgICAgICBpZiAoIW1hbmlmZXN0T2JqZWN0KSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX01VU1RfQkVfUk9PVF9PQkpFQ1QsXG4gICAgICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUobm9kZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXBvcnREdXBsaWNhdGVLZXlzKHsgY29udGV4dCwgbWFuaWZlc3RPYmplY3QgfSk7XG4gICAgICAgIHJlcG9ydE1pc3NpbmdLZXlzKHsgY29udGV4dCwgbWFuaWZlc3RPYmplY3QgfSk7XG4gICAgICAgIHJlcG9ydEtleVZhbHVlcyh7IGNvbnRleHQsIG1hbmlmZXN0T2JqZWN0IH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRlIHRoZSBzdHJ1Y3R1cmUgb2YgYSBwbHVnaW5cXCdzIHJvb3QgYG1hbmlmZXN0Lmpzb25gJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEX0RJU0FMTE9XRURfS0VZXTogJ1RoZSBge3sga2V5IH19YCBwcm9wZXJ0eSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgbWFuaWZlc3QuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0RVUExJQ0FURV9LRVldOiAnVGhlIGB7eyBrZXkgfX1gIHByb3BlcnR5IGlzIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0VNUFRZX0ZVTkRJTkdfVVJMXTogJ1RoZSBgZnVuZGluZ1VybGAgcHJvcGVydHkgY2Fubm90IGJlIGVtcHR5LiBSZW1vdmUgaXQgaW5zdGVhZCB3aGVuIG5vIGRvbmF0aW9ucyBhcmUgYWNjZXB0ZWQuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0lOVkFMSURfRlVORElOR19VUkxdOiAnVGhlIGBmdW5kaW5nVXJsYCBvYmplY3QgbXVzdCBvbmx5IGNvbnRhaW4gc3RyaW5nIHZhbHVlcy4nLFxuICAgICAgW01FU1NBR0VfSURfSU5WQUxJRF9UWVBFXTogJ1RoZSBge3sga2V5IH19YCBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYHt7IGV4cGVjdGVkVHlwZSB9fWAsIGJ1dCB3YXMgYHt7IGFjdHVhbFR5cGUgfX1gLicsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX0tFWV06ICdUaGUgbWFuaWZlc3QgaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgYHt7IGtleSB9fWAgcHJvcGVydHkuJyxcbiAgICAgIFtNRVNTQUdFX0lEX01VU1RfQkVfUk9PVF9PQkpFQ1RdOiAnVGhlIG1hbmlmZXN0IG11c3QgYmUgYSBzaW5nbGUgSlNPTiBvYmplY3QuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVwb3J0RnVuZGluZ1VybH0uXG4gKi9cbmludGVyZmFjZSBSZXBvcnRGdW5kaW5nVXJsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dDtcblxuICAvKipcbiAgICogVGhlIGBmdW5kaW5nVXJsYCBtZW1iZXIuXG4gICAqL1xuICByZWFkb25seSBtZW1iZXI6IEpzb25NZW1iZXJOb2RlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSBtYW5pZmVzdCByZXBvcnRpbmcgaGVscGVycy5cbiAqL1xuaW50ZXJmYWNlIFJlcG9ydFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtYW5pZmVzdCdzIHJvb3Qgb2JqZWN0IG5vZGUuXG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdE9iamVjdDogSnNvbk9iamVjdE5vZGU7XG59XG5cbi8qKlxuICogUmVwb3J0cyBldmVyeSBrZXkgdGhhdCBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlcG9ydFBhcmFtc30uXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydER1cGxpY2F0ZUtleXMocGFyYW1zOiBSZXBvcnRQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjb250ZXh0LCBtYW5pZmVzdE9iamVjdCB9ID0gcGFyYW1zO1xuICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgbWVtYmVyIG9mIG1hbmlmZXN0T2JqZWN0Lm1lbWJlcnMpIHtcbiAgICBjb25zdCBrZXkgPSBnZXRNZW1iZXJLZXkobWVtYmVyKTtcblxuICAgIGlmIChzZWVuS2V5cy5oYXMoa2V5KSkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBkYXRhOiB7IGtleSB9LFxuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfRFVQTElDQVRFX0tFWSxcbiAgICAgICAgbm9kZTogdG9SZXBvcnROb2RlKG1lbWJlci5uYW1lKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZW5LZXlzLmFkZChrZXkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgdGhlIHdheXMgYSBgZnVuZGluZ1VybGAgY2FuIGJlIGVtcHR5IG9yIGhvbGQgYSBub24tc3RyaW5nIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlcG9ydEZ1bmRpbmdVcmxQYXJhbXN9LlxuICovXG5mdW5jdGlvbiByZXBvcnRGdW5kaW5nVXJsKHBhcmFtczogUmVwb3J0RnVuZGluZ1VybFBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGNvbnRleHQsIG1lbWJlciB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gZ2V0U3RyaW5nVmFsdWUobWVtYmVyLnZhbHVlKTtcblxuICBpZiAoc3RyaW5nVmFsdWUgIT09IG51bGwpIHtcbiAgICBpZiAoc3RyaW5nVmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9FTVBUWV9GVU5ESU5HX1VSTCxcbiAgICAgICAgbm9kZTogdG9SZXBvcnROb2RlKG1lbWJlci52YWx1ZSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZ1bmRpbmdPYmplY3QgPSBtZW1iZXIudmFsdWUgYXMgSnNvbk9iamVjdE5vZGU7XG5cbiAgaWYgKGZ1bmRpbmdPYmplY3QubWVtYmVycy5sZW5ndGggPT09IDApIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfRU1QVFlfRlVORElOR19VUkwsXG4gICAgICBub2RlOiB0b1JlcG9ydE5vZGUoZnVuZGluZ09iamVjdClcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IGZ1bmRpbmdNZW1iZXIgb2YgZnVuZGluZ09iamVjdC5tZW1iZXJzKSB7XG4gICAgY29uc3QgZnVuZGluZ1ZhbHVlID0gZ2V0U3RyaW5nVmFsdWUoZnVuZGluZ01lbWJlci52YWx1ZSk7XG5cbiAgICBpZiAoZnVuZGluZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9JTlZBTElEX0ZVTkRJTkdfVVJMLFxuICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUoZnVuZGluZ01lbWJlci52YWx1ZSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZnVuZGluZ1ZhbHVlID09PSAnJykge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfRU1QVFlfRlVORElOR19VUkwsXG4gICAgICAgIG5vZGU6IHRvUmVwb3J0Tm9kZShmdW5kaW5nTWVtYmVyLnZhbHVlKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBldmVyeSBrZXkgdGhhdCBpcyBub3QgYWxsb3dlZCwgYW5kIGV2ZXJ5IGFsbG93ZWQga2V5IHdob3NlIHZhbHVlIGhhcyB0aGUgd3JvbmcgdHlwZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXBvcnRQYXJhbXN9LlxuICovXG5mdW5jdGlvbiByZXBvcnRLZXlWYWx1ZXMocGFyYW1zOiBSZXBvcnRQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjb250ZXh0LCBtYW5pZmVzdE9iamVjdCB9ID0gcGFyYW1zO1xuXG4gIGZvciAoY29uc3QgbWVtYmVyIG9mIG1hbmlmZXN0T2JqZWN0Lm1lbWJlcnMpIHtcbiAgICBjb25zdCBrZXkgPSBnZXRNZW1iZXJLZXkobWVtYmVyKTtcbiAgICBjb25zdCBleHBlY3RlZE5vZGVUeXBlcyA9IEtFWV9OT0RFX1RZUEVTLmdldChrZXkpO1xuXG4gICAgaWYgKCFleHBlY3RlZE5vZGVUeXBlcykge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBkYXRhOiB7IGtleSB9LFxuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfRElTQUxMT1dFRF9LRVksXG4gICAgICAgIG5vZGU6IHRvUmVwb3J0Tm9kZShtZW1iZXIubmFtZSlcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFleHBlY3RlZE5vZGVUeXBlcy5pbmNsdWRlcyhtZW1iZXIudmFsdWUudHlwZSkpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjdHVhbFR5cGU6IG1lbWJlci52YWx1ZS50eXBlLFxuICAgICAgICAgIGV4cGVjdGVkVHlwZTogZXhwZWN0ZWROb2RlVHlwZXMuam9pbignIG9yICcpLFxuICAgICAgICAgIGtleVxuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfSU5WQUxJRF9UWVBFLFxuICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUobWVtYmVyLnZhbHVlKVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZnVuZGluZ1VybCcpIHtcbiAgICAgIHJlcG9ydEZ1bmRpbmdVcmwoeyBjb250ZXh0LCBtZW1iZXIgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBldmVyeSByZXF1aXJlZCBrZXkgdGhlIG1hbmlmZXN0IGlzIG1pc3NpbmcuXG4gKlxuICogYG1pbkFwcFZlcnNpb25gIGlzIHJlcXVpcmVkIG9ubHkgb25jZSB0aGUgcGx1Z2luIGhhcyBiZWVuIHJlbGVhc2VkLiBgdXBkYXRlVmVyc2lvbkluRmlsZXNGb3JQbHVnaW5gXG4gKiB3cml0ZXMgaXQgYXQgcmVsZWFzZSB0aW1lLCBzbyBhIHJlcG8gc3RpbGwgYXQgdmVyc2lvbiBgMC4wLjBgIGxlZ2l0aW1hdGVseSBoYXMgbm9uZSBhbmQgbXVzdCBub3QgYmVcbiAqIHJlcG9ydGVkIGZvciBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXBvcnRQYXJhbXN9LlxuICovXG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nS2V5cyhwYXJhbXM6IFJlcG9ydFBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGNvbnRleHQsIG1hbmlmZXN0T2JqZWN0IH0gPSBwYXJhbXM7XG4gIGNvbnN0IHJlcXVpcmVkS2V5cyA9IFsuLi5BTFdBWVNfUkVRVUlSRURfS0VZUywgLi4uKGdldE1hbmlmZXN0U3RyaW5nVmFsdWUobWFuaWZlc3RPYmplY3QsICd2ZXJzaW9uJykgPT09IFVOUkVMRUFTRURfVkVSU0lPTiA/IFtdIDogWydtaW5BcHBWZXJzaW9uJ10pXTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiByZXF1aXJlZEtleXMpIHtcbiAgICBpZiAoIWZpbmRNYW5pZmVzdE1lbWJlcihtYW5pZmVzdE9iamVjdCwga2V5KSkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBkYXRhOiB7IGtleSB9LFxuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfTUlTU0lOR19LRVksXG4gICAgICAgIG5vZGU6IHRvUmVwb3J0Tm9kZShtYW5pZmVzdE9iamVjdClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtQkEsOEJBV087QUFLQSxNQUFNLDRCQUE0QjtBQUtsQyxNQUFNLDJCQUEyQjtBQUtqQyxNQUFNLCtCQUErQjtBQUtyQyxNQUFNLDBCQUEwQjtBQUtoQyxNQUFNLGlDQUFpQztBQUt2QyxNQUFNLHlCQUF5QjtBQUsvQixNQUFNLGlDQUFpQztBQUs5QyxNQUFNLHVCQUF1QixDQUFDLFVBQVUsZUFBZSxNQUFNLGlCQUFpQixRQUFR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
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/// <reference path="../../index.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* ESLint rule: manifest-schema
|
|
6
|
+
*
|
|
7
|
+
* Validates the structure of a plugin's root `manifest.json` - the required keys, the keys the Community
|
|
8
|
+
* directory does not allow, duplicate keys, each value's type, and the shape of `fundingUrl`.
|
|
9
|
+
*
|
|
10
|
+
* Runs on the `@eslint/json` `json/json` language; see `manifest-helpers.ts` for why the AST is Momoa
|
|
11
|
+
* rather than ESTree.
|
|
12
|
+
*/
|
|
13
|
+
import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
|
|
14
|
+
/**
|
|
15
|
+
Message ID reported when a key the Community directory does not allow is present.
|
|
16
|
+
*/
|
|
17
|
+
export declare const MESSAGE_ID_DISALLOWED_KEY = "disallowedKey";
|
|
18
|
+
/**
|
|
19
|
+
Message ID reported when the same key appears more than once.
|
|
20
|
+
*/
|
|
21
|
+
export declare const MESSAGE_ID_DUPLICATE_KEY = "duplicateKey";
|
|
22
|
+
/**
|
|
23
|
+
Message ID reported when `fundingUrl` is an empty string, an empty object, or an object with an empty value.
|
|
24
|
+
*/
|
|
25
|
+
export declare const MESSAGE_ID_EMPTY_FUNDING_URL = "emptyFundingUrl";
|
|
26
|
+
/**
|
|
27
|
+
Message ID reported when a value has the wrong type.
|
|
28
|
+
*/
|
|
29
|
+
export declare const MESSAGE_ID_INVALID_TYPE = "invalidType";
|
|
30
|
+
/**
|
|
31
|
+
Message ID reported when a `fundingUrl` object holds a non-string value.
|
|
32
|
+
*/
|
|
33
|
+
export declare const MESSAGE_ID_INVALID_FUNDING_URL = "invalidFundingUrl";
|
|
34
|
+
/**
|
|
35
|
+
Message ID reported when a required key is missing.
|
|
36
|
+
*/
|
|
37
|
+
export declare const MESSAGE_ID_MISSING_KEY = "missingKey";
|
|
38
|
+
/**
|
|
39
|
+
Message ID reported when the manifest's top-level value is not an object.
|
|
40
|
+
*/
|
|
41
|
+
export declare const MESSAGE_ID_MUST_BE_ROOT_OBJECT = "mustBeRootObject";
|
|
42
|
+
/**
|
|
43
|
+
* ESLint rule validating the structure of a plugin's root `manifest.json`.
|
|
44
|
+
*/
|
|
45
|
+
export declare const manifestSchema: Rule.RuleModule;
|