@mnaoumov/obsidian-dev-toolkit 1.0.0 → 2.0.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/README.md +9 -1
- package/dist/demo-vault-helper/main.js +678 -18
- package/dist/integration-test-plugin/main.js +12075 -3087
- package/dist/integration-test-plugin/manifest.json +2 -2
- package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +6 -38
- package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/dependency.cjs +5 -37
- package/dist/lib/cjs/bundlers/esbuild-impl/dependency.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +5 -37
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +7 -66
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +7 -39
- package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +5 -37
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.cjs +5 -37
- package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild.cjs +1 -60
- package/dist/lib/cjs/bundlers/esbuild.d.cts +1 -1
- package/dist/lib/cjs/bundlers/index.cjs +3 -62
- package/dist/lib/cjs/bundlers/index.d.cts +1 -1
- package/dist/lib/cjs/demo-vault-app-json.cjs +5 -37
- package/dist/lib/cjs/demo-vault-app-json.d.cts +1 -1
- package/dist/lib/cjs/demo-vault-buttons.cjs +6 -38
- package/dist/lib/cjs/demo-vault-buttons.d.cts +8 -8
- package/dist/lib/cjs/demo-vault-coverage.cjs +7 -38
- package/dist/lib/cjs/demo-vault-coverage.d.cts +1 -1
- package/dist/lib/cjs/demo-vault.cjs +6 -38
- package/dist/lib/cjs/demo-vault.d.cts +1 -1
- package/dist/lib/cjs/formatters/dprint.cjs +5 -37
- package/dist/lib/cjs/formatters/dprint.d.cts +1 -1
- package/dist/lib/cjs/formatters/index.cjs +2 -61
- package/dist/lib/cjs/formatters/index.d.cts +1 -1
- package/dist/lib/cjs/index.cjs +12 -71
- package/dist/lib/cjs/integration-test-setup.cjs +1 -60
- package/dist/lib/cjs/integration-test-setup.d.cts +5 -5
- package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +6 -38
- package/dist/lib/cjs/integration-test-vitest-global-setup.d.cts +7 -7
- package/dist/lib/cjs/jest-setup.cjs +5 -37
- package/dist/lib/cjs/jest-setup.d.cts +1 -1
- package/dist/lib/cjs/library-references.d.cts +2 -0
- package/dist/lib/cjs/linters/eslint-config.cjs +71 -49
- package/dist/lib/cjs/linters/eslint-config.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +26 -73
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +6 -2
- package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +1 -60
- package/dist/lib/cjs/linters/eslint-rules/manifest-description.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.cjs +6 -38
- package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/manifest-id.cjs +1 -60
- package/dist/lib/cjs/linters/eslint-rules/manifest-id.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/manifest-name.cjs +1 -60
- package/dist/lib/cjs/linters/eslint-rules/manifest-name.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/manifest-schema.cjs +1 -60
- package/dist/lib/cjs/linters/eslint-rules/manifest-schema.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.cjs +240 -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 +5 -37
- package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +5 -37
- package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-toolkit-plugin.cjs +136 -0
- package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-toolkit-plugin.d.cts +16 -0
- package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.cjs +217 -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 +169 -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 +5 -37
- package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.cjs +287 -0
- package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint.cjs +5 -37
- package/dist/lib/cjs/linters/eslint.d.cts +1 -1
- package/dist/lib/cjs/linters/index.cjs +17 -67
- package/dist/lib/cjs/linters/index.d.cts +4 -1
- package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +152 -0
- package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +12 -0
- package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +118 -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 +200 -0
- package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.d.cts +32 -0
- package/dist/lib/cjs/linters/markdownlint.cjs +5 -37
- package/dist/lib/cjs/linters/markdownlint.d.cts +1 -1
- package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +1 -60
- package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.d.cts +1 -1
- package/dist/lib/cjs/linters/plugin-names.cjs +203 -0
- package/dist/lib/cjs/linters/plugin-names.d.cts +81 -0
- package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +1 -60
- package/dist/lib/cjs/obsidian-plugin-repo-paths.d.cts +1 -1
- package/dist/lib/cjs/setup.cjs +5 -37
- package/dist/lib/cjs/setup.d.cts +1 -1
- package/dist/lib/cjs/templates.cjs +5 -37
- package/dist/lib/cjs/templates.d.cts +1 -1
- package/dist/lib/cjs/test-runners/index.cjs +4 -63
- package/dist/lib/cjs/test-runners/index.d.cts +1 -1
- package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +12 -44
- package/dist/lib/cjs/test-runners/integration-test-plugin.d.cts +5 -5
- package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +1 -60
- package/dist/lib/cjs/test-runners/performance-eval-cap.d.cts +1 -1
- package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +5 -37
- package/dist/lib/cjs/test-runners/stale-build-global-setup.d.cts +1 -1
- package/dist/lib/cjs/test-runners/vitest-config.cjs +9 -41
- package/dist/lib/cjs/test-runners/vitest-config.d.cts +2 -3
- package/dist/lib/cjs/version.cjs +5 -37
- package/dist/lib/cjs/version.d.cts +1 -1
- package/dist/lib/cjs/vitest-setup.cjs +5 -37
- package/dist/lib/cjs/vitest-setup.d.cts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +5 -22
- package/dist/lib/esm/bundlers/esbuild-impl/dependency.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/dependency.mjs +5 -22
- package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +5 -22
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +1 -45
- package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +5 -22
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +5 -22
- package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.mjs +5 -22
- package/dist/lib/esm/bundlers/esbuild.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild.mjs +1 -45
- package/dist/lib/esm/bundlers/index.d.mts +1 -1
- package/dist/lib/esm/bundlers/index.mjs +1 -45
- package/dist/lib/esm/demo-vault-app-json.d.mts +1 -1
- package/dist/lib/esm/demo-vault-app-json.mjs +5 -22
- package/dist/lib/esm/demo-vault-buttons.d.mts +8 -8
- package/dist/lib/esm/demo-vault-buttons.mjs +5 -22
- package/dist/lib/esm/demo-vault-coverage.d.mts +1 -1
- package/dist/lib/esm/demo-vault-coverage.mjs +7 -23
- package/dist/lib/esm/demo-vault.d.mts +1 -1
- package/dist/lib/esm/demo-vault.mjs +6 -23
- package/dist/lib/esm/formatters/dprint.d.mts +1 -1
- package/dist/lib/esm/formatters/dprint.mjs +5 -22
- package/dist/lib/esm/formatters/index.d.mts +1 -1
- package/dist/lib/esm/formatters/index.mjs +1 -45
- package/dist/lib/esm/index.mjs +1 -45
- package/dist/lib/esm/integration-test-setup.d.mts +5 -5
- package/dist/lib/esm/integration-test-setup.mjs +1 -45
- package/dist/lib/esm/integration-test-vitest-global-setup.d.mts +7 -7
- package/dist/lib/esm/integration-test-vitest-global-setup.mjs +7 -24
- package/dist/lib/esm/jest-setup.d.mts +1 -1
- package/dist/lib/esm/jest-setup.mjs +5 -22
- package/dist/lib/esm/library-references.d.mts +2 -0
- package/dist/lib/esm/linters/eslint-config.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-config.mjs +70 -33
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +6 -2
- package/dist/lib/esm/linters/eslint-rules/index.mjs +12 -48
- package/dist/lib/esm/linters/eslint-rules/manifest-description.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/manifest-description.mjs +1 -45
- package/dist/lib/esm/linters/eslint-rules/manifest-helpers.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/manifest-helpers.mjs +5 -22
- package/dist/lib/esm/linters/eslint-rules/manifest-id.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/manifest-id.mjs +1 -45
- package/dist/lib/esm/linters/eslint-rules/manifest-name.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/manifest-name.mjs +1 -45
- package/dist/lib/esm/linters/eslint-rules/manifest-schema.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/manifest-schema.mjs +1 -45
- 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 +141 -0
- package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +5 -22
- package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.mjs +5 -22
- package/dist/lib/esm/linters/eslint-rules/obsidian-dev-toolkit-plugin.d.mts +16 -0
- package/dist/lib/esm/linters/eslint-rules/obsidian-dev-toolkit-plugin.mjs +37 -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 +121 -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 +72 -0
- package/dist/lib/esm/linters/eslint-rules/require-component-suffix.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/require-component-suffix.mjs +5 -22
- 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 +188 -0
- package/dist/lib/esm/linters/eslint.d.mts +1 -1
- package/dist/lib/esm/linters/eslint.mjs +5 -22
- package/dist/lib/esm/linters/index.d.mts +4 -1
- package/dist/lib/esm/linters/index.mjs +8 -46
- package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +12 -0
- package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +57 -0
- package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
- package/dist/lib/esm/linters/markdownlint-rules/index.mjs +10 -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 +94 -0
- package/dist/lib/esm/linters/markdownlint.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint.mjs +5 -22
- package/dist/lib/esm/linters/obsidianmd-rule-custom-message.d.mts +1 -1
- package/dist/lib/esm/linters/obsidianmd-rule-custom-message.mjs +1 -45
- package/dist/lib/esm/linters/plugin-names.d.mts +81 -0
- package/dist/lib/esm/linters/plugin-names.mjs +105 -0
- package/dist/lib/esm/obsidian-plugin-repo-paths.d.mts +1 -1
- package/dist/lib/esm/obsidian-plugin-repo-paths.mjs +1 -45
- package/dist/lib/esm/setup.d.mts +1 -1
- package/dist/lib/esm/setup.mjs +5 -22
- package/dist/lib/esm/templates.d.mts +1 -1
- package/dist/lib/esm/templates.mjs +5 -22
- package/dist/lib/esm/test-runners/index.d.mts +1 -1
- package/dist/lib/esm/test-runners/index.mjs +1 -45
- package/dist/lib/esm/test-runners/integration-test-plugin.d.mts +5 -5
- package/dist/lib/esm/test-runners/integration-test-plugin.mjs +11 -28
- package/dist/lib/esm/test-runners/performance-eval-cap.d.mts +1 -1
- package/dist/lib/esm/test-runners/performance-eval-cap.mjs +1 -45
- package/dist/lib/esm/test-runners/stale-build-global-setup.d.mts +1 -1
- package/dist/lib/esm/test-runners/stale-build-global-setup.mjs +5 -22
- package/dist/lib/esm/test-runners/vitest-config.d.mts +2 -3
- package/dist/lib/esm/test-runners/vitest-config.mjs +8 -25
- package/dist/lib/esm/version.d.mts +1 -1
- package/dist/lib/esm/version.mjs +5 -22
- package/dist/lib/esm/vitest-setup.d.mts +1 -1
- package/dist/lib/esm/vitest-setup.mjs +5 -22
- package/dist/templates/scripts/markdownlint-cli2-config.ts +2 -2
- package/linters/eslint-rules/no-local-obsidian-internals/package.json +6 -0
- package/linters/eslint-rules/{obsidian-dev-utils-plugin → obsidian-dev-toolkit-plugin}/package.json +3 -3
- 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-plugin-api-contract-schemas/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/plugin-names/package.json +6 -0
- package/package.json +86 -25
- package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +0 -186
- package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +0 -13
- package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +0 -13
- package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +0 -73
|
@@ -0,0 +1,188 @@
|
|
|
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
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
import { toTSESTreeNode } from "@mnaoumov/typescript-dev-toolkit/linters/eslint-rules/ts-estree-node";
|
|
34
|
+
import { AST_NODE_TYPES } from "@typescript-eslint/utils";
|
|
35
|
+
const MESSAGE_ID = "requirePluginApiContractSchemas";
|
|
36
|
+
const CONTRACT_TYPE_NAMES = /* @__PURE__ */ new Set(["PluginApiContract", "TypedPluginApiContract"]);
|
|
37
|
+
const CONTRACT_VARIABLE_NAME_PATTERN = /_API_CONTRACT(?:_V\d+)?$/;
|
|
38
|
+
const CONTRACT_PROPERTY_NAME = "contract";
|
|
39
|
+
const REQUIRED_SCHEMA_NAMES = ["input", "output"];
|
|
40
|
+
const requirePluginApiContractSchemas = {
|
|
41
|
+
create(context) {
|
|
42
|
+
const checkedContracts = /* @__PURE__ */ new Set();
|
|
43
|
+
return {
|
|
44
|
+
"Property"(node) {
|
|
45
|
+
const propertyNode = toTSESTreeNode(node);
|
|
46
|
+
if (propertyNode.parent.type === AST_NODE_TYPES.ObjectExpression && !propertyNode.computed && readKeyName(propertyNode.key) === CONTRACT_PROPERTY_NAME) {
|
|
47
|
+
reportContractEntries(propertyNode.value);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"TSAsExpression, TSSatisfiesExpression"(node) {
|
|
51
|
+
const expressionNode = toTSESTreeNode(node);
|
|
52
|
+
if (isContractType(expressionNode.typeAnnotation)) {
|
|
53
|
+
reportContractEntries(expressionNode.expression);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"VariableDeclarator"(node) {
|
|
57
|
+
const declaratorNode = toTSESTreeNode(node);
|
|
58
|
+
if (declaratorNode.id.type !== AST_NODE_TYPES.Identifier || !declaratorNode.init) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const typeNode = declaratorNode.id.typeAnnotation?.typeAnnotation;
|
|
62
|
+
if (CONTRACT_VARIABLE_NAME_PATTERN.test(declaratorNode.id.name) || typeNode !== void 0 && isContractType(typeNode)) {
|
|
63
|
+
reportContractEntries(declaratorNode.init);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
function reportContractEntries(node) {
|
|
68
|
+
const contractNode = resolveObjectLiteral(node, context);
|
|
69
|
+
if (!contractNode || checkedContracts.has(contractNode)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
checkedContracts.add(contractNode);
|
|
73
|
+
for (const entry of contractNode.properties) {
|
|
74
|
+
if (entry.type !== AST_NODE_TYPES.Property) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const missingSchemaNames = readMissingSchemaNames(entry.value, context);
|
|
78
|
+
if (missingSchemaNames.length === 0) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
context.report({
|
|
82
|
+
data: {
|
|
83
|
+
method: (entry.computed ? null : readKeyName(entry.key)) ?? "[computed]",
|
|
84
|
+
missing: missingSchemaNames.map((name) => `\`${name}\``).join(" and ")
|
|
85
|
+
},
|
|
86
|
+
loc: entry.key.loc,
|
|
87
|
+
messageId: MESSAGE_ID
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
meta: {
|
|
93
|
+
docs: {
|
|
94
|
+
description: "Require an `input` and an `output` schema on every method entry of a plugin API contract"
|
|
95
|
+
},
|
|
96
|
+
messages: {
|
|
97
|
+
[MESSAGE_ID]: "The plugin API contract entry `{{ method }}` declares no {{ missing }} schema. Give every method entry both an `input` schema over its argument list and an `output` schema over its awaited return value."
|
|
98
|
+
},
|
|
99
|
+
schema: [],
|
|
100
|
+
type: "problem"
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
function findVariable(scope, name) {
|
|
104
|
+
let currentScope = scope;
|
|
105
|
+
while (currentScope) {
|
|
106
|
+
const variable = currentScope.set.get(name);
|
|
107
|
+
if (variable) {
|
|
108
|
+
return variable;
|
|
109
|
+
}
|
|
110
|
+
currentScope = currentScope.upper;
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
function isContractType(typeNode) {
|
|
115
|
+
if (typeNode.type !== AST_NODE_TYPES.TSTypeReference) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
const typeName = typeNode.typeName;
|
|
119
|
+
return typeName.type === AST_NODE_TYPES.Identifier ? CONTRACT_TYPE_NAMES.has(typeName.name) : typeName.type === AST_NODE_TYPES.TSQualifiedName && CONTRACT_TYPE_NAMES.has(typeName.right.name);
|
|
120
|
+
}
|
|
121
|
+
function readKeyName(key) {
|
|
122
|
+
if (key.type === AST_NODE_TYPES.Identifier) {
|
|
123
|
+
return key.name;
|
|
124
|
+
}
|
|
125
|
+
return key.type === AST_NODE_TYPES.Literal && typeof key.value === "string" ? key.value : null;
|
|
126
|
+
}
|
|
127
|
+
function readMissingSchemaNames(node, context) {
|
|
128
|
+
const entryNode = resolveObjectLiteral(node, context);
|
|
129
|
+
if (!entryNode) {
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
const keyNames = /* @__PURE__ */ new Set();
|
|
133
|
+
for (const member of entryNode.properties) {
|
|
134
|
+
if (member.type !== AST_NODE_TYPES.Property) {
|
|
135
|
+
return [];
|
|
136
|
+
}
|
|
137
|
+
const keyName = member.computed ? null : readKeyName(member.key);
|
|
138
|
+
if (keyName !== null) {
|
|
139
|
+
keyNames.add(keyName);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return REQUIRED_SCHEMA_NAMES.filter((name) => !keyNames.has(name));
|
|
143
|
+
}
|
|
144
|
+
function resolveConstInit(node, context) {
|
|
145
|
+
const variable = findVariable(context.sourceCode.getScope(node), node.name);
|
|
146
|
+
const definition = variable?.defs.length === 1 ? variable.defs[0] : void 0;
|
|
147
|
+
if (definition?.type !== "Variable") {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
const declaratorNode = toTSESTreeNode(definition.node);
|
|
151
|
+
const declarationNode = declaratorNode.parent;
|
|
152
|
+
return declarationNode.kind === "const" ? declaratorNode.init : null;
|
|
153
|
+
}
|
|
154
|
+
function resolveObjectLiteral(node, context) {
|
|
155
|
+
const visitedNodes = /* @__PURE__ */ new Set();
|
|
156
|
+
let currentNode = node;
|
|
157
|
+
while (!visitedNodes.has(currentNode)) {
|
|
158
|
+
visitedNodes.add(currentNode);
|
|
159
|
+
switch (currentNode.type) {
|
|
160
|
+
case AST_NODE_TYPES.Identifier: {
|
|
161
|
+
const initNode = resolveConstInit(currentNode, context);
|
|
162
|
+
if (!initNode) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
currentNode = initNode;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
case AST_NODE_TYPES.ObjectExpression: {
|
|
169
|
+
return currentNode;
|
|
170
|
+
}
|
|
171
|
+
case AST_NODE_TYPES.TSAsExpression:
|
|
172
|
+
case AST_NODE_TYPES.TSNonNullExpression:
|
|
173
|
+
case AST_NODE_TYPES.TSSatisfiesExpression: {
|
|
174
|
+
currentNode = currentNode.expression;
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
default: {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
export {
|
|
185
|
+
MESSAGE_ID,
|
|
186
|
+
requirePluginApiContractSchemas
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9yZXF1aXJlLXBsdWdpbi1hcGktY29udHJhY3Qtc2NoZW1hcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHJlcXVpcmUtcGx1Z2luLWFwaS1jb250cmFjdC1zY2hlbWFzXG4gKlxuICogUmVwb3J0cyBhIG1ldGhvZCBlbnRyeSBvZiBhIHBsdWdpbiBBUEkgY29udHJhY3QgdGhhdCBsYWNrcyBhbiBgaW5wdXRgIG9yIGFuIGBvdXRwdXRgIHNjaGVtYS5cbiAqXG4gKiBBIHR5cGVkIGBQbHVnaW5BcGlDb250cmFjdDxNeUFwaT5gIGFscmVhZHkgcmVmdXNlcyBzdWNoIGFuIGVudHJ5IGF0IGNvbXBpbGUgdGltZS4gVGhlIHVudHlwZWQgZGVmYXVsdCwgdGhlXG4gKiBzdHJ1Y3R1cmFsbHkgdHlwZWQgY29udHJhY3RzIGEgcHJvdmlkZXIgc2hpcHMgYmVzaWRlIGl0cyBgYXBpLmQudHNgLCBhbmQgZXZlcnkgcmVwb3NpdG9yeSBzdGlsbCBvblxuICogYG9ic2lkaWFuLWRldi11dGlsc2AgZ2V0IG5vIHN1Y2ggY2hlY2ssIHNvIGEgYHt9YCBlbnRyeSB0aGVyZSBjb21waWxlcywgZGVjbGFyZXMgb25seSB0aGF0IHRoZSBtZXRob2QgZXhpc3RzLCBhbmRcbiAqIHZhbGlkYXRlcyBub3RoaW5nLiBUaGlzIHJ1bGUgY2xvc2VzIHRoYXQgZ2FwIGZvciBldmVyeSBjb250cmFjdCBpdCBjYW4gcmVjb2duaXplLlxuICpcbiAqIEFuIG9iamVjdCBsaXRlcmFsIGlzIHJlYWQgYXMgYSBjb250cmFjdCB3aGVuIGl0IGlzOlxuICpcbiAqIC0gdGhlIGluaXRpYWxpemVyIG9mIGEgdmFyaWFibGUgdHlwZWQgYFBsdWdpbkFwaUNvbnRyYWN0YCAob3IgYFR5cGVkUGx1Z2luQXBpQ29udHJhY3RgKTtcbiAqIC0gdGhlIG9wZXJhbmQgb2YgYHNhdGlzZmllcyBQbHVnaW5BcGlDb250cmFjdGAgb3IgYGFzIFBsdWdpbkFwaUNvbnRyYWN0YDtcbiAqIC0gdGhlIHZhbHVlIG9mIGEgYGNvbnRyYWN0YCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QgbGl0ZXJhbCwgYXMgcGFzc2VkIHRvIGBwdWJsaXNoUGx1Z2luQXBpYCwgYHdhdGNoUGx1Z2luQXBpYCBvclxuICogICBgZmluZFBsdWdpbkFwaWA7XG4gKiAtIHRoZSBpbml0aWFsaXplciBvZiBhIHZhcmlhYmxlIG5hbWVkIGAqX0FQSV9DT05UUkFDVGAsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBgX1Y8bj5gIHZlcnNpb24gc3VmZml4LlxuICpcbiAqIEVhY2ggb2YgaXRzIGVudHJpZXMgaXMgYSBtZXRob2QgZW50cnkuIEFuIGVudHJ5LCBvciBhIGNvbnRyYWN0LCB3cml0dGVuIGFzIHRoZSBuYW1lIG9mIGEgYGNvbnN0YCBpcyBmb2xsb3dlZCB0b1xuICogdGhhdCBjb25zdGFudCdzIG9iamVjdCBsaXRlcmFsLCBzbyBhIG1ldGhvZCBjb250cmFjdCBzaGFyZWQgYnkgc2V2ZXJhbCBlbnRyaWVzIGlzIGNoZWNrZWQgb25jZSBwZXIgZW50cnkuXG4gKlxuICogTm90IGF0dGVtcHRlZDogYW4gZW50cnkgYnVpbHQgYnkgYSBjYWxsLCByZWFkIGZyb20gYW5vdGhlciBtb2R1bGUsIG9yIGNhcnJ5aW5nIGEgc3ByZWFkIGNhbm5vdCBiZSByZWFkXG4gKiBzdGF0aWNhbGx5LCBzbyBpdCBpcyBza2lwcGVkLiBUaGUgcnVsZSB1bmRlci1yZXBvcnRzIHJhdGhlciB0aGFuIGd1ZXNzaW5nLlxuICovXG5pbXBvcnQgdHlwZSB7IFRTRVNUcmVlIH0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHtcbiAgUnVsZSxcbiAgU2NvcGVcbn0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9saW50ZXJzL2VzbGludC1ydWxlcy90cy1lc3RyZWUtbm9kZSc7XG5pbXBvcnQgeyBBU1RfTk9ERV9UWVBFUyB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCBmb3IgYSBtZXRob2QgZW50cnkgdGhhdCBsYWNrcyBhIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAncmVxdWlyZVBsdWdpbkFwaUNvbnRyYWN0U2NoZW1hcyc7XG5cbi8qKlxuICogVGhlIHR5cGUgbmFtZXMgdGhhdCBtYXJrIGFuIG9iamVjdCBsaXRlcmFsIGFzIGEgcGx1Z2luIEFQSSBjb250cmFjdC5cbiAqL1xuY29uc3QgQ09OVFJBQ1RfVFlQRV9OQU1FUyA9IG5ldyBTZXQoWydQbHVnaW5BcGlDb250cmFjdCcsICdUeXBlZFBsdWdpbkFwaUNvbnRyYWN0J10pO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIGEgdmFyaWFibGUgaG9sZGluZyBhIHBsdWdpbiBBUEkgY29udHJhY3QsIHN1Y2ggYXMgYE1ZX0FQSV9DT05UUkFDVGAgb3IgYE1ZX0FQSV9DT05UUkFDVF9WMmAuXG4gKi9cbmNvbnN0IENPTlRSQUNUX1ZBUklBQkxFX05BTUVfUEFUVEVSTiA9IC9fQVBJX0NPTlRSQUNUKD86X1ZcXGQrKT8kLztcblxuLyoqXG4gKiBUaGUgcHJvcGVydHkgYSBjb250cmFjdCBpcyBwYXNzZWQgdW5kZXIuXG4gKi9cbmNvbnN0IENPTlRSQUNUX1BST1BFUlRZX05BTUUgPSAnY29udHJhY3QnO1xuXG4vKipcbiAqIFRoZSBzY2hlbWFzIGV2ZXJ5IG1ldGhvZCBlbnRyeSBtdXN0IGRlY2xhcmUuXG4gKi9cbmNvbnN0IFJFUVVJUkVEX1NDSEVNQV9OQU1FUyA9IFsnaW5wdXQnLCAnb3V0cHV0J10gYXMgY29uc3Q7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcmVxdWlyaW5nIGJvdGggYW4gYGlucHV0YCBhbmQgYW4gYG91dHB1dGAgc2NoZW1hIG9uIGV2ZXJ5IG1ldGhvZCBlbnRyeSBvZiBhIHBsdWdpbiBBUEkgY29udHJhY3QuXG4gKi9cbmV4cG9ydCBjb25zdCByZXF1aXJlUGx1Z2luQXBpQ29udHJhY3RTY2hlbWFzOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgY2hlY2tlZENvbnRyYWN0cyA9IG5ldyBTZXQ8VFNFU1RyZWUuT2JqZWN0RXhwcmVzc2lvbj4oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnUHJvcGVydHknKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eU5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5Qcm9wZXJ0eTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3BlcnR5Tm9kZS5wYXJlbnQudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuT2JqZWN0RXhwcmVzc2lvbiAmJiAhcHJvcGVydHlOb2RlLmNvbXB1dGVkXG4gICAgICAgICAgJiYgcmVhZEtleU5hbWUocHJvcGVydHlOb2RlLmtleSkgPT09IENPTlRSQUNUX1BST1BFUlRZX05BTUVcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwb3J0Q29udHJhY3RFbnRyaWVzKHByb3BlcnR5Tm9kZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnVFNBc0V4cHJlc3Npb24sIFRTU2F0aXNmaWVzRXhwcmVzc2lvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25Ob2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuVFNBc0V4cHJlc3Npb24gfCBUU0VTVHJlZS5UU1NhdGlzZmllc0V4cHJlc3Npb247XG4gICAgICAgIGlmIChpc0NvbnRyYWN0VHlwZShleHByZXNzaW9uTm9kZS50eXBlQW5ub3RhdGlvbikpIHtcbiAgICAgICAgICByZXBvcnRDb250cmFjdEVudHJpZXMoZXhwcmVzc2lvbk5vZGUuZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnVmFyaWFibGVEZWNsYXJhdG9yJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRvck5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5WYXJpYWJsZURlY2xhcmF0b3I7XG4gICAgICAgIGlmIChkZWNsYXJhdG9yTm9kZS5pZC50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5JZGVudGlmaWVyIHx8ICFkZWNsYXJhdG9yTm9kZS5pbml0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBkZWNsYXJhdG9yTm9kZS5pZC50eXBlQW5ub3RhdGlvbj8udHlwZUFubm90YXRpb247XG4gICAgICAgIGlmIChDT05UUkFDVF9WQVJJQUJMRV9OQU1FX1BBVFRFUk4udGVzdChkZWNsYXJhdG9yTm9kZS5pZC5uYW1lKSB8fCAodHlwZU5vZGUgIT09IHVuZGVmaW5lZCAmJiBpc0NvbnRyYWN0VHlwZSh0eXBlTm9kZSkpKSB7XG4gICAgICAgICAgcmVwb3J0Q29udHJhY3RFbnRyaWVzKGRlY2xhcmF0b3JOb2RlLmluaXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlcG9ydENvbnRyYWN0RW50cmllcyhub2RlOiBUU0VTVHJlZS5Ob2RlKTogdm9pZCB7XG4gICAgICBjb25zdCBjb250cmFjdE5vZGUgPSByZXNvbHZlT2JqZWN0TGl0ZXJhbChub2RlLCBjb250ZXh0KTtcbiAgICAgIGlmICghY29udHJhY3ROb2RlIHx8IGNoZWNrZWRDb250cmFjdHMuaGFzKGNvbnRyYWN0Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjaGVja2VkQ29udHJhY3RzLmFkZChjb250cmFjdE5vZGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNvbnRyYWN0Tm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChlbnRyeS50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5Qcm9wZXJ0eSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWlzc2luZ1NjaGVtYU5hbWVzID0gcmVhZE1pc3NpbmdTY2hlbWFOYW1lcyhlbnRyeS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChtaXNzaW5nU2NoZW1hTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbWV0aG9kOiAoZW50cnkuY29tcHV0ZWQgPyBudWxsIDogcmVhZEtleU5hbWUoZW50cnkua2V5KSkgPz8gJ1tjb21wdXRlZF0nLFxuICAgICAgICAgICAgbWlzc2luZzogbWlzc2luZ1NjaGVtYU5hbWVzLm1hcCgobmFtZSkgPT4gYFxcYCR7bmFtZX1cXGBgKS5qb2luKCcgYW5kICcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsb2M6IGVudHJ5LmtleS5sb2MsXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZSBhbiBgaW5wdXRgIGFuZCBhbiBgb3V0cHV0YCBzY2hlbWEgb24gZXZlcnkgbWV0aG9kIGVudHJ5IG9mIGEgcGx1Z2luIEFQSSBjb250cmFjdCdcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdUaGUgcGx1Z2luIEFQSSBjb250cmFjdCBlbnRyeSBge3sgbWV0aG9kIH19YCBkZWNsYXJlcyBubyB7eyBtaXNzaW5nIH19IHNjaGVtYS4gR2l2ZSBldmVyeSBtZXRob2QgZW50cnkgYm90aCBhbiBgaW5wdXRgIHNjaGVtYSBvdmVyIGl0cyBhcmd1bWVudCBsaXN0IGFuZCBhbiBgb3V0cHV0YCBzY2hlbWEgb3ZlciBpdHMgYXdhaXRlZCByZXR1cm4gdmFsdWUuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcblxuLyoqXG4gKiBGaW5kcyBhIHZhcmlhYmxlIGJ5IG5hbWUsIHdhbGtpbmcgb3V0d2FyZHMgZnJvbSB0aGUgZ2l2ZW4gc2NvcGUuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIHRvIHN0YXJ0IGZyb20uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB2YXJpYWJsZSdzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgdmFyaWFibGUsIG9yIGBudWxsYCB3aGVuIG5vdGhpbmcgaW4gc2NvcGUgZGVjbGFyZXMgdGhhdCBuYW1lLlxuICovXG5mdW5jdGlvbiBmaW5kVmFyaWFibGUoc2NvcGU6IFNjb3BlLlNjb3BlLCBuYW1lOiBzdHJpbmcpOiBudWxsIHwgU2NvcGUuVmFyaWFibGUge1xuICBsZXQgY3VycmVudFNjb3BlOiBudWxsIHwgU2NvcGUuU2NvcGUgPSBzY29wZTtcblxuICB3aGlsZSAoY3VycmVudFNjb3BlKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSBjdXJyZW50U2NvcGUuc2V0LmdldChuYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICB9XG4gICAgY3VycmVudFNjb3BlID0gY3VycmVudFNjb3BlLnVwcGVyO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSB0eXBlIG5hbWVzIGEgcGx1Z2luIEFQSSBjb250cmFjdCwgZGlyZWN0bHkgb3IgdGhyb3VnaCBhIG5hbWVzcGFjZS5cbiAqXG4gKiBAcGFyYW0gdHlwZU5vZGUgLSBUaGUgdHlwZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSB0eXBlIGlzIGEgY29udHJhY3QgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNDb250cmFjdFR5cGUodHlwZU5vZGU6IFRTRVNUcmVlLlR5cGVOb2RlKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlTm9kZS50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5UU1R5cGVSZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLnR5cGVOYW1lO1xuICByZXR1cm4gdHlwZU5hbWUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllciA/IENPTlRSQUNUX1RZUEVfTkFNRVMuaGFzKHR5cGVOYW1lLm5hbWUpIDogdHlwZU5hbWUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVFNRdWFsaWZpZWROYW1lICYmIENPTlRSQUNUX1RZUEVfTkFNRVMuaGFzKHR5cGVOYW1lLnJpZ2h0Lm5hbWUpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBuYW1lIG9mIGEgcHJvcGVydHkga2V5IHdyaXR0ZW4gYXMgYW4gaWRlbnRpZmllciBvciBhIHN0cmluZyBsaXRlcmFsLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUgcHJvcGVydHkga2V5LlxuICogQHJldHVybnMgVGhlIG5hbWUsIG9yIGBudWxsYCBmb3IgYW55IG90aGVyIGtleS5cbiAqL1xuZnVuY3Rpb24gcmVhZEtleU5hbWUoa2V5OiBUU0VTVHJlZS5Ob2RlKTogbnVsbCB8IHN0cmluZyB7XG4gIGlmIChrZXkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllcikge1xuICAgIHJldHVybiBrZXkubmFtZTtcbiAgfVxuXG4gIHJldHVybiBrZXkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCAmJiB0eXBlb2Yga2V5LnZhbHVlID09PSAnc3RyaW5nJyA/IGtleS52YWx1ZSA6IG51bGw7XG59XG5cbi8qKlxuICogUmVhZHMgd2hpY2ggcmVxdWlyZWQgc2NoZW1hcyBhIG1ldGhvZCBlbnRyeSBsYWNrcy5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBlbnRyeSdzIHZhbHVlLlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgcnVsZSBjb250ZXh0LCB1c2VkIHRvIGZvbGxvdyBhIGNvbnN0YW50LlxuICogQHJldHVybnMgVGhlIG1pc3Npbmcgc2NoZW1hIG5hbWVzLCBlbXB0eSB3aGVuIG5vbmUgaXMgbWlzc2luZyBvciB0aGUgZW50cnkgY2Fubm90IGJlIHJlYWQgc3RhdGljYWxseS5cbiAqL1xuZnVuY3Rpb24gcmVhZE1pc3NpbmdTY2hlbWFOYW1lcyhub2RlOiBUU0VTVHJlZS5Ob2RlLCBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogc3RyaW5nW10ge1xuICBjb25zdCBlbnRyeU5vZGUgPSByZXNvbHZlT2JqZWN0TGl0ZXJhbChub2RlLCBjb250ZXh0KTtcbiAgaWYgKCFlbnRyeU5vZGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBrZXlOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBlbnRyeU5vZGUucHJvcGVydGllcykge1xuICAgIGlmIChtZW1iZXIudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuUHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlOYW1lID0gbWVtYmVyLmNvbXB1dGVkID8gbnVsbCA6IHJlYWRLZXlOYW1lKG1lbWJlci5rZXkpO1xuICAgIGlmIChrZXlOYW1lICE9PSBudWxsKSB7XG4gICAgICBrZXlOYW1lcy5hZGQoa2V5TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFJFUVVJUkVEX1NDSEVNQV9OQU1FUy5maWx0ZXIoKG5hbWUpID0+ICFrZXlOYW1lcy5oYXMobmFtZSkpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIGlkZW50aWZpZXIgdG8gdGhlIGluaXRpYWxpemVyIG9mIHRoZSBgY29uc3RgIGl0IG5hbWVzLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSBydWxlIGNvbnRleHQsIHVzZWQgdG8gcmVzb2x2ZSB0aGUgaWRlbnRpZmllciB0aHJvdWdoIHNjb3BlLlxuICogQHJldHVybnMgVGhlIGluaXRpYWxpemVyLCBvciBgbnVsbGAgd2hlbiB0aGUgaWRlbnRpZmllciBuYW1lcyBhbnl0aGluZyBlbHNlLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RJbml0KG5vZGU6IFRTRVNUcmVlLklkZW50aWZpZXIsIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBudWxsIHwgVFNFU1RyZWUuRXhwcmVzc2lvbiB7XG4gIGNvbnN0IHZhcmlhYmxlID0gZmluZFZhcmlhYmxlKGNvbnRleHQuc291cmNlQ29kZS5nZXRTY29wZShub2RlKSwgbm9kZS5uYW1lKTtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IHZhcmlhYmxlPy5kZWZzLmxlbmd0aCA9PT0gMSA/IHZhcmlhYmxlLmRlZnNbMF0gOiB1bmRlZmluZWQ7XG4gIGlmIChkZWZpbml0aW9uPy50eXBlICE9PSAnVmFyaWFibGUnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkZWNsYXJhdG9yTm9kZSA9IHRvVFNFU1RyZWVOb2RlKGRlZmluaXRpb24ubm9kZSkgYXMgVFNFU1RyZWUuVmFyaWFibGVEZWNsYXJhdG9yO1xuICBjb25zdCBkZWNsYXJhdGlvbk5vZGUgPSBkZWNsYXJhdG9yTm9kZS5wYXJlbnQ7XG4gIHJldHVybiBkZWNsYXJhdGlvbk5vZGUua2luZCA9PT0gJ2NvbnN0JyA/IGRlY2xhcmF0b3JOb2RlLmluaXQgOiBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIGV4cHJlc3Npb24gdG8gdGhlIG9iamVjdCBsaXRlcmFsIGl0IGlzLCBzdGVwcGluZyB0aHJvdWdoIGBhc2AgLyBgc2F0aXNmaWVzYCAvIGAhYCBhbmQgZm9sbG93aW5nIGFcbiAqIGBjb25zdGAgaXQgbmFtZXMuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJ1bGUgY29udGV4dCwgdXNlZCB0byByZXNvbHZlIGFuIGlkZW50aWZpZXIgdGhyb3VnaCBzY29wZS5cbiAqIEByZXR1cm5zIFRoZSBvYmplY3QgbGl0ZXJhbCwgb3IgYG51bGxgIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgbm90IG9uZSBzdGF0aWNhbGx5LlxuICovXG5mdW5jdGlvbiByZXNvbHZlT2JqZWN0TGl0ZXJhbChub2RlOiBUU0VTVHJlZS5Ob2RlLCBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogbnVsbCB8IFRTRVNUcmVlLk9iamVjdEV4cHJlc3Npb24ge1xuICBjb25zdCB2aXNpdGVkTm9kZXMgPSBuZXcgU2V0PFRTRVNUcmVlLk5vZGU+KCk7XG4gIGxldCBjdXJyZW50Tm9kZTogVFNFU1RyZWUuTm9kZSA9IG5vZGU7XG5cbiAgd2hpbGUgKCF2aXNpdGVkTm9kZXMuaGFzKGN1cnJlbnROb2RlKSkge1xuICAgIHZpc2l0ZWROb2Rlcy5hZGQoY3VycmVudE5vZGUpO1xuXG4gICAgc3dpdGNoIChjdXJyZW50Tm9kZS50eXBlKSB7XG4gICAgICBjYXNlIEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXI6IHtcbiAgICAgICAgY29uc3QgaW5pdE5vZGUgPSByZXNvbHZlQ29uc3RJbml0KGN1cnJlbnROb2RlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFpbml0Tm9kZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnROb2RlID0gaW5pdE5vZGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBBU1RfTk9ERV9UWVBFUy5PYmplY3RFeHByZXNzaW9uOiB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgQVNUX05PREVfVFlQRVMuVFNBc0V4cHJlc3Npb246XG4gICAgICBjYXNlIEFTVF9OT0RFX1RZUEVTLlRTTm9uTnVsbEV4cHJlc3Npb246XG4gICAgICBjYXNlIEFTVF9OT0RFX1RZUEVTLlRTU2F0aXNmaWVzRXhwcmVzc2lvbjoge1xuICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmV4cHJlc3Npb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQ0EsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxzQkFBc0I7QUFLeEIsTUFBTSxhQUFhO0FBSzFCLE1BQU0sc0JBQXNCLG9CQUFJLElBQUksQ0FBQyxxQkFBcUIsd0JBQXdCLENBQUM7QUFLbkYsTUFBTSxpQ0FBaUM7QUFLdkMsTUFBTSx5QkFBeUI7QUFLL0IsTUFBTSx3QkFBd0IsQ0FBQyxTQUFTLFFBQVE7QUFLekMsTUFBTSxrQ0FBbUQ7QUFBQSxFQUM5RCxPQUFPLFNBQVM7QUFDZCxVQUFNLG1CQUFtQixvQkFBSSxJQUErQjtBQUU1RCxXQUFPO0FBQUEsTUFDTCxXQUFXLE1BQXVCO0FBQ2hDLGNBQU0sZUFBZSxlQUFlLElBQUk7QUFDeEMsWUFDRSxhQUFhLE9BQU8sU0FBUyxlQUFlLG9CQUFvQixDQUFDLGFBQWEsWUFDM0UsWUFBWSxhQUFhLEdBQUcsTUFBTSx3QkFDckM7QUFDQSxnQ0FBc0IsYUFBYSxLQUFLO0FBQUEsUUFDMUM7QUFBQSxNQUNGO0FBQUEsTUFDQSx3Q0FBd0MsTUFBdUI7QUFDN0QsY0FBTSxpQkFBaUIsZUFBZSxJQUFJO0FBQzFDLFlBQUksZUFBZSxlQUFlLGNBQWMsR0FBRztBQUNqRCxnQ0FBc0IsZUFBZSxVQUFVO0FBQUEsUUFDakQ7QUFBQSxNQUNGO0FBQUEsTUFDQSxxQkFBcUIsTUFBdUI7QUFDMUMsY0FBTSxpQkFBaUIsZUFBZSxJQUFJO0FBQzFDLFlBQUksZUFBZSxHQUFHLFNBQVMsZUFBZSxjQUFjLENBQUMs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
|
|
@@ -2,49 +2,32 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
5
|
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
6
|
function ensureBrowserProcess() {
|
|
13
7
|
const browserProcess = {
|
|
14
8
|
browser: true,
|
|
15
9
|
cwd() {
|
|
16
|
-
return
|
|
10
|
+
return "/";
|
|
17
11
|
},
|
|
18
12
|
env: {},
|
|
19
|
-
platform:
|
|
13
|
+
platform: "android"
|
|
20
14
|
};
|
|
21
|
-
|
|
22
|
-
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
15
|
const existingProcess = globalThis.process;
|
|
24
|
-
|
|
25
16
|
if (!existingProcess) {
|
|
26
|
-
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
17
|
globalThis.process = browserProcess;
|
|
28
18
|
return;
|
|
29
19
|
}
|
|
30
|
-
|
|
31
20
|
if (existingProcess.versions?.node) {
|
|
32
21
|
return;
|
|
33
22
|
}
|
|
34
|
-
|
|
35
23
|
const existingProcessRecord = existingProcess;
|
|
36
|
-
|
|
37
24
|
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
25
|
existingProcessRecord[key] ??= value;
|
|
39
26
|
}
|
|
40
|
-
|
|
41
|
-
existingProcessRecord['browser'] = true;
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
42
28
|
}
|
|
43
29
|
|
|
44
|
-
(
|
|
45
|
-
ensureDisposeSymbols();
|
|
46
|
-
ensureBrowserProcess();
|
|
47
|
-
})();
|
|
30
|
+
ensureBrowserProcess();
|
|
48
31
|
})();
|
|
49
32
|
|
|
50
33
|
import { lint as lintGeneric } from "@mnaoumov/typescript-dev-toolkit/linters/eslint";
|
|
@@ -57,4 +40,4 @@ async function lint(options) {
|
|
|
57
40
|
export {
|
|
58
41
|
lint
|
|
59
42
|
};
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludHMgYW4gT2JzaWRpYW4gcGx1Z2luIHdpdGggRVNMaW50OiB0aGUgZ2VuZXJpYyBydW5uZXIgZnJvbSBgQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXRgLCB3aGljaCBjb3BpZXNcbiAqIHRoaXMgcGFja2FnZSdzIGBlc2xpbnQuY29uZmlnLm10c2AgdGVtcGxhdGUgaW50byBhIHByb2plY3QgdGhhdCBoYXMgbm8gY29uZmlndXJhdGlvbiB5ZXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMaW50T3B0aW9ucyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvZXNsaW50JztcblxuaW1wb3J0IHsgbGludCBhcyBsaW50R2VuZXJpYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvZXNsaW50JztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L3JlcG8tcGF0aHMnO1xuXG5pbXBvcnQgeyBnZXRUZW1wbGF0ZUZpbGVQYXRoIH0gZnJvbSAnLi4vdGVtcGxhdGVzLnRzJztcblxuLyoqXG4gKiBMaW50cyB0aGUgcHJvamVjdCB3aXRoIEVTTGludC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbGludEdlbmVyaWMoeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGg6IGdldFRlbXBsYXRlRmlsZVBhdGgoUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyksIC4uLm9wdGlvbnMgfSk7XG59XG5leHBvcnQgeyB0eXBlIExpbnRPcHRpb25zIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbGludGVycy9lc2xpbnQnO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLFNBQVMsUUFBUSxtQkFBbUI7QUFDcEMsU0FBUyxpQkFBaUI7QUFFMUIsU0FBUywyQkFBMkI7QUFVcEMsZUFBaUM7QUFIakMsZUFBc0IsS0FBSyxTQUFzQztBQUMvRCxRQUFNLFlBQVksRUFBRSx1QkFBdUIsb0JBQW9CLFVBQVUsZUFBZSxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQ3pHOyIsIm5hbWVzIjpbXX0=
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
/// <reference path="../
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
2
|
export * as 'eslint-config' from './eslint-config.mjs';
|
|
3
3
|
export * as 'eslint-rules' from './eslint-rules/index.mjs';
|
|
4
4
|
export * as 'eslint' from './eslint.mjs';
|
|
5
|
+
export * as 'markdownlint-cli2-config' from './markdownlint-cli2-config.mjs';
|
|
6
|
+
export * as 'markdownlint-rules' from './markdownlint-rules/index.mjs';
|
|
5
7
|
export * as 'markdownlint' from './markdownlint.mjs';
|
|
6
8
|
export * as 'obsidianmd-rule-custom-message' from './obsidianmd-rule-custom-message.mjs';
|
|
9
|
+
export * as 'plugin-names' from './plugin-names.mjs';
|
|
@@ -3,60 +3,22 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
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
|
-
|
|
22
|
-
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
|
-
const existingProcess = globalThis.process;
|
|
24
|
-
|
|
25
|
-
if (!existingProcess) {
|
|
26
|
-
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
|
-
globalThis.process = browserProcess;
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (existingProcess.versions?.node) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const existingProcessRecord = existingProcess;
|
|
36
|
-
|
|
37
|
-
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
|
-
existingProcessRecord[key] ??= value;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
existingProcessRecord['browser'] = true;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
(function initEsm() {
|
|
45
|
-
ensureDisposeSymbols();
|
|
46
|
-
ensureBrowserProcess();
|
|
47
|
-
})();
|
|
48
|
-
})();
|
|
49
|
-
|
|
50
6
|
import * as eslint_config from "./eslint-config.mjs";
|
|
51
7
|
import * as eslint_rules from "./eslint-rules/index.mjs";
|
|
52
8
|
import * as eslint from "./eslint.mjs";
|
|
9
|
+
import * as markdownlint_cli2_config from "./markdownlint-cli2-config.mjs";
|
|
10
|
+
import * as markdownlint_rules from "./markdownlint-rules/index.mjs";
|
|
53
11
|
import * as markdownlint from "./markdownlint.mjs";
|
|
54
12
|
import * as obsidianmd_rule_custom_message from "./obsidianmd-rule-custom-message.mjs";
|
|
13
|
+
import * as plugin_names from "./plugin-names.mjs";
|
|
55
14
|
export {
|
|
56
15
|
eslint,
|
|
57
16
|
eslint_config as "eslint-config",
|
|
58
17
|
eslint_rules as "eslint-rules",
|
|
59
18
|
markdownlint,
|
|
60
|
-
|
|
19
|
+
markdownlint_cli2_config as "markdownlint-cli2-config",
|
|
20
|
+
markdownlint_rules as "markdownlint-rules",
|
|
21
|
+
obsidianmd_rule_custom_message as "obsidianmd-rule-custom-message",
|
|
22
|
+
plugin_names as "plugin-names"
|
|
61
23
|
};
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnZXNsaW50LWNvbmZpZycgZnJvbSAnLi9lc2xpbnQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdlc2xpbnQtcnVsZXMnIGZyb20gJy4vZXNsaW50LXJ1bGVzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdlc2xpbnQnIGZyb20gJy4vZXNsaW50LnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bmxpbnQtY2xpMi1jb25maWcnIGZyb20gJy4vbWFya2Rvd25saW50LWNsaTItY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bmxpbnQtcnVsZXMnIGZyb20gJy4vbWFya2Rvd25saW50LXJ1bGVzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bmxpbnQnIGZyb20gJy4vbWFya2Rvd25saW50LnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbm1kLXJ1bGUtY3VzdG9tLW1lc3NhZ2UnIGZyb20gJy4vb2JzaWRpYW5tZC1ydWxlLWN1c3RvbS1tZXNzYWdlLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tbmFtZXMnIGZyb20gJy4vcGx1Z2luLW5hbWVzLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBRUEsWUFBWUEsbUJBQXFCO0FBQ2pDLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZLFlBQWM7QUFDMUIsWUFBWUMsOEJBQWdDO0FBQzVDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZLGtCQUFvQjtBQUNoQyxZQUFZQyxvQ0FBc0M7QUFDbEQsWUFBWUMsa0JBQW9COyIsCiAgIm5hbWVzIjogWyJlc2xpbnQtY29uZmlnIiwgImVzbGludC1ydWxlcyIsICJtYXJrZG93bmxpbnQtY2xpMi1jb25maWciLCAibWFya2Rvd25saW50LXJ1bGVzIiwgIm9ic2lkaWFubWQtcnVsZS1jdXN0b20tbWVzc2FnZSIsICJwbHVnaW4tbmFtZXMiXQp9Cg==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* The markdownlint-cli2 configuration of an Obsidian plugin: the generic one from `@mnaoumov/typescript-dev-toolkit`,
|
|
6
|
+
* plus the Obsidian rules of this package.
|
|
7
|
+
*/
|
|
8
|
+
import type { MarkdownlintCli2ConfigurationSchema as MarkdownlintCli2ConfigSchema } from '@mnaoumov/typescript-dev-toolkit/linters/markdownlint-types/@types/markdownlint-cli2-config-schema';
|
|
9
|
+
/**
|
|
10
|
+
* The markdownlint-cli2 configuration of an Obsidian plugin.
|
|
11
|
+
*/
|
|
12
|
+
export declare const obsidianMarkdownlintCli2Config: MarkdownlintCli2ConfigSchema;
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
import { obsidianDevUtilsConfig } from "@mnaoumov/typescript-dev-toolkit/linters/markdownlint-cli2-config";
|
|
34
|
+
import {
|
|
35
|
+
PLUGIN_NAME_AS_CODE_RULE_NAME,
|
|
36
|
+
pluginNameAsCodeRule
|
|
37
|
+
} from "./markdownlint-rules/plugin-name-as-code.mjs";
|
|
38
|
+
const obsidianMarkdownlintCli2Config = {
|
|
39
|
+
...obsidianDevUtilsConfig,
|
|
40
|
+
config: {
|
|
41
|
+
...obsidianDevUtilsConfig.config,
|
|
42
|
+
// Registered but OFF by default: markdownlint enables an unlisted custom rule, so landing it silent has to be
|
|
43
|
+
// said out loud. Repositories still carry plain plugin names from before the rule existed; each one fixes them
|
|
44
|
+
// (`npm run lint:md:fix` does it) and turns the rule on by overriding this one key in its own
|
|
45
|
+
// `scripts/markdownlint-cli2-config.ts`. The rule takes `{ additionalPluginNames: [...] }` for names the shared
|
|
46
|
+
// list lacks.
|
|
47
|
+
[PLUGIN_NAME_AS_CODE_RULE_NAME]: false
|
|
48
|
+
},
|
|
49
|
+
customRules: [
|
|
50
|
+
...obsidianDevUtilsConfig.customRules ?? [],
|
|
51
|
+
pluginNameAsCodeRule
|
|
52
|
+
]
|
|
53
|
+
};
|
|
54
|
+
export {
|
|
55
|
+
obsidianMarkdownlintCli2Config
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIG1hcmtkb3dubGludC1jbGkyIGNvbmZpZ3VyYXRpb24gb2YgYW4gT2JzaWRpYW4gcGx1Z2luOiB0aGUgZ2VuZXJpYyBvbmUgZnJvbSBgQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXRgLFxuICogcGx1cyB0aGUgT2JzaWRpYW4gcnVsZXMgb2YgdGhpcyBwYWNrYWdlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTWFya2Rvd25saW50Q2xpMkNvbmZpZ3VyYXRpb25TY2hlbWEgYXMgTWFya2Rvd25saW50Q2xpMkNvbmZpZ1NjaGVtYSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvbWFya2Rvd25saW50LXR5cGVzL0B0eXBlcy9tYXJrZG93bmxpbnQtY2xpMi1jb25maWctc2NoZW1hJztcblxuaW1wb3J0IHsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvbWFya2Rvd25saW50LWNsaTItY29uZmlnJztcblxuaW1wb3J0IHtcbiAgUExVR0lOX05BTUVfQVNfQ09ERV9SVUxFX05BTUUsXG4gIHBsdWdpbk5hbWVBc0NvZGVSdWxlXG59IGZyb20gJy4vbWFya2Rvd25saW50LXJ1bGVzL3BsdWdpbi1uYW1lLWFzLWNvZGUudHMnO1xuXG4vKipcbiAqIFRoZSBtYXJrZG93bmxpbnQtY2xpMiBjb25maWd1cmF0aW9uIG9mIGFuIE9ic2lkaWFuIHBsdWdpbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG9ic2lkaWFuTWFya2Rvd25saW50Q2xpMkNvbmZpZzogTWFya2Rvd25saW50Q2xpMkNvbmZpZ1NjaGVtYSA9IHtcbiAgLi4ub2JzaWRpYW5EZXZVdGlsc0NvbmZpZyxcbiAgY29uZmlnOiB7XG4gICAgLi4ub2JzaWRpYW5EZXZVdGlsc0NvbmZpZy5jb25maWcsXG4gICAgLy8gUmVnaXN0ZXJlZCBidXQgT0ZGIGJ5IGRlZmF1bHQ6IG1hcmtkb3dubGludCBlbmFibGVzIGFuIHVubGlzdGVkIGN1c3RvbSBydWxlLCBzbyBsYW5kaW5nIGl0IHNpbGVudCBoYXMgdG8gYmVcbiAgICAvLyBzYWlkIG91dCBsb3VkLiBSZXBvc2l0b3JpZXMgc3RpbGwgY2FycnkgcGxhaW4gcGx1Z2luIG5hbWVzIGZyb20gYmVmb3JlIHRoZSBydWxlIGV4aXN0ZWQ7IGVhY2ggb25lIGZpeGVzIHRoZW1cbiAgICAvLyAoYG5wbSBydW4gbGludDptZDpmaXhgIGRvZXMgaXQpIGFuZCB0dXJucyB0aGUgcnVsZSBvbiBieSBvdmVycmlkaW5nIHRoaXMgb25lIGtleSBpbiBpdHMgb3duXG4gICAgLy8gYHNjcmlwdHMvbWFya2Rvd25saW50LWNsaTItY29uZmlnLnRzYC4gVGhlIHJ1bGUgdGFrZXMgYHsgYWRkaXRpb25hbFBsdWdpbk5hbWVzOiBbLi4uXSB9YCBmb3IgbmFtZXMgdGhlIHNoYXJlZFxuICAgIC8vIGxpc3QgbGFja3MuXG4gICAgW1BMVUdJTl9OQU1FX0FTX0NPREVfUlVMRV9OQU1FXTogZmFsc2VcbiAgfSxcbiAgY3VzdG9tUnVsZXM6IFtcbiAgICAuLi5vYnNpZGlhbkRldlV0aWxzQ29uZmlnLmN1c3RvbVJ1bGVzID8/IFtdLFxuICAgIHBsdWdpbk5hbWVBc0NvZGVSdWxlXG4gIF1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU0EsU0FBUyw4QkFBOEI7QUFFdkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFLQSxNQUFNLGlDQUErRDtBQUFBLEVBQzFFLEdBQUc7QUFBQSxFQUNILFFBQVE7QUFBQSxJQUNOLEdBQUcsdUJBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTTFCLENBQUMsNkJBQTZCLEdBQUc7QUFBQSxFQUNuQztBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1gsR0FBRyx1QkFBdUIsZUFBZSxDQUFDO0FBQUEsSUFDMUM7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
import * as plugin_name_as_code from "./plugin-name-as-code.mjs";
|
|
7
|
+
export {
|
|
8
|
+
plugin_name_as_code as "plugin-name-as-code"
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvbWFya2Rvd25saW50LXJ1bGVzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ3BsdWdpbi1uYW1lLWFzLWNvZGUnIGZyb20gJy4vcGx1Z2luLW5hbWUtYXMtY29kZS50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVlBLHlCQUEyQjsiLAogICJuYW1lcyI6IFsicGx1Z2luLW5hbWUtYXMtY29kZSJdCn0K
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/// <reference path="../../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* markdownlint rule: `plugin-name-as-code`.
|
|
6
|
+
*
|
|
7
|
+
* Reports an Obsidian plugin's display name written as plain text in markdown, and fixes it by wrapping the name in
|
|
8
|
+
* backticks. The names come from `plugin-names.ts`: the shared list, the project's own `manifest.json` `name`, and
|
|
9
|
+
* the rule's `additionalPluginNames` option.
|
|
10
|
+
*
|
|
11
|
+
* Only prose is read: the `data` tokens micromark leaves in paragraphs, lists, tables and emphasis. Everything else is
|
|
12
|
+
* left alone because a code span there would be wrong or would change something:
|
|
13
|
+
*
|
|
14
|
+
* - code spans, fenced and indented code and math are not `data` tokens, so they are never reached;
|
|
15
|
+
* - an HTML block, whose content markdownlint parses again as markdown;
|
|
16
|
+
* - a link or image label and target, a reference definition and an autolink: a code span inside a link label
|
|
17
|
+
* renders inconsistently across GitHub, Obsidian and terminals;
|
|
18
|
+
* - a heading, whose anchor would change;
|
|
19
|
+
* - a block quote, which quotes somebody else's words;
|
|
20
|
+
* - an Obsidian `[[wikilink]]` and an inline `<code>` element, which micromark reads as plain text, and a bare URL.
|
|
21
|
+
*
|
|
22
|
+
* Not attempted: a multi-word name broken across two lines of one paragraph.
|
|
23
|
+
*/
|
|
24
|
+
import type { Rule } from 'markdownlint';
|
|
25
|
+
/**
|
|
26
|
+
* The rule's name, as it is spelled in a `markdownlint-cli2` configuration.
|
|
27
|
+
*/
|
|
28
|
+
export declare const PLUGIN_NAME_AS_CODE_RULE_NAME = "plugin-name-as-code";
|
|
29
|
+
/**
|
|
30
|
+
* A markdownlint rule requiring a plugin name in markdown to be marked as code.
|
|
31
|
+
*/
|
|
32
|
+
export declare const pluginNameAsCodeRule: Rule;
|
|
@@ -0,0 +1,94 @@
|
|
|
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
|
+
import process from "node:process";
|
|
7
|
+
import {
|
|
8
|
+
findPluginNameMatches,
|
|
9
|
+
getPluginNames
|
|
10
|
+
} from "../plugin-names.mjs";
|
|
11
|
+
const PLUGIN_NAME_AS_CODE_RULE_NAME = "plugin-name-as-code";
|
|
12
|
+
const EXCLUDED_TOKEN_TYPES = /* @__PURE__ */ new Set([
|
|
13
|
+
"atxHeading",
|
|
14
|
+
"blockQuote",
|
|
15
|
+
"definition",
|
|
16
|
+
"htmlFlow",
|
|
17
|
+
"image",
|
|
18
|
+
"link",
|
|
19
|
+
"setextHeading"
|
|
20
|
+
]);
|
|
21
|
+
const UNDEFINED_REFERENCE_TOKEN_TYPE_PREFIX = "undefinedReference";
|
|
22
|
+
const EXCLUDED_LINE_PATTERNS = [
|
|
23
|
+
/\[\[[^\]]*\]\]/g,
|
|
24
|
+
/<code\b[^>]*>[\s\S]*?<\/code>/gi,
|
|
25
|
+
/\b[a-z][\w+.-]*:\/\/\S+/gi
|
|
26
|
+
];
|
|
27
|
+
const pluginNameAsCodeRule = {
|
|
28
|
+
description: "Plugin name is not marked as code (wrap it in backticks)",
|
|
29
|
+
function: (params, onError) => {
|
|
30
|
+
const options = params.config;
|
|
31
|
+
const pluginNames = getPluginNames({ additionalPluginNames: options.additionalPluginNames, cwd: process.cwd() });
|
|
32
|
+
const proseRangesByLine = /* @__PURE__ */ new Map();
|
|
33
|
+
collectProseRanges(params.parsers.micromark.tokens, proseRangesByLine);
|
|
34
|
+
for (const [index, line] of params.lines.entries()) {
|
|
35
|
+
const lineNumber = index + 1;
|
|
36
|
+
const ranges = proseRangesByLine.get(lineNumber);
|
|
37
|
+
if (!ranges) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const mergedRanges = mergeRanges(ranges);
|
|
41
|
+
for (const match of findPluginNameMatches(line, pluginNames, EXCLUDED_LINE_PATTERNS)) {
|
|
42
|
+
const column = match.index + 1;
|
|
43
|
+
const isInProse = mergedRanges.some((range) => range.start <= column && column + match.name.length <= range.end);
|
|
44
|
+
if (!isInProse) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
onError({
|
|
48
|
+
detail: `Wrap \`${match.name}\` in backticks`,
|
|
49
|
+
fixInfo: {
|
|
50
|
+
deleteCount: match.name.length,
|
|
51
|
+
editColumn: column,
|
|
52
|
+
insertText: `\`${match.name}\``
|
|
53
|
+
},
|
|
54
|
+
lineNumber,
|
|
55
|
+
range: [column, match.name.length]
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
names: [PLUGIN_NAME_AS_CODE_RULE_NAME],
|
|
61
|
+
parser: "micromark",
|
|
62
|
+
tags: ["code"]
|
|
63
|
+
};
|
|
64
|
+
function collectProseRanges(tokens, proseRangesByLine) {
|
|
65
|
+
for (const token of tokens) {
|
|
66
|
+
if (EXCLUDED_TOKEN_TYPES.has(token.type) || token.type.startsWith(UNDEFINED_REFERENCE_TOKEN_TYPE_PREFIX)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (token.type === "data") {
|
|
70
|
+
const ranges = proseRangesByLine.get(token.startLine) ?? [];
|
|
71
|
+
ranges.push({ end: token.endColumn, start: token.startColumn });
|
|
72
|
+
proseRangesByLine.set(token.startLine, ranges);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
collectProseRanges(token.children, proseRangesByLine);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function mergeRanges(ranges) {
|
|
79
|
+
const merged = [];
|
|
80
|
+
for (const range of [...ranges].sort((a, b) => a.start - b.start)) {
|
|
81
|
+
const last = merged.at(-1);
|
|
82
|
+
if (last && range.start <= last.end) {
|
|
83
|
+
merged[merged.length - 1] = { end: Math.max(last.end, range.end), start: last.start };
|
|
84
|
+
} else {
|
|
85
|
+
merged.push(range);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return merged;
|
|
89
|
+
}
|
|
90
|
+
export {
|
|
91
|
+
PLUGIN_NAME_AS_CODE_RULE_NAME,
|
|
92
|
+
pluginNameAsCodeRule
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvbWFya2Rvd25saW50LXJ1bGVzL3BsdWdpbi1uYW1lLWFzLWNvZGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBtYXJrZG93bmxpbnQgcnVsZTogYHBsdWdpbi1uYW1lLWFzLWNvZGVgLlxuICpcbiAqIFJlcG9ydHMgYW4gT2JzaWRpYW4gcGx1Z2luJ3MgZGlzcGxheSBuYW1lIHdyaXR0ZW4gYXMgcGxhaW4gdGV4dCBpbiBtYXJrZG93biwgYW5kIGZpeGVzIGl0IGJ5IHdyYXBwaW5nIHRoZSBuYW1lIGluXG4gKiBiYWNrdGlja3MuIFRoZSBuYW1lcyBjb21lIGZyb20gYHBsdWdpbi1uYW1lcy50c2A6IHRoZSBzaGFyZWQgbGlzdCwgdGhlIHByb2plY3QncyBvd24gYG1hbmlmZXN0Lmpzb25gIGBuYW1lYCwgYW5kXG4gKiB0aGUgcnVsZSdzIGBhZGRpdGlvbmFsUGx1Z2luTmFtZXNgIG9wdGlvbi5cbiAqXG4gKiBPbmx5IHByb3NlIGlzIHJlYWQ6IHRoZSBgZGF0YWAgdG9rZW5zIG1pY3JvbWFyayBsZWF2ZXMgaW4gcGFyYWdyYXBocywgbGlzdHMsIHRhYmxlcyBhbmQgZW1waGFzaXMuIEV2ZXJ5dGhpbmcgZWxzZSBpc1xuICogbGVmdCBhbG9uZSBiZWNhdXNlIGEgY29kZSBzcGFuIHRoZXJlIHdvdWxkIGJlIHdyb25nIG9yIHdvdWxkIGNoYW5nZSBzb21ldGhpbmc6XG4gKlxuICogLSBjb2RlIHNwYW5zLCBmZW5jZWQgYW5kIGluZGVudGVkIGNvZGUgYW5kIG1hdGggYXJlIG5vdCBgZGF0YWAgdG9rZW5zLCBzbyB0aGV5IGFyZSBuZXZlciByZWFjaGVkO1xuICogLSBhbiBIVE1MIGJsb2NrLCB3aG9zZSBjb250ZW50IG1hcmtkb3dubGludCBwYXJzZXMgYWdhaW4gYXMgbWFya2Rvd247XG4gKiAtIGEgbGluayBvciBpbWFnZSBsYWJlbCBhbmQgdGFyZ2V0LCBhIHJlZmVyZW5jZSBkZWZpbml0aW9uIGFuZCBhbiBhdXRvbGluazogYSBjb2RlIHNwYW4gaW5zaWRlIGEgbGluayBsYWJlbFxuICogICByZW5kZXJzIGluY29uc2lzdGVudGx5IGFjcm9zcyBHaXRIdWIsIE9ic2lkaWFuIGFuZCB0ZXJtaW5hbHM7XG4gKiAtIGEgaGVhZGluZywgd2hvc2UgYW5jaG9yIHdvdWxkIGNoYW5nZTtcbiAqIC0gYSBibG9jayBxdW90ZSwgd2hpY2ggcXVvdGVzIHNvbWVib2R5IGVsc2UncyB3b3JkcztcbiAqIC0gYW4gT2JzaWRpYW4gYFtbd2lraWxpbmtdXWAgYW5kIGFuIGlubGluZSBgPGNvZGU+YCBlbGVtZW50LCB3aGljaCBtaWNyb21hcmsgcmVhZHMgYXMgcGxhaW4gdGV4dCwgYW5kIGEgYmFyZSBVUkwuXG4gKlxuICogTm90IGF0dGVtcHRlZDogYSBtdWx0aS13b3JkIG5hbWUgYnJva2VuIGFjcm9zcyB0d28gbGluZXMgb2Ygb25lIHBhcmFncmFwaC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIE1pY3JvbWFya1Rva2VuLFxuICBSdWxlXG59IGZyb20gJ21hcmtkb3dubGludCc7XG5cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luTmFtZVJ1bGVPcHRpb25zIH0gZnJvbSAnLi4vcGx1Z2luLW5hbWVzLnRzJztcblxuaW1wb3J0IHtcbiAgZmluZFBsdWdpbk5hbWVNYXRjaGVzLFxuICBnZXRQbHVnaW5OYW1lc1xufSBmcm9tICcuLi9wbHVnaW4tbmFtZXMudHMnO1xuXG4vKipcbiAqIFRoZSBydWxlJ3MgbmFtZSwgYXMgaXQgaXMgc3BlbGxlZCBpbiBhIGBtYXJrZG93bmxpbnQtY2xpMmAgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9OQU1FX0FTX0NPREVfUlVMRV9OQU1FID0gJ3BsdWdpbi1uYW1lLWFzLWNvZGUnO1xuXG4vKipcbiAqIFRoZSB0b2tlbiB0eXBlcyB3aG9zZSB3aG9sZSBzdWJ0cmVlIGlzIHNraXBwZWQuXG4gKi9cbmNvbnN0IEVYQ0xVREVEX1RPS0VOX1RZUEVTID0gbmV3IFNldChbXG4gICdhdHhIZWFkaW5nJyxcbiAgJ2Jsb2NrUXVvdGUnLFxuICAnZGVmaW5pdGlvbicsXG4gICdodG1sRmxvdycsXG4gICdpbWFnZScsXG4gICdsaW5rJyxcbiAgJ3NldGV4dEhlYWRpbmcnXG5dKTtcblxuLyoqXG4gKiBUaGUgcHJlZml4IG9mIHRoZSB0b2tlbiB0eXBlcyBtYXJrZG93bmxpbnQgYXBwZW5kcyBmb3IgYSBzaG9ydGN1dCwgY29sbGFwc2VkIG9yIGZ1bGwgcmVmZXJlbmNlIHdpdGggbm8gZGVmaW5pdGlvbi5cbiAqIFRoZXkgcmVwZWF0IHRleHQgdGhlIHRyZWUgYWxyZWFkeSBob2xkcywgc28gcmVhZGluZyB0aGVtIHdvdWxkIHJlcG9ydCBhIG5hbWUgdHdpY2UuXG4gKi9cbmNvbnN0IFVOREVGSU5FRF9SRUZFUkVOQ0VfVE9LRU5fVFlQRV9QUkVGSVggPSAndW5kZWZpbmVkUmVmZXJlbmNlJztcblxuLyoqXG4gKiBUaGUgbGluZSBzcGFucyBtaWNyb21hcmsgcmVhZHMgYXMgcGxhaW4gdGV4dCB3aG9zZSBwbHVnaW4gbmFtZXMgYXJlIG5vdCBwcm9zZTogYW4gT2JzaWRpYW4gd2lraWxpbmssIGFuIGlubGluZVxuICogYDxjb2RlPmAgZWxlbWVudCwgYSBVUkwuXG4gKi9cbmNvbnN0IEVYQ0xVREVEX0xJTkVfUEFUVEVSTlM6IHJlYWRvbmx5IFJlZ0V4cFtdID0gW1xuICAvXFxbXFxbW15cXF1dKlxcXVxcXS9nLFxuICAvPGNvZGVcXGJbXj5dKj5bXFxzXFxTXSo/PFxcL2NvZGU+L2dpLFxuICAvXFxiW2Etel1bXFx3Ky4tXSo6XFwvXFwvXFxTKy9naVxuXTtcblxuLyoqXG4gKiBBIGNvbHVtbiByYW5nZSBvZiBvbmUgbGluZSwgMS1iYXNlZCwgZW5kIGV4Y2x1c2l2ZS5cbiAqL1xuaW50ZXJmYWNlIENvbHVtblJhbmdlIHtcbiAgcmVhZG9ubHkgZW5kOiBudW1iZXI7XG4gIHJlYWRvbmx5IHN0YXJ0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBtYXJrZG93bmxpbnQgcnVsZSByZXF1aXJpbmcgYSBwbHVnaW4gbmFtZSBpbiBtYXJrZG93biB0byBiZSBtYXJrZWQgYXMgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHBsdWdpbk5hbWVBc0NvZGVSdWxlOiBSdWxlID0ge1xuICBkZXNjcmlwdGlvbjogJ1BsdWdpbiBuYW1lIGlzIG5vdCBtYXJrZWQgYXMgY29kZSAod3JhcCBpdCBpbiBiYWNrdGlja3MpJyxcbiAgZnVuY3Rpb246IChwYXJhbXMsIG9uRXJyb3IpID0+IHtcbiAgICAvLyBUaGUgbWFya2Rvd25saW50IGVuZ2luZSBoYW5kcyBhbiBlbmFibGVkIHJ1bGUgaXRzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBvciBhbiBlbXB0eSBvbmUgd2hlbiB0aGUgcnVsZSBpcyBtZXJlbHkgYHRydWVgLlxuICAgIGNvbnN0IG9wdGlvbnMgPSBwYXJhbXMuY29uZmlnIGFzIFBsdWdpbk5hbWVSdWxlT3B0aW9ucztcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGdldFBsdWdpbk5hbWVzKHsgYWRkaXRpb25hbFBsdWdpbk5hbWVzOiBvcHRpb25zLmFkZGl0aW9uYWxQbHVnaW5OYW1lcywgY3dkOiBwcm9jZXNzLmN3ZCgpIH0pO1xuICAgIGNvbnN0IHByb3NlUmFuZ2VzQnlMaW5lID0gbmV3IE1hcDxudW1iZXIsIENvbHVtblJhbmdlW10+KCk7XG4gICAgY29sbGVjdFByb3NlUmFuZ2VzKHBhcmFtcy5wYXJzZXJzLm1pY3JvbWFyay50b2tlbnMsIHByb3NlUmFuZ2VzQnlMaW5lKTtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBsaW5lXSBvZiBwYXJhbXMubGluZXMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBsaW5lTnVtYmVyID0gaW5kZXggKyAxO1xuICAgICAgY29uc3QgcmFuZ2VzID0gcHJvc2VSYW5nZXNCeUxpbmUuZ2V0KGxpbmVOdW1iZXIpO1xuICAgICAgaWYgKCFyYW5nZXMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lcmdlZFJhbmdlcyA9IG1lcmdlUmFuZ2VzKHJhbmdlcyk7XG4gICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGZpbmRQbHVnaW5OYW1lTWF0Y2hlcyhsaW5lLCBwbHVnaW5OYW1lcywgRVhDTFVERURfTElORV9QQVRURVJOUykpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbWF0Y2guaW5kZXggKyAxO1xuICAgICAgICBjb25zdCBpc0luUHJvc2UgPSBtZXJnZWRSYW5nZXMuc29tZSgocmFuZ2UpID0+IHJhbmdlLnN0YXJ0IDw9IGNvbHVtbiAmJiBjb2x1bW4gKyBtYXRjaC5uYW1lLmxlbmd0aCA8PSByYW5nZS5lbmQpO1xuICAgICAgICBpZiAoIWlzSW5Qcm9zZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgb25FcnJvcih7XG4gICAgICAgICAgZGV0YWlsOiBgV3JhcCBcXGAke21hdGNoLm5hbWV9XFxgIGluIGJhY2t0aWNrc2AsXG4gICAgICAgICAgZml4SW5mbzoge1xuICAgICAgICAgICAgZGVsZXRlQ291bnQ6IG1hdGNoLm5hbWUubGVuZ3RoLFxuICAgICAgICAgICAgZWRpdENvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgaW5zZXJ0VGV4dDogYFxcYCR7bWF0Y2gubmFtZX1cXGBgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaW5lTnVtYmVyLFxuICAgICAgICAgIHJhbmdlOiBbY29sdW1uLCBtYXRjaC5uYW1lLmxlbmd0aF1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBuYW1lczogW1BMVUdJTl9OQU1FX0FTX0NPREVfUlVMRV9OQU1FXSxcbiAgcGFyc2VyOiAnbWljcm9tYXJrJyxcbiAgdGFnczogWydjb2RlJ11cbn07XG5cbi8qKlxuICogQ29sbGVjdHMgdGhlIGNvbHVtbiByYW5nZXMgb2YgdGhlIHByb3NlIGBkYXRhYCB0b2tlbnMsIGxpbmUgYnkgbGluZSwgc2tpcHBpbmcgdGhlIGV4Y2x1ZGVkIHN1YnRyZWVzLlxuICpcbiAqIEBwYXJhbSB0b2tlbnMgLSBUaGUgdG9rZW5zIHRvIHdhbGsuXG4gKiBAcGFyYW0gcHJvc2VSYW5nZXNCeUxpbmUgLSBUaGUgcmFuZ2VzIGNvbGxlY3RlZCBzbyBmYXIsIGtleWVkIGJ5IGxpbmUgbnVtYmVyLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0UHJvc2VSYW5nZXModG9rZW5zOiByZWFkb25seSBNaWNyb21hcmtUb2tlbltdLCBwcm9zZVJhbmdlc0J5TGluZTogTWFwPG51bWJlciwgQ29sdW1uUmFuZ2VbXT4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICBpZiAoRVhDTFVERURfVE9LRU5fVFlQRVMuaGFzKHRva2VuLnR5cGUpIHx8IHRva2VuLnR5cGUuc3RhcnRzV2l0aChVTkRFRklORURfUkVGRVJFTkNFX1RPS0VOX1RZUEVfUFJFRklYKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdkYXRhJykge1xuICAgICAgY29uc3QgcmFuZ2VzID0gcHJvc2VSYW5nZXNCeUxpbmUuZ2V0KHRva2VuLnN0YXJ0TGluZSkgPz8gW107XG4gICAgICByYW5nZXMucHVzaCh7IGVuZDogdG9rZW4uZW5kQ29sdW1uLCBzdGFydDogdG9rZW4uc3RhcnRDb2x1bW4gfSk7XG4gICAgICBwcm9zZVJhbmdlc0J5TGluZS5zZXQodG9rZW4uc3RhcnRMaW5lLCByYW5nZXMpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29sbGVjdFByb3NlUmFuZ2VzKHRva2VuLmNoaWxkcmVuLCBwcm9zZVJhbmdlc0J5TGluZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZXMgcmFuZ2VzIHRoYXQgdG91Y2ggb3Igb3ZlcmxhcCwgc28gYSBuYW1lIG1pY3JvbWFyayBzcGxpdHMgYWNyb3NzIGFkamFjZW50IGBkYXRhYCB0b2tlbnMgaXMgc3RpbGwgaW5zaWRlIG9uZS5cbiAqXG4gKiBAcGFyYW0gcmFuZ2VzIC0gVGhlIHJhbmdlcyBvZiBvbmUgbGluZS5cbiAqIEByZXR1cm5zIFRoZSBtZXJnZWQgcmFuZ2VzLlxuICovXG5mdW5jdGlvbiBtZXJnZVJhbmdlcyhyYW5nZXM6IHJlYWRvbmx5IENvbHVtblJhbmdlW10pOiBDb2x1bW5SYW5nZVtdIHtcbiAgY29uc3QgbWVyZ2VkOiBDb2x1bW5SYW5nZVtdID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2Ugb2YgWy4uLnJhbmdlc10uc29ydCgoYSwgYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpKSB7XG4gICAgY29uc3QgbGFzdCA9IG1lcmdlZC5hdCgtMSk7XG4gICAgaWYgKGxhc3QgJiYgcmFuZ2Uuc3RhcnQgPD0gbGFzdC5lbmQpIHtcbiAgICAgIG1lcmdlZFttZXJnZWQubGVuZ3RoIC0gMV0gPSB7IGVuZDogTWF0aC5tYXgobGFzdC5lbmQsIHJhbmdlLmVuZCksIHN0YXJ0OiBsYXN0LnN0YXJ0IH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlZC5wdXNoKHJhbmdlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lcmdlZDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBNEJBLE9BQU8sYUFBYTtBQUlwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUtBLE1BQU0sZ0NBQWdDO0FBSzdDLE1BQU0sdUJBQXVCLG9CQUFJLElBQUk7QUFBQSxFQUNuQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLENBQUM7QUFNRCxNQUFNLHdDQUF3QztBQU05QyxNQUFNLHlCQUE0QztBQUFBLEVBQ2hEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRjtBQWFPLE1BQU0sdUJBQTZCO0FBQUEsRUFDeEMsYUFBYTtBQUFBLEVBQ2IsVUFBVSxDQUFDLFFBQVEsWUFBWTtBQUU3QixVQUFNLFVBQVUs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
|