obsidian-dev-utils 97.0.0 → 99.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/CHANGELOG.md +26 -0
- package/LICENSE +1 -1
- package/dist/integration-test-plugin/main.js +686 -439
- package/dist/lib/cjs/__merged.cjs +22 -9
- package/dist/lib/cjs/__merged.d.cts +4 -3
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +36 -1
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +21 -0
- package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.cjs +20 -6
- package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.d.cts +26 -4
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +38 -38
- package/dist/lib/cjs/obsidian/demo-vault-naming.cjs +167 -0
- package/dist/lib/cjs/obsidian/demo-vault-naming.d.cts +54 -0
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +11 -5
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.d.cts +10 -8
- package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +9 -9
- package/dist/lib/cjs/obsidian/desktop-trusted-input.d.cts +23 -4
- package/dist/lib/cjs/obsidian/file-change.cjs +6 -6
- package/dist/lib/cjs/obsidian/index.cjs +10 -1
- package/dist/lib/cjs/obsidian/index.d.cts +3 -0
- package/dist/lib/cjs/obsidian/link.cjs +33 -6
- package/dist/lib/cjs/obsidian/link.d.cts +35 -0
- package/dist/lib/cjs/obsidian/mobile-trusted-input.cjs +195 -0
- package/dist/lib/cjs/obsidian/mobile-trusted-input.d.cts +93 -0
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -1
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +4 -0
- package/dist/lib/cjs/obsidian/reference.cjs +9 -1
- package/dist/lib/cjs/obsidian/reference.d.cts +33 -0
- package/dist/lib/cjs/obsidian/resource-lock.cjs +122 -122
- package/dist/lib/cjs/obsidian/trusted-input.cjs +206 -0
- package/dist/lib/cjs/obsidian/trusted-input.d.cts +126 -0
- package/dist/lib/cjs/obsidian/validation.cjs +22 -3
- package/dist/lib/cjs/obsidian/validation.d.cts +37 -0
- package/dist/lib/cjs/obsidian/vault.cjs +4 -1
- package/dist/lib/cjs/obsidian/vault.d.cts +8 -1
- package/dist/lib/cjs/script-utils/build.cjs +30 -6
- package/dist/lib/cjs/script-utils/build.d.cts +5 -0
- package/dist/lib/cjs/script-utils/demo-vault.cjs +26 -6
- package/dist/lib/cjs/script-utils/demo-vault.d.cts +12 -8
- package/dist/lib/cjs/script-utils/exec.cjs +1 -1
- package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -2
- package/dist/lib/cjs/script-utils/index.cjs +4 -1
- package/dist/lib/cjs/script-utils/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/cspell.cjs +3 -3
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +39 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +16 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +5 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.cjs +254 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.d.cts +54 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.cjs +217 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.d.cts +141 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.cjs +214 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.d.cts +32 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.cjs +215 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.d.cts +30 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.cjs +318 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.d.cts +45 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +9 -1
- package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -2
- package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +4 -4
- package/dist/lib/cjs/script-utils/nano-staged-config.cjs +7 -5
- package/dist/lib/cjs/script-utils/nano-staged-config.d.cts +5 -2
- package/dist/lib/cjs/script-utils/npm-run.cjs +4 -3
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +10 -1
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +37 -1
- package/dist/lib/cjs/script-utils/package-manager.cjs +370 -0
- package/dist/lib/cjs/script-utils/package-manager.d.cts +93 -0
- package/dist/lib/cjs/script-utils/version.cjs +21 -9
- package/dist/lib/esm/__merged.d.mts +4 -3
- package/dist/lib/esm/__merged.mjs +24 -10
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +21 -0
- package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +36 -1
- package/dist/lib/esm/obsidian/components/plugin-suggestion-component.d.mts +26 -4
- package/dist/lib/esm/obsidian/components/plugin-suggestion-component.mjs +20 -6
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +38 -38
- package/dist/lib/esm/obsidian/demo-vault-naming.d.mts +54 -0
- package/dist/lib/esm/obsidian/demo-vault-naming.mjs +61 -0
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.d.mts +10 -8
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +14 -5
- package/dist/lib/esm/obsidian/desktop-trusted-input.d.mts +23 -4
- package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +9 -9
- package/dist/lib/esm/obsidian/file-change.mjs +6 -6
- package/dist/lib/esm/obsidian/index.d.mts +3 -0
- package/dist/lib/esm/obsidian/index.mjs +7 -1
- package/dist/lib/esm/obsidian/link.d.mts +35 -0
- package/dist/lib/esm/obsidian/link.mjs +38 -7
- package/dist/lib/esm/obsidian/mobile-trusted-input.d.mts +93 -0
- package/dist/lib/esm/obsidian/mobile-trusted-input.mjs +84 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +4 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
- package/dist/lib/esm/obsidian/reference.d.mts +33 -0
- package/dist/lib/esm/obsidian/reference.mjs +8 -1
- package/dist/lib/esm/obsidian/resource-lock.mjs +122 -122
- package/dist/lib/esm/obsidian/trusted-input.d.mts +126 -0
- package/dist/lib/esm/obsidian/trusted-input.mjs +85 -0
- package/dist/lib/esm/obsidian/validation.d.mts +37 -0
- package/dist/lib/esm/obsidian/validation.mjs +21 -2
- package/dist/lib/esm/obsidian/vault.d.mts +8 -1
- package/dist/lib/esm/obsidian/vault.mjs +4 -1
- package/dist/lib/esm/script-utils/build.d.mts +5 -0
- package/dist/lib/esm/script-utils/build.mjs +30 -6
- package/dist/lib/esm/script-utils/demo-vault.d.mts +12 -8
- package/dist/lib/esm/script-utils/demo-vault.mjs +29 -6
- package/dist/lib/esm/script-utils/exec.mjs +1 -1
- package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -2
- package/dist/lib/esm/script-utils/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/cspell.mjs +3 -3
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +39 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +5 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +11 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.d.mts +54 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.mjs +148 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.d.mts +141 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.mjs +92 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.d.mts +32 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.mjs +111 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.d.mts +30 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.mjs +112 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.d.mts +45 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.mjs +217 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +9 -1
- package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -2
- package/dist/lib/esm/script-utils/linters/markdownlint.mjs +4 -4
- package/dist/lib/esm/script-utils/nano-staged-config.d.mts +5 -2
- package/dist/lib/esm/script-utils/nano-staged-config.mjs +7 -5
- package/dist/lib/esm/script-utils/npm-run.mjs +4 -3
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +37 -1
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +10 -1
- package/dist/lib/esm/script-utils/package-manager.d.mts +93 -0
- package/dist/lib/esm/script-utils/package-manager.mjs +256 -0
- package/dist/lib/esm/script-utils/version.mjs +21 -9
- package/obsidian/demo-vault-naming/package.json +6 -0
- package/obsidian/mobile-trusted-input/package.json +6 -0
- package/obsidian/trusted-input/package.json +6 -0
- package/package.json +19 -17
- package/script-utils/linters/eslint-rules/manifest-description/package.json +6 -0
- package/script-utils/linters/eslint-rules/manifest-helpers/package.json +6 -0
- package/script-utils/linters/eslint-rules/manifest-id/package.json +6 -0
- package/script-utils/linters/eslint-rules/manifest-name/package.json +6 -0
- package/script-utils/linters/eslint-rules/manifest-schema/package.json +6 -0
- package/script-utils/package-manager/package.json +6 -0
|
@@ -0,0 +1,112 @@
|
|
|
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 ensureBrowserProcess() {
|
|
8
|
+
const browserProcess = {
|
|
9
|
+
browser: true,
|
|
10
|
+
cwd() {
|
|
11
|
+
return '/';
|
|
12
|
+
},
|
|
13
|
+
env: {},
|
|
14
|
+
platform: 'android'
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// 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.
|
|
18
|
+
const existingProcess = globalThis.process;
|
|
19
|
+
|
|
20
|
+
if (!existingProcess) {
|
|
21
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
22
|
+
globalThis.process = browserProcess;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (existingProcess.versions?.node) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const existingProcessRecord = existingProcess;
|
|
31
|
+
|
|
32
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
33
|
+
existingProcessRecord[key] ??= value;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
existingProcessRecord['browser'] = true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
(function initEsm() {
|
|
40
|
+
ensureBrowserProcess();
|
|
41
|
+
})();
|
|
42
|
+
})();
|
|
43
|
+
|
|
44
|
+
import {
|
|
45
|
+
findManifestMember,
|
|
46
|
+
getManifestObject,
|
|
47
|
+
getStringValue,
|
|
48
|
+
toReportNode
|
|
49
|
+
} from "./manifest-helpers.mjs";
|
|
50
|
+
const MESSAGE_ID_CONTAINS_OBSIDIAN = "nameContainsObsidian";
|
|
51
|
+
const MESSAGE_ID_CONTAINS_PLUGIN = "nameContainsPlugin";
|
|
52
|
+
const MESSAGE_ID_INVALID_CHARACTERS = "nameInvalidCharacters";
|
|
53
|
+
const ALLOWED_NAME_CHARACTERS = /^[A-Za-z0-9 \-+()]+$/;
|
|
54
|
+
const OBSIDIAN_VARIANTS = /obsi|sidian/i;
|
|
55
|
+
const manifestName = {
|
|
56
|
+
create(context) {
|
|
57
|
+
return {
|
|
58
|
+
Document(node) {
|
|
59
|
+
const manifestObject = getManifestObject(node);
|
|
60
|
+
if (!manifestObject) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const member = findManifestMember(manifestObject, "name");
|
|
64
|
+
if (!member) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const name = getStringValue(member.value);
|
|
68
|
+
if (name === null) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const reportNode = toReportNode(member.value);
|
|
72
|
+
if (OBSIDIAN_VARIANTS.test(name)) {
|
|
73
|
+
context.report({
|
|
74
|
+
messageId: MESSAGE_ID_CONTAINS_OBSIDIAN,
|
|
75
|
+
node: reportNode
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
if (name.toLowerCase().includes("plugin")) {
|
|
79
|
+
context.report({
|
|
80
|
+
messageId: MESSAGE_ID_CONTAINS_PLUGIN,
|
|
81
|
+
node: reportNode
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
if (!ALLOWED_NAME_CHARACTERS.test(name)) {
|
|
85
|
+
context.report({
|
|
86
|
+
messageId: MESSAGE_ID_INVALID_CHARACTERS,
|
|
87
|
+
node: reportNode
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
meta: {
|
|
94
|
+
docs: {
|
|
95
|
+
description: "Enforce the Community directory's constraints on a plugin's `manifest.json` `name`"
|
|
96
|
+
},
|
|
97
|
+
messages: {
|
|
98
|
+
[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.",
|
|
99
|
+
[MESSAGE_ID_CONTAINS_PLUGIN]: "The `name` must not contain `Plugin`.",
|
|
100
|
+
[MESSAGE_ID_INVALID_CHARACTERS]: "The `name` must use Basic Latin only, with hyphens, plus signs and parentheses the only permitted punctuation."
|
|
101
|
+
},
|
|
102
|
+
schema: [],
|
|
103
|
+
type: "problem"
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
export {
|
|
107
|
+
MESSAGE_ID_CONTAINS_OBSIDIAN,
|
|
108
|
+
MESSAGE_ID_CONTAINS_PLUGIN,
|
|
109
|
+
MESSAGE_ID_INVALID_CHARACTERS,
|
|
110
|
+
manifestName
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9tYW5pZmVzdC1uYW1lLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IG1hbmlmZXN0LW5hbWVcbiAqXG4gKiBFbmZvcmNlcyB0aGUgQ29tbXVuaXR5IGRpcmVjdG9yeSdzIGNvbnN0cmFpbnRzIG9uIGEgcGx1Z2luJ3MgYG1hbmlmZXN0Lmpzb25gIGBuYW1lYDogbm8gYE9ic2lkaWFuYCBvclxuICogaXRzIHZhcmlhbnRzLCBubyBgUGx1Z2luYCwgYW5kIEJhc2ljIExhdGluIG9ubHkgd2l0aCBoeXBoZW5zLCBwbHVzIHNpZ25zIGFuZCBwYXJlbnRoZXNlcyB0aGUgc29sZVxuICogcGVybWl0dGVkIHB1bmN0dWF0aW9uLlxuICpcbiAqIFJ1bnMgb24gdGhlIGBAZXNsaW50L2pzb25gIGBqc29uL2pzb25gIGxhbmd1YWdlOyBzZWUgYG1hbmlmZXN0LWhlbHBlcnMudHNgIGZvciB3aHkgdGhlIEFTVCBpcyBNb21vYVxuICogcmF0aGVyIHRoYW4gRVNUcmVlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7XG4gIGZpbmRNYW5pZmVzdE1lbWJlcixcbiAgZ2V0TWFuaWZlc3RPYmplY3QsXG4gIGdldFN0cmluZ1ZhbHVlLFxuICB0b1JlcG9ydE5vZGVcbn0gZnJvbSAnLi9tYW5pZmVzdC1oZWxwZXJzLnRzJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gdGhlIG5hbWUgY29udGFpbnMgYE9ic2lkaWFuYCBvciBvbmUgb2YgaXRzIHZhcmlhbnRzLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9DT05UQUlOU19PQlNJRElBTiA9ICduYW1lQ29udGFpbnNPYnNpZGlhbic7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIHRoZSBuYW1lIGNvbnRhaW5zIGBQbHVnaW5gLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9DT05UQUlOU19QTFVHSU4gPSAnbmFtZUNvbnRhaW5zUGx1Z2luJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gdGhlIG5hbWUgaG9sZHMgYSBjaGFyYWN0ZXIgb3V0c2lkZSBCYXNpYyBMYXRpbiwgb3IgcHVuY3R1YXRpb24gdGhlIGRpcmVjdG9yeSByZWplY3RzLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9JTlZBTElEX0NIQVJBQ1RFUlMgPSAnbmFtZUludmFsaWRDaGFyYWN0ZXJzJztcblxuLyoqXG5UaGUgb25seSBjaGFyYWN0ZXJzIGEgcGx1Z2luIG5hbWUgbWF5IGhvbGQ6IEJhc2ljIExhdGluIGxldHRlcnMgYW5kIGRpZ2l0cywgc3BhY2VzLCBhbmQgdGhlIHRocmVlXG5wZXJtaXR0ZWQgcHVuY3R1YXRpb24gbWFya3MuXG4gKi9cbmNvbnN0IEFMTE9XRURfTkFNRV9DSEFSQUNURVJTID0gL15bQS1aYS16MC05IFxcLSsoKV0rJC87XG5cbi8qKlxuYE9ic2lkaWFuYCBhbmQgdGhlIHR3byB2YXJpYW50cyB0aGUgZGlyZWN0b3J5IGFsc28gcmVqZWN0cy5cbiAqL1xuY29uc3QgT0JTSURJQU5fVkFSSUFOVFMgPSAvb2JzaXxzaWRpYW4vaTtcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBlbmZvcmNpbmcgdGhlIENvbW11bml0eSBkaXJlY3RvcnkncyBjb25zdHJhaW50cyBvbiBhIHBsdWdpbidzIGBtYW5pZmVzdC5qc29uYCBgbmFtZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5pZmVzdE5hbWU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgRG9jdW1lbnQobm9kZTogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBjb25zdCBtYW5pZmVzdE9iamVjdCA9IGdldE1hbmlmZXN0T2JqZWN0KG5vZGUpO1xuXG4gICAgICAgIGlmICghbWFuaWZlc3RPYmplY3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZW1iZXIgPSBmaW5kTWFuaWZlc3RNZW1iZXIobWFuaWZlc3RPYmplY3QsICduYW1lJyk7XG5cbiAgICAgICAgaWYgKCFtZW1iZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuYW1lID0gZ2V0U3RyaW5nVmFsdWUobWVtYmVyLnZhbHVlKTtcblxuICAgICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcG9ydE5vZGUgPSB0b1JlcG9ydE5vZGUobWVtYmVyLnZhbHVlKTtcblxuICAgICAgICBpZiAoT0JTSURJQU5fVkFSSUFOVFMudGVzdChuYW1lKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9DT05UQUlOU19PQlNJRElBTixcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3BsdWdpbicpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0NPTlRBSU5TX1BMVUdJTixcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQUxMT1dFRF9OQU1FX0NIQVJBQ1RFUlMudGVzdChuYW1lKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9JTlZBTElEX0NIQVJBQ1RFUlMsXG4gICAgICAgICAgICBub2RlOiByZXBvcnROb2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIHRoZSBDb21tdW5pdHkgZGlyZWN0b3J5XFwncyBjb25zdHJhaW50cyBvbiBhIHBsdWdpblxcJ3MgYG1hbmlmZXN0Lmpzb25gIGBuYW1lYCdcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF9DT05UQUlOU19PQlNJRElBTl06ICdUaGUgYG5hbWVgIG11c3Qgbm90IGNvbnRhaW4gYE9ic2lkaWFuYCBvciBhIHZhcmlhbnQgb2YgaXQuIEl0IGlzIGltcGxpZWQgYnkgdGhlIGNvbnRleHQgb2YgdGhlIHBsdWdpbiBkaXJlY3RvcnkuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0NPTlRBSU5TX1BMVUdJTl06ICdUaGUgYG5hbWVgIG11c3Qgbm90IGNvbnRhaW4gYFBsdWdpbmAuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0lOVkFMSURfQ0hBUkFDVEVSU106ICdUaGUgYG5hbWVgIG11c3QgdXNlIEJhc2ljIExhdGluIG9ubHksIHdpdGggaHlwaGVucywgcGx1cyBzaWducyBhbmQgcGFyZW50aGVzZXMgdGhlIG9ubHkgcGVybWl0dGVkIHB1bmN0dWF0aW9uLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUtBLE1BQU0sK0JBQStCO0FBS3JDLE1BQU0sNkJBQTZCO0FBS25DLE1BQU0sZ0NBQWdDO0FBTTdDLE1BQU0sMEJBQTBCO0FBS2hDLE1BQU0sb0JBQW9CO0FBS25CLE1BQU0sZUFBZ0M7QUFBQSxFQUMzQyxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxTQUFTLE1BQXFCO0FBQzVCLGNBQU0saUJBQWlCLGtCQUFrQixJQUFJO0FBRTdDLFlBQUksQ0FBQyxnQkFBZ0I7QUFDbkI7QUFBQSxRQUNGO0FBRUEsY0FBTSxTQUFTLG1CQUFtQixnQkFBZ0IsTUFBTTtBQUV4RCxZQUFJLENBQUMsUUFBUTtBQUNYO0FBQUEsUUFDRjtBQUVBLGNBQU0sT0FBTyxlQUFlLE9BQU8sS0FBSztBQUV4QyxZQUFJLFNBQVMsTUFBTTtBQUNqQjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLGFBQWEsYUFBYSxPQUFPLEtBQUs7QUFFNUMsWUFBSSxrQkFBa0IsS0FBSyxJQUFJLEdBQUc7QUFDaEMsa0JBQVEsT0FBTztBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFFQSxZQUFJLEtBQUssWUFBWSxFQUFFLFNBQVMsUUFBUSxHQUFHO0FBQ3pDLGtCQUFRLE9BQU87QUFBQSxZQUNiLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBRUEsWUFBSSxDQUFDLHdCQUF3QixLQUFLLElBQUksR0FBRztBQUN2QyxrQkFBUSxPQUFPO0FBQUEsWUFDYixXQUFXO0FBQUEsWUFDWCxNQUFNO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsNEJBQTRCLEdBQUc7QUFBQSxNQUNoQyxDQUFDLDBCQUEwQixHQUFHO0FBQUEsTUFDOUIsQ0FBQyw2QkFBNkIsR0FBRztBQUFBLElBQ25DO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULE1BQU07QUFBQSxFQUNSO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/// <reference path="../../../library.d.mts" />
|
|
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';
|
|
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;
|
|
@@ -0,0 +1,217 @@
|
|
|
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 ensureBrowserProcess() {
|
|
8
|
+
const browserProcess = {
|
|
9
|
+
browser: true,
|
|
10
|
+
cwd() {
|
|
11
|
+
return '/';
|
|
12
|
+
},
|
|
13
|
+
env: {},
|
|
14
|
+
platform: 'android'
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// 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.
|
|
18
|
+
const existingProcess = globalThis.process;
|
|
19
|
+
|
|
20
|
+
if (!existingProcess) {
|
|
21
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
22
|
+
globalThis.process = browserProcess;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (existingProcess.versions?.node) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const existingProcessRecord = existingProcess;
|
|
31
|
+
|
|
32
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
33
|
+
existingProcessRecord[key] ??= value;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
existingProcessRecord['browser'] = true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
(function initEsm() {
|
|
40
|
+
ensureBrowserProcess();
|
|
41
|
+
})();
|
|
42
|
+
})();
|
|
43
|
+
|
|
44
|
+
import {
|
|
45
|
+
findManifestMember,
|
|
46
|
+
getManifestObject,
|
|
47
|
+
getManifestStringValue,
|
|
48
|
+
getMemberKey,
|
|
49
|
+
getStringValue,
|
|
50
|
+
JSON_NODE_TYPE_BOOLEAN,
|
|
51
|
+
JSON_NODE_TYPE_OBJECT,
|
|
52
|
+
JSON_NODE_TYPE_STRING,
|
|
53
|
+
toReportNode,
|
|
54
|
+
UNRELEASED_VERSION
|
|
55
|
+
} from "./manifest-helpers.mjs";
|
|
56
|
+
const MESSAGE_ID_DISALLOWED_KEY = "disallowedKey";
|
|
57
|
+
const MESSAGE_ID_DUPLICATE_KEY = "duplicateKey";
|
|
58
|
+
const MESSAGE_ID_EMPTY_FUNDING_URL = "emptyFundingUrl";
|
|
59
|
+
const MESSAGE_ID_INVALID_TYPE = "invalidType";
|
|
60
|
+
const MESSAGE_ID_INVALID_FUNDING_URL = "invalidFundingUrl";
|
|
61
|
+
const MESSAGE_ID_MISSING_KEY = "missingKey";
|
|
62
|
+
const MESSAGE_ID_MUST_BE_ROOT_OBJECT = "mustBeRootObject";
|
|
63
|
+
const ALWAYS_REQUIRED_KEYS = ["author", "description", "id", "isDesktopOnly", "name", "version"];
|
|
64
|
+
const KEY_NODE_TYPES = /* @__PURE__ */ new Map([
|
|
65
|
+
["author", [JSON_NODE_TYPE_STRING]],
|
|
66
|
+
["authorUrl", [JSON_NODE_TYPE_STRING]],
|
|
67
|
+
["description", [JSON_NODE_TYPE_STRING]],
|
|
68
|
+
["fundingUrl", [JSON_NODE_TYPE_OBJECT, JSON_NODE_TYPE_STRING]],
|
|
69
|
+
["id", [JSON_NODE_TYPE_STRING]],
|
|
70
|
+
["isDesktopOnly", [JSON_NODE_TYPE_BOOLEAN]],
|
|
71
|
+
["minAppVersion", [JSON_NODE_TYPE_STRING]],
|
|
72
|
+
["name", [JSON_NODE_TYPE_STRING]],
|
|
73
|
+
["version", [JSON_NODE_TYPE_STRING]]
|
|
74
|
+
]);
|
|
75
|
+
const manifestSchema = {
|
|
76
|
+
create(context) {
|
|
77
|
+
return {
|
|
78
|
+
Document(node) {
|
|
79
|
+
const manifestObject = getManifestObject(node);
|
|
80
|
+
if (!manifestObject) {
|
|
81
|
+
context.report({
|
|
82
|
+
messageId: MESSAGE_ID_MUST_BE_ROOT_OBJECT,
|
|
83
|
+
node: toReportNode(node)
|
|
84
|
+
});
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
reportDuplicateKeys({ context, manifestObject });
|
|
88
|
+
reportMissingKeys({ context, manifestObject });
|
|
89
|
+
reportKeyValues({ context, manifestObject });
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
meta: {
|
|
94
|
+
docs: {
|
|
95
|
+
description: "Validate the structure of a plugin's root `manifest.json`"
|
|
96
|
+
},
|
|
97
|
+
messages: {
|
|
98
|
+
[MESSAGE_ID_DISALLOWED_KEY]: "The `{{ key }}` property is not allowed in the manifest.",
|
|
99
|
+
[MESSAGE_ID_DUPLICATE_KEY]: "The `{{ key }}` property is defined more than once.",
|
|
100
|
+
[MESSAGE_ID_EMPTY_FUNDING_URL]: "The `fundingUrl` property cannot be empty. Remove it instead when no donations are accepted.",
|
|
101
|
+
[MESSAGE_ID_INVALID_FUNDING_URL]: "The `fundingUrl` object must only contain string values.",
|
|
102
|
+
[MESSAGE_ID_INVALID_TYPE]: "The `{{ key }}` property must be of type `{{ expectedType }}`, but was `{{ actualType }}`.",
|
|
103
|
+
[MESSAGE_ID_MISSING_KEY]: "The manifest is missing the required `{{ key }}` property.",
|
|
104
|
+
[MESSAGE_ID_MUST_BE_ROOT_OBJECT]: "The manifest must be a single JSON object."
|
|
105
|
+
},
|
|
106
|
+
schema: [],
|
|
107
|
+
type: "problem"
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
function reportDuplicateKeys(params) {
|
|
111
|
+
const { context, manifestObject } = params;
|
|
112
|
+
const seenKeys = /* @__PURE__ */ new Set();
|
|
113
|
+
for (const member of manifestObject.members) {
|
|
114
|
+
const key = getMemberKey(member);
|
|
115
|
+
if (seenKeys.has(key)) {
|
|
116
|
+
context.report({
|
|
117
|
+
data: { key },
|
|
118
|
+
messageId: MESSAGE_ID_DUPLICATE_KEY,
|
|
119
|
+
node: toReportNode(member.name)
|
|
120
|
+
});
|
|
121
|
+
} else {
|
|
122
|
+
seenKeys.add(key);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function reportFundingUrl(params) {
|
|
127
|
+
const { context, member } = params;
|
|
128
|
+
const stringValue = getStringValue(member.value);
|
|
129
|
+
if (stringValue !== null) {
|
|
130
|
+
if (stringValue === "") {
|
|
131
|
+
context.report({
|
|
132
|
+
messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
|
|
133
|
+
node: toReportNode(member.value)
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const fundingObject = member.value;
|
|
139
|
+
if (fundingObject.members.length === 0) {
|
|
140
|
+
context.report({
|
|
141
|
+
messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
|
|
142
|
+
node: toReportNode(fundingObject)
|
|
143
|
+
});
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
for (const fundingMember of fundingObject.members) {
|
|
147
|
+
const fundingValue = getStringValue(fundingMember.value);
|
|
148
|
+
if (fundingValue === null) {
|
|
149
|
+
context.report({
|
|
150
|
+
messageId: MESSAGE_ID_INVALID_FUNDING_URL,
|
|
151
|
+
node: toReportNode(fundingMember.value)
|
|
152
|
+
});
|
|
153
|
+
} else if (fundingValue === "") {
|
|
154
|
+
context.report({
|
|
155
|
+
messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
|
|
156
|
+
node: toReportNode(fundingMember.value)
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function reportKeyValues(params) {
|
|
162
|
+
const { context, manifestObject } = params;
|
|
163
|
+
for (const member of manifestObject.members) {
|
|
164
|
+
const key = getMemberKey(member);
|
|
165
|
+
const expectedNodeTypes = KEY_NODE_TYPES.get(key);
|
|
166
|
+
if (!expectedNodeTypes) {
|
|
167
|
+
context.report({
|
|
168
|
+
data: { key },
|
|
169
|
+
messageId: MESSAGE_ID_DISALLOWED_KEY,
|
|
170
|
+
node: toReportNode(member.name)
|
|
171
|
+
});
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (!expectedNodeTypes.includes(member.value.type)) {
|
|
175
|
+
context.report({
|
|
176
|
+
data: {
|
|
177
|
+
actualType: member.value.type,
|
|
178
|
+
expectedType: expectedNodeTypes.join(" or "),
|
|
179
|
+
key
|
|
180
|
+
},
|
|
181
|
+
messageId: MESSAGE_ID_INVALID_TYPE,
|
|
182
|
+
node: toReportNode(member.value)
|
|
183
|
+
});
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (key === "fundingUrl") {
|
|
187
|
+
reportFundingUrl({ context, member });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function reportMissingKeys(params) {
|
|
192
|
+
const { context, manifestObject } = params;
|
|
193
|
+
const requiredKeys = [...ALWAYS_REQUIRED_KEYS];
|
|
194
|
+
if (getManifestStringValue(manifestObject, "version") !== UNRELEASED_VERSION) {
|
|
195
|
+
requiredKeys.push("minAppVersion");
|
|
196
|
+
}
|
|
197
|
+
for (const key of requiredKeys) {
|
|
198
|
+
if (!findManifestMember(manifestObject, key)) {
|
|
199
|
+
context.report({
|
|
200
|
+
data: { key },
|
|
201
|
+
messageId: MESSAGE_ID_MISSING_KEY,
|
|
202
|
+
node: toReportNode(manifestObject)
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
export {
|
|
208
|
+
MESSAGE_ID_DISALLOWED_KEY,
|
|
209
|
+
MESSAGE_ID_DUPLICATE_KEY,
|
|
210
|
+
MESSAGE_ID_EMPTY_FUNDING_URL,
|
|
211
|
+
MESSAGE_ID_INVALID_FUNDING_URL,
|
|
212
|
+
MESSAGE_ID_INVALID_TYPE,
|
|
213
|
+
MESSAGE_ID_MISSING_KEY,
|
|
214
|
+
MESSAGE_ID_MUST_BE_ROOT_OBJECT,
|
|
215
|
+
manifestSchema
|
|
216
|
+
};
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9tYW5pZmVzdC1zY2hlbWEudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbWFuaWZlc3Qtc2NoZW1hXG4gKlxuICogVmFsaWRhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgYSBwbHVnaW4ncyByb290IGBtYW5pZmVzdC5qc29uYCAtIHRoZSByZXF1aXJlZCBrZXlzLCB0aGUga2V5cyB0aGUgQ29tbXVuaXR5XG4gKiBkaXJlY3RvcnkgZG9lcyBub3QgYWxsb3csIGR1cGxpY2F0ZSBrZXlzLCBlYWNoIHZhbHVlJ3MgdHlwZSwgYW5kIHRoZSBzaGFwZSBvZiBgZnVuZGluZ1VybGAuXG4gKlxuICogUnVucyBvbiB0aGUgYEBlc2xpbnQvanNvbmAgYGpzb24vanNvbmAgbGFuZ3VhZ2U7IHNlZSBgbWFuaWZlc3QtaGVscGVycy50c2AgZm9yIHdoeSB0aGUgQVNUIGlzIE1vbW9hXG4gKiByYXRoZXIgdGhhbiBFU1RyZWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHR5cGUge1xuICBKc29uTWVtYmVyTm9kZSxcbiAgSnNvbk9iamVjdE5vZGVcbn0gZnJvbSAnLi9tYW5pZmVzdC1oZWxwZXJzLnRzJztcblxuaW1wb3J0IHtcbiAgZmluZE1hbmlmZXN0TWVtYmVyLFxuICBnZXRNYW5pZmVzdE9iamVjdCxcbiAgZ2V0TWFuaWZlc3RTdHJpbmdWYWx1ZSxcbiAgZ2V0TWVtYmVyS2V5LFxuICBnZXRTdHJpbmdWYWx1ZSxcbiAgSlNPTl9OT0RFX1RZUEVfQk9PTEVBTixcbiAgSlNPTl9OT0RFX1RZUEVfT0JKRUNULFxuICBKU09OX05PREVfVFlQRV9TVFJJTkcsXG4gIHRvUmVwb3J0Tm9kZSxcbiAgVU5SRUxFQVNFRF9WRVJTSU9OXG59IGZyb20gJy4vbWFuaWZlc3QtaGVscGVycy50cyc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEga2V5IHRoZSBDb21tdW5pdHkgZGlyZWN0b3J5IGRvZXMgbm90IGFsbG93IGlzIHByZXNlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0RJU0FMTE9XRURfS0VZID0gJ2Rpc2FsbG93ZWRLZXknO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgc2FtZSBrZXkgYXBwZWFycyBtb3JlIHRoYW4gb25jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfRFVQTElDQVRFX0tFWSA9ICdkdXBsaWNhdGVLZXknO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBgZnVuZGluZ1VybGAgaXMgYW4gZW1wdHkgc3RyaW5nLCBhbiBlbXB0eSBvYmplY3QsIG9yIGFuIG9iamVjdCB3aXRoIGFuIGVtcHR5IHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9FTVBUWV9GVU5ESU5HX1VSTCA9ICdlbXB0eUZ1bmRpbmdVcmwnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIHZhbHVlIGhhcyB0aGUgd3JvbmcgdHlwZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfSU5WQUxJRF9UWVBFID0gJ2ludmFsaWRUeXBlJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSBgZnVuZGluZ1VybGAgb2JqZWN0IGhvbGRzIGEgbm9uLXN0cmluZyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfSU5WQUxJRF9GVU5ESU5HX1VSTCA9ICdpbnZhbGlkRnVuZGluZ1VybCc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgcmVxdWlyZWQga2V5IGlzIG1pc3NpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX01JU1NJTkdfS0VZID0gJ21pc3NpbmdLZXknO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgbWFuaWZlc3QncyB0b3AtbGV2ZWwgdmFsdWUgaXMgbm90IGFuIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfTVVTVF9CRV9ST09UX09CSkVDVCA9ICdtdXN0QmVSb290T2JqZWN0JztcblxuLyoqXG5UaGUga2V5cyBldmVyeSBtYW5pZmVzdCBtdXN0IGNhcnJ5LCB3aGV0aGVyIG9yIG5vdCB0aGUgcGx1Z2luIGhhcyBiZWVuIHJlbGVhc2VkLlxuICovXG5jb25zdCBBTFdBWVNfUkVRVUlSRURfS0VZUyA9IFsnYXV0aG9yJywgJ2Rlc2NyaXB0aW9uJywgJ2lkJywgJ2lzRGVza3RvcE9ubHknLCAnbmFtZScsICd2ZXJzaW9uJ107XG5cbi8qKlxuVGhlIE1vbW9hIG5vZGUgdHlwZSBlYWNoIGFsbG93ZWQga2V5J3MgdmFsdWUgbWF5IGhhdmUuIEEga2V5IGFic2VudCBmcm9tIHRoaXMgbWFwIGlzIG5vdCBhbGxvd2VkIGF0IGFsbC5cbiAqL1xuY29uc3QgS0VZX05PREVfVFlQRVMgPSBuZXcgTWFwPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+KFtcbiAgWydhdXRob3InLCBbSlNPTl9OT0RFX1RZUEVfU1RSSU5HXV0sXG4gIFsnYXV0aG9yVXJsJywgW0pTT05fTk9ERV9UWVBFX1NUUklOR11dLFxuICBbJ2Rlc2NyaXB0aW9uJywgW0pTT05fTk9ERV9UWVBFX1NUUklOR11dLFxuICBbJ2Z1bmRpbmdVcmwnLCBbSlNPTl9OT0RFX1RZUEVfT0JKRUNULCBKU09OX05PREVfVFlQRV9TVFJJTkddXSxcbiAgWydpZCcsIFtKU09OX05PREVfVFlQRV9TVFJJTkddXSxcbiAgWydpc0Rlc2t0b3BPbmx5JywgW0pTT05fTk9ERV9UWVBFX0JPT0xFQU5dXSxcbiAgWydtaW5BcHBWZXJzaW9uJywgW0pTT05fTk9ERV9UWVBFX1NUUklOR11dLFxuICBbJ25hbWUnLCBbSlNPTl9OT0RFX1RZUEVfU1RSSU5HXV0sXG4gIFsndmVyc2lvbicsIFtKU09OX05PREVfVFlQRV9TVFJJTkddXVxuXSk7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgdmFsaWRhdGluZyB0aGUgc3RydWN0dXJlIG9mIGEgcGx1Z2luJ3Mgcm9vdCBgbWFuaWZlc3QuanNvbmAuXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5pZmVzdFNjaGVtYTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICBEb2N1bWVudChub2RlOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0T2JqZWN0ID0gZ2V0TWFuaWZlc3RPYmplY3Qobm9kZSk7XG5cbiAgICAgICAgaWYgKCFtYW5pZmVzdE9iamVjdCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NVVNUX0JFX1JPT1RfT0JKRUNULFxuICAgICAgICAgICAgbm9kZTogdG9SZXBvcnROb2RlKG5vZGUpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwb3J0RHVwbGljYXRlS2V5cyh7IGNvbnRleHQsIG1hbmlmZXN0T2JqZWN0IH0pO1xuICAgICAgICByZXBvcnRNaXNzaW5nS2V5cyh7IGNvbnRleHQsIG1hbmlmZXN0T2JqZWN0IH0pO1xuICAgICAgICByZXBvcnRLZXlWYWx1ZXMoeyBjb250ZXh0LCBtYW5pZmVzdE9iamVjdCB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdWYWxpZGF0ZSB0aGUgc3RydWN0dXJlIG9mIGEgcGx1Z2luXFwncyByb290IGBtYW5pZmVzdC5qc29uYCdcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF9ESVNBTExPV0VEX0tFWV06ICdUaGUgYHt7IGtleSB9fWAgcHJvcGVydHkgaXMgbm90IGFsbG93ZWQgaW4gdGhlIG1hbmlmZXN0LicsXG4gICAgICBbTUVTU0FHRV9JRF9EVVBMSUNBVEVfS0VZXTogJ1RoZSBge3sga2V5IH19YCBwcm9wZXJ0eSBpcyBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlLicsXG4gICAgICBbTUVTU0FHRV9JRF9FTVBUWV9GVU5ESU5HX1VSTF06ICdUaGUgYGZ1bmRpbmdVcmxgIHByb3BlcnR5IGNhbm5vdCBiZSBlbXB0eS4gUmVtb3ZlIGl0IGluc3RlYWQgd2hlbiBubyBkb25hdGlvbnMgYXJlIGFjY2VwdGVkLicsXG4gICAgICBbTUVTU0FHRV9JRF9JTlZBTElEX0ZVTkRJTkdfVVJMXTogJ1RoZSBgZnVuZGluZ1VybGAgb2JqZWN0IG11c3Qgb25seSBjb250YWluIHN0cmluZyB2YWx1ZXMuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0lOVkFMSURfVFlQRV06ICdUaGUgYHt7IGtleSB9fWAgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGB7eyBleHBlY3RlZFR5cGUgfX1gLCBidXQgd2FzIGB7eyBhY3R1YWxUeXBlIH19YC4nLFxuICAgICAgW01FU1NBR0VfSURfTUlTU0lOR19LRVldOiAnVGhlIG1hbmlmZXN0IGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIGB7eyBrZXkgfX1gIHByb3BlcnR5LicsXG4gICAgICBbTUVTU0FHRV9JRF9NVVNUX0JFX1JPT1RfT0JKRUNUXTogJ1RoZSBtYW5pZmVzdCBtdXN0IGJlIGEgc2luZ2xlIEpTT04gb2JqZWN0LidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlcG9ydEZ1bmRpbmdVcmx9LlxuICovXG5pbnRlcmZhY2UgUmVwb3J0RnVuZGluZ1VybFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBgZnVuZGluZ1VybGAgbWVtYmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyOiBKc29uTWVtYmVyTm9kZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUgbWFuaWZlc3QgcmVwb3J0aW5nIGhlbHBlcnMuXG4gKi9cbmludGVyZmFjZSBSZXBvcnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIEVTTGludCBydWxlIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgbWFuaWZlc3QncyByb290IG9iamVjdCBub2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3RPYmplY3Q6IEpzb25PYmplY3ROb2RlO1xufVxuXG4vKipcbiAqIFJlcG9ydHMgZXZlcnkga2V5IHRoYXQgYXBwZWFycyBtb3JlIHRoYW4gb25jZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXBvcnRQYXJhbXN9LlxuICovXG5mdW5jdGlvbiByZXBvcnREdXBsaWNhdGVLZXlzKHBhcmFtczogUmVwb3J0UGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgY29udGV4dCwgbWFuaWZlc3RPYmplY3QgfSA9IHBhcmFtcztcbiAgY29uc3Qgc2VlbktleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBtYW5pZmVzdE9iamVjdC5tZW1iZXJzKSB7XG4gICAgY29uc3Qga2V5ID0gZ2V0TWVtYmVyS2V5KG1lbWJlcik7XG5cbiAgICBpZiAoc2VlbktleXMuaGFzKGtleSkpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YTogeyBrZXkgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0RVUExJQ0FURV9LRVksXG4gICAgICAgIG5vZGU6IHRvUmVwb3J0Tm9kZShtZW1iZXIubmFtZSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWVuS2V5cy5hZGQoa2V5KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXBvcnRzIHRoZSB3YXlzIGEgYGZ1bmRpbmdVcmxgIGNhbiBiZSBlbXB0eSBvciBob2xkIGEgbm9uLXN0cmluZyB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXBvcnRGdW5kaW5nVXJsUGFyYW1zfS5cbiAqL1xuZnVuY3Rpb24gcmVwb3J0RnVuZGluZ1VybChwYXJhbXM6IFJlcG9ydEZ1bmRpbmdVcmxQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjb250ZXh0LCBtZW1iZXIgfSA9IHBhcmFtcztcblxuICBjb25zdCBzdHJpbmdWYWx1ZSA9IGdldFN0cmluZ1ZhbHVlKG1lbWJlci52YWx1ZSk7XG5cbiAgaWYgKHN0cmluZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgaWYgKHN0cmluZ1ZhbHVlID09PSAnJykge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfRU1QVFlfRlVORElOR19VUkwsXG4gICAgICAgIG5vZGU6IHRvUmVwb3J0Tm9kZShtZW1iZXIudmFsdWUpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmdW5kaW5nT2JqZWN0ID0gbWVtYmVyLnZhbHVlIGFzIEpzb25PYmplY3ROb2RlO1xuXG4gIGlmIChmdW5kaW5nT2JqZWN0Lm1lbWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0VNUFRZX0ZVTkRJTkdfVVJMLFxuICAgICAgbm9kZTogdG9SZXBvcnROb2RlKGZ1bmRpbmdPYmplY3QpXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCBmdW5kaW5nTWVtYmVyIG9mIGZ1bmRpbmdPYmplY3QubWVtYmVycykge1xuICAgIGNvbnN0IGZ1bmRpbmdWYWx1ZSA9IGdldFN0cmluZ1ZhbHVlKGZ1bmRpbmdNZW1iZXIudmFsdWUpO1xuXG4gICAgaWYgKGZ1bmRpbmdWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfSU5WQUxJRF9GVU5ESU5HX1VSTCxcbiAgICAgICAgbm9kZTogdG9SZXBvcnROb2RlKGZ1bmRpbmdNZW1iZXIudmFsdWUpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGZ1bmRpbmdWYWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0VNUFRZX0ZVTkRJTkdfVVJMLFxuICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUoZnVuZGluZ01lbWJlci52YWx1ZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgZXZlcnkga2V5IHRoYXQgaXMgbm90IGFsbG93ZWQsIGFuZCBldmVyeSBhbGxvd2VkIGtleSB3aG9zZSB2YWx1ZSBoYXMgdGhlIHdyb25nIHR5cGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgUmVwb3J0UGFyYW1zfS5cbiAqL1xuZnVuY3Rpb24gcmVwb3J0S2V5VmFsdWVzKHBhcmFtczogUmVwb3J0UGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgY29udGV4dCwgbWFuaWZlc3RPYmplY3QgfSA9IHBhcmFtcztcblxuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBtYW5pZmVzdE9iamVjdC5tZW1iZXJzKSB7XG4gICAgY29uc3Qga2V5ID0gZ2V0TWVtYmVyS2V5KG1lbWJlcik7XG4gICAgY29uc3QgZXhwZWN0ZWROb2RlVHlwZXMgPSBLRVlfTk9ERV9UWVBFUy5nZXQoa2V5KTtcblxuICAgIGlmICghZXhwZWN0ZWROb2RlVHlwZXMpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YTogeyBrZXkgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0RJU0FMTE9XRURfS0VZLFxuICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUobWVtYmVyLm5hbWUpXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghZXhwZWN0ZWROb2RlVHlwZXMuaW5jbHVkZXMobWVtYmVyLnZhbHVlLnR5cGUpKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY3R1YWxUeXBlOiBtZW1iZXIudmFsdWUudHlwZSxcbiAgICAgICAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkTm9kZVR5cGVzLmpvaW4oJyBvciAnKSxcbiAgICAgICAgICBrZXlcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0lOVkFMSURfVFlQRSxcbiAgICAgICAgbm9kZTogdG9SZXBvcnROb2RlKG1lbWJlci52YWx1ZSlcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2Z1bmRpbmdVcmwnKSB7XG4gICAgICByZXBvcnRGdW5kaW5nVXJsKHsgY29udGV4dCwgbWVtYmVyIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgZXZlcnkgcmVxdWlyZWQga2V5IHRoZSBtYW5pZmVzdCBpcyBtaXNzaW5nLlxuICpcbiAqIGBtaW5BcHBWZXJzaW9uYCBpcyByZXF1aXJlZCBvbmx5IG9uY2UgdGhlIHBsdWdpbiBoYXMgYmVlbiByZWxlYXNlZC4gYHVwZGF0ZVZlcnNpb25JbkZpbGVzRm9yUGx1Z2luYFxuICogd3JpdGVzIGl0IGF0IHJlbGVhc2UgdGltZSwgc28gYSByZXBvIHN0aWxsIGF0IHZlcnNpb24gYDAuMC4wYCBsZWdpdGltYXRlbHkgaGFzIG5vbmUgYW5kIG11c3Qgbm90IGJlXG4gKiByZXBvcnRlZCBmb3IgaXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgUmVwb3J0UGFyYW1zfS5cbiAqL1xuZnVuY3Rpb24gcmVwb3J0TWlzc2luZ0tleXMocGFyYW1zOiBSZXBvcnRQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjb250ZXh0LCBtYW5pZmVzdE9iamVjdCB9ID0gcGFyYW1zO1xuICBjb25zdCByZXF1aXJlZEtleXMgPSBbLi4uQUxXQVlTX1JFUVVJUkVEX0tFWVNdO1xuXG4gIGlmIChnZXRNYW5pZmVzdFN0cmluZ1ZhbHVlKG1hbmlmZXN0T2JqZWN0LCAndmVyc2lvbicpICE9PSBVTlJFTEVBU0VEX1ZFUlNJT04pIHtcbiAgICByZXF1aXJlZEtleXMucHVzaCgnbWluQXBwVmVyc2lvbicpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgcmVxdWlyZWRLZXlzKSB7XG4gICAgaWYgKCFmaW5kTWFuaWZlc3RNZW1iZXIobWFuaWZlc3RPYmplY3QsIGtleSkpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YTogeyBrZXkgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX01JU1NJTkdfS0VZLFxuICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUobWFuaWZlc3RPYmplY3QpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUtBLE1BQU0sNEJBQTRCO0FBS2xDLE1BQU0sMkJBQTJCO0FBS2pDLE1BQU0sK0JBQStCO0FBS3JDLE1BQU0sMEJBQTBCO0FBS2hDLE1BQU0saUNBQWlDO0FBS3ZDLE1BQU0seUJBQXlCO0FBSy9CLE1BQU0saUNBQWlDO0FBSzlDLE1BQU0sdUJBQXVCLENBQUMsVUFBVSxlQUFlLE1BQU0saUJBQWlCLFFBQVEsU0FBUztBQUsvRixN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
|
|
@@ -41,6 +41,10 @@ function ensureBrowserProcess() {
|
|
|
41
41
|
})();
|
|
42
42
|
})();
|
|
43
43
|
|
|
44
|
+
import { manifestDescription } from "./manifest-description.mjs";
|
|
45
|
+
import { manifestId } from "./manifest-id.mjs";
|
|
46
|
+
import { manifestName } from "./manifest-name.mjs";
|
|
47
|
+
import { manifestSchema } from "./manifest-schema.mjs";
|
|
44
48
|
import { noAsyncCallbackToUnsafeReturn } from "./no-async-callback-to-unsafe-return.mjs";
|
|
45
49
|
import { noUntrustedInputEvents } from "./no-untrusted-input-events.mjs";
|
|
46
50
|
import { noUnusedParamsMembers } from "./no-unused-params-members.mjs";
|
|
@@ -53,6 +57,10 @@ import { requireMethodTemplate } from "./require-method-template.mjs";
|
|
|
53
57
|
import { requireSuperCall } from "./require-super-call.mjs";
|
|
54
58
|
const obsidianDevUtilsPlugin = {
|
|
55
59
|
rules: {
|
|
60
|
+
"manifest-description": manifestDescription,
|
|
61
|
+
"manifest-id": manifestId,
|
|
62
|
+
"manifest-name": manifestName,
|
|
63
|
+
"manifest-schema": manifestSchema,
|
|
56
64
|
"no-async-callback-to-unsafe-return": noAsyncCallbackToUnsafeReturn,
|
|
57
65
|
"no-untrusted-input-events": noUntrustedInputEvents,
|
|
58
66
|
"no-unused-params-members": noUnusedParamsMembers,
|
|
@@ -68,4 +76,4 @@ const obsidianDevUtilsPlugin = {
|
|
|
68
76
|
export {
|
|
69
77
|
obsidianDevUtilsPlugin
|
|
70
78
|
};
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9vYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHBsdWdpbiBmb3IgT2JzaWRpYW4gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzLlxuICovXG5pbXBvcnQgdHlwZSB7IEVTTGludCB9IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IG1hbmlmZXN0RGVzY3JpcHRpb24gfSBmcm9tICcuL21hbmlmZXN0LWRlc2NyaXB0aW9uLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0SWQgfSBmcm9tICcuL21hbmlmZXN0LWlkLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0TmFtZSB9IGZyb20gJy4vbWFuaWZlc3QtbmFtZS50cyc7XG5pbXBvcnQgeyBtYW5pZmVzdFNjaGVtYSB9IGZyb20gJy4vbWFuaWZlc3Qtc2NoZW1hLnRzJztcbmltcG9ydCB7IG5vQXN5bmNDYWxsYmFja1RvVW5zYWZlUmV0dXJuIH0gZnJvbSAnLi9uby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuLnRzJztcbmltcG9ydCB7IG5vVW50cnVzdGVkSW5wdXRFdmVudHMgfSBmcm9tICcuL25vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMudHMnO1xuaW1wb3J0IHsgbm9VbnVzZWRQYXJhbXNNZW1iZXJzIH0gZnJvbSAnLi9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMnO1xuaW1wb3J0IHsgbm9Vc2VkVW5kZXJzY29yZVZhcmlhYmxlcyB9IGZyb20gJy4vbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcy50cyc7XG5pbXBvcnQgeyBwYXJhbXNPcHRpb25zTmFtZU1hdGNoIH0gZnJvbSAnLi9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoLnRzJztcbmltcG9ydCB7IHByZWZlck5vb3BBc3luYyB9IGZyb20gJy4vcHJlZmVyLW5vb3AtYXN5bmMudHMnO1xuaW1wb3J0IHsgcmVhZG9ubHlQYXJhbXNPcHRpb25zUmVzdWx0TWVtYmVycyB9IGZyb20gJy4vcmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMudHMnO1xuaW1wb3J0IHsgcmVxdWlyZUNvbXBvbmVudFN1ZmZpeCB9IGZyb20gJy4vcmVxdWlyZS1jb21wb25lbnQtc3VmZml4LnRzJztcbmltcG9ydCB7IHJlcXVpcmVNZXRob2RUZW1wbGF0ZSB9IGZyb20gJy4vcmVxdWlyZS1tZXRob2QtdGVtcGxhdGUudHMnO1xuaW1wb3J0IHsgcmVxdWlyZVN1cGVyQ2FsbCB9IGZyb20gJy4vcmVxdWlyZS1zdXBlci1jYWxsLnRzJztcblxuLyoqXG4gKiBFU0xpbnQgcGx1Z2luIGJ1bmRsaW5nIGV2ZXJ5IGBvYnNpZGlhbi1kZXYtdXRpbHNgIGN1c3RvbSBydWxlLCByZWdpc3RlcmVkIHVuZGVyIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBvYnNpZGlhbkRldlV0aWxzUGx1Z2luOiBFU0xpbnQuUGx1Z2luID0ge1xuICBydWxlczoge1xuICAgICdtYW5pZmVzdC1kZXNjcmlwdGlvbic6IG1hbmlmZXN0RGVzY3JpcHRpb24sXG4gICAgJ21hbmlmZXN0LWlkJzogbWFuaWZlc3RJZCxcbiAgICAnbWFuaWZlc3QtbmFtZSc6IG1hbmlmZXN0TmFtZSxcbiAgICAnbWFuaWZlc3Qtc2NoZW1hJzogbWFuaWZlc3RTY2hlbWEsXG4gICAgJ25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4nOiBub0FzeW5jQ2FsbGJhY2tUb1Vuc2FmZVJldHVybixcbiAgICAnbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cyc6IG5vVW50cnVzdGVkSW5wdXRFdmVudHMsXG4gICAgJ25vLXVudXNlZC1wYXJhbXMtbWVtYmVycyc6IG5vVW51c2VkUGFyYW1zTWVtYmVycyxcbiAgICAnbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6IG5vVXNlZFVuZGVyc2NvcmVWYXJpYWJsZXMsXG4gICAgJ3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnOiBwYXJhbXNPcHRpb25zTmFtZU1hdGNoLFxuICAgICdwcmVmZXItbm9vcC1hc3luYyc6IHByZWZlck5vb3BBc3luYyxcbiAgICAncmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMnOiByZWFkb25seVBhcmFtc09wdGlvbnNSZXN1bHRNZW1iZXJzLFxuICAgICdyZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnOiByZXF1aXJlQ29tcG9uZW50U3VmZml4LFxuICAgICdyZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZSc6IHJlcXVpcmVNZXRob2RUZW1wbGF0ZSxcbiAgICAncmVxdWlyZS1zdXBlci1jYWxsJzogcmVxdWlyZVN1cGVyQ2FsbFxuICB9XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMscUNBQXFDO0FBQzlDLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsaUNBQWlDO0FBQzFDLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsdUJBQXVCO0FBQ2hDLFNBQVMsMENBQTBDO0FBQ25ELFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsd0JBQXdCO0FBSzFCLE1BQU0seUJBQXdDO0FBQUEsRUFDbkQsT0FBTztBQUFBLElBQ0wsd0JBQXdCO0FBQUEsSUFDeEIsZUFBZTtBQUFBLElBQ2YsaUJBQWlCO0FBQUEsSUFDakIsbUJBQW1CO0FBQUEsSUFDbkIsc0NBQXNDO0FBQUEsSUFDdEMsNkJBQTZCO0FBQUEsSUFDN0IsNEJBQTRCO0FBQUEsSUFDNUIsZ0NBQWdDO0FBQUEsSUFDaEMsNkJBQTZCO0FBQUEsSUFDN0IscUJBQXFCO0FBQUEsSUFDckIsMENBQTBDO0FBQUEsSUFDMUMsNEJBQTRCO0FBQUEsSUFDNUIsMkJBQTJCO0FBQUEsSUFDM0Isc0JBQXNCO0FBQUEsRUFDeEI7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -51,6 +51,7 @@ import {
|
|
|
51
51
|
} from "../../path.mjs";
|
|
52
52
|
import { assertNonNullable } from "../../type-guards.mjs";
|
|
53
53
|
import { ObsidianDevUtilsRepoPaths } from "../obsidian-dev-utils-repo-paths.mjs";
|
|
54
|
+
import { resolveToolCommand } from "../package-manager.mjs";
|
|
54
55
|
import {
|
|
55
56
|
execFromRoot,
|
|
56
57
|
getRootFolder,
|
|
@@ -80,9 +81,9 @@ async function lint(options) {
|
|
|
80
81
|
);
|
|
81
82
|
}
|
|
82
83
|
const targets = paths?.length ? paths : [ObsidianPluginRepoPaths.CurrentFolder];
|
|
83
|
-
await execFromRoot([
|
|
84
|
+
await execFromRoot([...resolveToolCommand({ tool: "eslint" }), ...shouldFix ? ["--fix"] : [], { batchedArguments: targets }]);
|
|
84
85
|
}
|
|
85
86
|
export {
|
|
86
87
|
lint
|
|
87
88
|
};
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExpbnRpbmcgdXRpbGl0eSBmb3IgRVNMaW50IGNvbmZpZ3VyYXRpb24gd2l0aCBzdXBwb3J0IGZvciBhdXRvbWF0aWMgZml4aW5nLlxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZnVuY3Rpb24gdG8gbGludCBmaWxlcyBiYXNlZCBvbiB0aGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gZGVmaW5lZCBpbiBgZXNsaW50LmNvbmZpZy50c2AuXG4gKiBJdCBjYW4gYXV0b21hdGljYWxseSBmaXggbGludGluZyBpc3N1ZXMgaWYgc3BlY2lmaWVkLCBhbmQgbG9ncyByZXN1bHRzIHRvIHRoZSBjb25zb2xlLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNwIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi9wbHVnaW4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0Rm9sZGVyTmFtZSxcbiAgam9pblxufSBmcm9tICcuLi8uLi9wYXRoLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4uL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQge1xuICBleGVjRnJvbVJvb3QsXG4gIGdldFJvb3RGb2xkZXIsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlXG59IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBsaW50LiBJZiBvbWl0dGVkLCBsaW50cyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZpeCBsaW50aW5nIGlzc3VlcyBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGaXg/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIExpbnQgdGhlIHByb2plY3Qgd2l0aCBFU0xpbnQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIExpbnRPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnQob3B0aW9ucz86IExpbnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcGF0aHMsIHNob3VsZEZpeCB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgY29uZmlnRmlsZXMgPSBbXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRXNsaW50Q29uZmlnSnMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRXNsaW50Q29uZmlnTWpzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ0NqcyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Fc2xpbnRDb25maWdUcyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Fc2xpbnRDb25maWdNdHMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRXNsaW50Q29uZmlnQ3RzXG4gIF07XG5cbiAgY29uc3QgZG9lc0NvbmZpZ0ZpbGVFeGlzdCA9IGNvbmZpZ0ZpbGVzLnNvbWUoKGNvbmZpZ0ZpbGUpID0+IHtcbiAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogY29uZmlnRmlsZSB9KTtcbiAgICByZXR1cm4gZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCk7XG4gIH0pO1xuXG4gIGlmICghZG9lc0NvbmZpZ0ZpbGVFeGlzdCkge1xuICAgIGdldExpYkRlYnVnZ2VyKCdFU0xpbnQ6bGludCcpKCdFU0xpbnQgY29uZmlndXJhdGlvbiBmaWxlIG5vdCBmb3VuZC4gQ3JlYXRpbmcgZGVmYXVsdCBjb25maWcuLi4nKTtcbiAgICBjb25zdCBwYWNrYWdlRm9sZGVyID0gZ2V0Um9vdEZvbGRlcihnZXRGb2xkZXJOYW1lKGltcG9ydC5tZXRhLnVybCkpO1xuICAgIGFzc2VydE5vbk51bGxhYmxlKHBhY2thZ2VGb2xkZXIsICdQYWNrYWdlIGZvbGRlciBub3QgZm91bmQnKTtcbiAgICBhd2FpdCBjcChcbiAgICAgIGpvaW4ocGFja2FnZUZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0VGVtcGxhdGVzLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyksXG4gICAgICByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyB9KVxuICAgICk7XG4gIH1cblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ2VzbGludCcgfSksIC4uLihzaG91bGRGaXggPyBbJy0tZml4J10gOiBbXSksIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU0EsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxVQUFVO0FBRW5CLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsK0JBQStCO0FBQ3hDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxpQ0FBaUM7QUFDMUMsU0FBUywwQkFBMEI7QUFDbkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBd0JQLGVBQXNCLEtBQUssU0FBc0M7QUFDL0QsUUFBTSxFQUFFLE9BQU8sVUFBVSxJQUFJLFdBQVcsQ0FBQztBQUN6QyxRQUFNLGNBQWM7QUFBQSxJQUNsQix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxFQUMxQjtBQUVBLFFBQU0sc0JBQXNCLFlBQVksS0FBSyxDQUFDLGVBQWU7QUFDM0QsVUFBTSxpQkFBaUIsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsV0FBTyxXQUFXLGNBQWM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsTUFBSSxDQUFDLHFCQUFxQjtBQUN4QixtQkFBZSxhQUFhLEVBQUUsaUVBQWlFO0FBQy9GLFVBQU0sZ0JBQWdCLGNBQWMsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQUNsRSxzQkFBa0IsZUFBZSwwQkFBMEI7QUFDM0QsVUFBTTtBQUFBLE1BQ0osS0FBSyxlQUFlLDBCQUEwQixlQUFlLDBCQUEwQixlQUFlO0FBQUEsTUFDdEcsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsZ0JBQWdCLENBQUM7QUFBQSxJQUMzRTtBQUFBLEVBQ0Y7QUFHQSxRQUFNLFVBQVUsT0FBTyxTQUFTLFFBQVEsQ0FBQyx3QkFBd0IsYUFBYTtBQUU5RSxRQUFNLGFBQWEsQ0FBQyxHQUFHLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDLEdBQUcsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBSSxFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQztBQUNoSTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -57,6 +57,7 @@ import {
|
|
|
57
57
|
import { assertNonNullable } from "../../type-guards.mjs";
|
|
58
58
|
import { getNonIgnoredFiles } from "../git.mjs";
|
|
59
59
|
import { ObsidianDevUtilsRepoPaths } from "../obsidian-dev-utils-repo-paths.mjs";
|
|
60
|
+
import { resolveToolCommand } from "../package-manager.mjs";
|
|
60
61
|
import {
|
|
61
62
|
execFromRoot,
|
|
62
63
|
getRootFolder,
|
|
@@ -94,12 +95,11 @@ async function lint(options) {
|
|
|
94
95
|
);
|
|
95
96
|
}
|
|
96
97
|
const targets = paths?.length ? paths : [ObsidianPluginRepoPaths.CurrentFolder];
|
|
97
|
-
await execFromRoot([
|
|
98
|
+
await execFromRoot([...resolveToolCommand({ tool: "markdownlint-cli2" }), ...shouldFix ? ["--fix"] : [], { batchedArguments: targets }]);
|
|
98
99
|
const rootFolder = getRootFolder() ?? process.cwd();
|
|
99
100
|
const mdFiles = paths?.length ? paths.map((p) => relative(rootFolder, p).replaceAll("\\", "/") || p) : await getMarkdownFiles();
|
|
100
101
|
await execFromRoot([
|
|
101
|
-
"
|
|
102
|
-
"linkinator",
|
|
102
|
+
...resolveToolCommand({ tool: "linkinator" }),
|
|
103
103
|
"--retry",
|
|
104
104
|
"--retry-errors",
|
|
105
105
|
"--retry-errors-count",
|
|
@@ -130,4 +130,4 @@ async function getMarkdownFiles() {
|
|
|
130
130
|
export {
|
|
131
131
|
lint
|
|
132
132
|
};
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExpbnQgbWFya2Rvd24gZG9jdW1lbnRhdGlvbiB1c2luZyBgbWFya2Rvd25saW50LWNsaTJgIGFuZCBgbGlua2luYXRvcmAuXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2Jcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uLy4uL2RlYnVnLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGdldEZvbGRlck5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IGdldE5vbklnbm9yZWRGaWxlcyB9IGZyb20gJy4uL2dpdC50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQge1xuICBjaGVja0lzSW5Ob2RlTW9kdWxlcyxcbiAgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CXG59IGZyb20gJy4vbWFya2Rvd25saW50LWlnbm9yZXMudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBsaW50LiBJZiBvbWl0dGVkLCBsaW50cyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZpeCBsaW50aW5nIGlzc3VlcyBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGaXg/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIExpbnQgbWFya2Rvd24gZG9jdW1lbnRhdGlvbiB1c2luZyBgbWFya2Rvd25saW50LWNsaTJgIGFuZCBgbGlua2luYXRvcmAuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIExpbnRPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnQob3B0aW9ucz86IExpbnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcGF0aHMsIHNob3VsZEZpeCA9IGZhbHNlIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCBjb25maWdGaWxlcyA9IFtcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ1lhbWwsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ0NqcyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ0pzb25jLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ0pzb24sXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWWFtbCxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdZbWwsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnQ2pzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ01qc1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QpIHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignbWFya2Rvd25saW50OmxpbnQnKSgnbWFya2Rvd25saW50IGNvbmZpZ3VyYXRpb24gZmlsZSBub3QgZm91bmQuIENyZWF0aW5nIGRlZmF1bHQgY29uZmlnLi4uJyk7XG4gICAgY29uc3QgcGFja2FnZUZvbGRlciA9IGdldFJvb3RGb2xkZXIoZ2V0Rm9sZGVyTmFtZShpbXBvcnQubWV0YS51cmwpKTtcbiAgICBhc3NlcnROb25OdWxsYWJsZShwYWNrYWdlRm9sZGVyLCAnUGFja2FnZSBmb2xkZXIgbm90IGZvdW5kJyk7XG4gICAgYXdhaXQgY3AoXG4gICAgICBqb2luKHBhY2thZ2VGb2xkZXIsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdFRlbXBsYXRlcywgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzKSxcbiAgICAgIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcyB9KVxuICAgICk7XG4gIH1cblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaGVzIGFyZSBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ21hcmtkb3dubGludC1jbGkyJyB9KSwgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgfHwgcClcbiAgICA6IGF3YWl0IGdldE1hcmtkb3duRmlsZXMoKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnbGlua2luYXRvcicgfSksXG4gICAgJy0tcmV0cnknLFxuICAgICctLXJldHJ5LWVycm9ycycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWNvdW50JyxcbiAgICAnMycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWppdHRlcicsXG4gICAgJzUnLFxuICAgICctLXVybC1yZXdyaXRlLXNlYXJjaCcsXG4gICAgU3RyaW5nLnJhd2BodHRwczovL3d3d1xcLm5wbWpzXFwuY29tL3BhY2thZ2UvYCxcbiAgICAnLS11cmwtcmV3cml0ZS1yZXBsYWNlJyxcbiAgICAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJyxcbiAgICB7IGJhdGNoZWRBcmd1bWVudHM6IG1kRmlsZXMgfVxuICBdKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2l0IHBhdGhzcGVjIG1hdGNoaW5nIGV2ZXJ5IG1hcmtkb3duIGZpbGUgaW4gdGhlIHJlcG9zaXRvcnksIGF0IGFueSBkZXB0aC5cbiAqL1xuY29uc3QgTUFSS0RPV05fUEFUSFNQRUMgPSAnKi5tZCc7XG5cbi8qKlxuICogTGlzdHMgdGhlIG1hcmtkb3duIGZpbGVzIHRvIGhhbmQgdG8gYGxpbmtpbmF0b3JgLlxuICpcbiAqIGBsaW5raW5hdG9yYCB0YWtlcyBhIGZpbGUgbGlzdCByYXRoZXIgdGhhbiBhbiBpZ25vcmUgY29uZmlndXJhdGlvbiwgc28gdGhlIGdpdGlnbm9yZWQgZmlsZXMgaGF2ZSB0byBiZVxuICogZHJvcHBlZCBiZWZvcmUgaXQgaXMgaW52b2tlZC4gR2l0IGl0c2VsZiBhbnN3ZXJzIHRoYXQgKG5lc3RlZCBpZ25vcmUgZmlsZXMsIGAhYCBuZWdhdGlvbnMgYW5kIGFsbCk7IHRoZVxuICogaGFuZC1tYWludGFpbmVkIGdsb2IgZXhjbHVzaW9ucyBiZWxvdyBhcmUgb25seSB0aGUgZmFsbGJhY2sgZm9yIGEgY2hlY2tvdXQgd2l0aG91dCBnaXQsIGFuZCB0aGV5IGFyZSB0aGVcbiAqIHZlcnkgbGlzdHMgdGhpcyBpbmRpcmVjdGlvbiBleGlzdHMgdG8gc3RvcCBmcm9tIGRyaWZ0aW5nLlxuICpcbiAqIFRoZSBgbm9kZV9tb2R1bGVzYCBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgZ2l0LWRlcml2ZWQgbGlzdCB0b28sIGFuZCBkZWxpYmVyYXRlbHkgc286IGdpdCBvbmx5IHNraXBzXG4gKiB3aGF0IHRoZSByZXBvc2l0b3J5IGFza2VkIGl0IHRvIHNraXAsIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhIHZlbmRvcmVkIGBub2RlX21vZHVsZXNgXG4gKiB0cmVlLiBUaGF0IGlzIHRoZSBvbmUgZXhjbHVzaW9uIGAuZ2l0aWdub3JlYCBjYW5ub3QgYW5zd2VyIFx1MjAxNCBzZWUgYG1hcmtkb3dubGludC1pZ25vcmVzLnRzYC4gQXBwbHlpbmcgaXRcbiAqIGhlcmUga2VlcHMgYGxpbmtpbmF0b3JgIGluIHN0ZXAgd2l0aCB0aGUgbWFya2Rvd25saW50IGhhbGYsIHdoaWNoIGlnbm9yZXMgdGhlIHNhbWUgcGF0aHMgYnkgZ2xvYi5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG1hcmtkb3duIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG5vbklnbm9yZWRGaWxlcyA9IGF3YWl0IGdldE5vbklnbm9yZWRGaWxlcyh7IHBhdHRlcm5zOiBbTUFSS0RPV05fUEFUSFNQRUNdIH0pO1xuICBpZiAobm9uSWdub3JlZEZpbGVzKSB7XG4gICAgcmV0dXJuIG5vbklnbm9yZWRGaWxlcy5maWx0ZXIoKHBhdGgpID0+ICFjaGVja0lzSW5Ob2RlTW9kdWxlcyhwYXRoKSk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdG9BcnJheShnbG9iKFsnKiovKi5tZCddLCB7XG4gICAgZXhjbHVkZTogW1xuICAgICAgJy5naXQvKionLFxuICAgICAgJ2Rpc3QvKionLFxuICAgICAgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CXG4gICAgXVxuICB9KSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGdCQUFnQjtBQUV6QixTQUFTLGVBQWU7QUFDeEIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLGlDQUFpQztBQUMxQyxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXdCUCxlQUFzQixLQUFLLFNBQXNDO0FBQy9ELFFBQU0sRUFBRSxPQUFPLFlBQVksTUFBTSxJQUFJLFdBQVcsQ0FBQztBQUNqRCxRQUFNLGNBQWM7QUFBQSxJQUNsQix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxFQUMxQjtBQUVBLFFBQU0sc0JBQXNCLFlBQVksS0FBSyxDQUFDLGVBQWU7QUFDM0QsVUFBTSxpQkFBaUIsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsV0FBTyxXQUFXLGNBQWM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsTUFBSSxDQUFDLHFCQUFxQjtBQUN4QixtQkFBZSxtQkFBbUIsRUFBRSx1RUFBdUU7QUFDM0csVUFBTSxnQkFBZ0IsY0FBYyxjQUFjLFlBQVksR0FBRyxDQUFDO0FBQ2xFLHNCQUFrQixlQUFlLDBCQUEwQjtBQUMzRCxVQUFNO0FBQUEsTUFDSixLQUFLLGVBQWUsMEJBQTBCLGVBQWUsMEJBQTBCLHlCQUF5QjtBQUFBLE1BQ2hILHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLDBCQUEwQixDQUFDO0FBQUEsSUFDckY7QUFBQSxFQUNGO0FBR0EsUUFBTSxVQUFVLE9BQU8sU0FBUyxRQUFRLENBQUMsd0JBQXdCLGFBQWE7QUFFOUUsUUFBTSxhQUFhLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDLEdBQUcsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBSSxFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQztBQUd6SSxRQUFNLGFBQWEsY0FBYyxLQUFLLFFBQVEsSUFBSTtBQUNsRCxRQUFNLFVBQVUsT0FBTyxTQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLFNBQVMsWUFBWSxDQUFDLEVBQUUsV0FBVyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQ25FLE1BQU0saUJBQWlCO0FBRTNCLFFBQU0sYUFBYTtBQUFBLElBQ2pCLEdBQUcsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFBQSxJQUM1QztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsSUFDQSxFQUFFLGtCQUFrQixRQUFRO0FBQUEsRUFDOUIsQ0FBQztBQUNIO0FBS0EsTUFBTSxvQkFBb0I7QUFpQjFCLGVBQWUsbUJBQXNDO0FBQ25ELFFBQU0sa0JBQWtCLE1BQU0sbUJBQW1CLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDbEYsTUFBSSxpQkFBaUI7QUFDbkIsV0FBTyxnQkFBZ0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDO0FBQUEsRUFDckU7QUFFQSxTQUFPLE1BQU0sUUFBUSxLQUFLLENBQUMsU0FBUyxHQUFHO0FBQUEsSUFDckMsU0FBUztBQUFBLE1BQ1A7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUMsQ0FBQztBQUNKOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* Only includes tools that can operate on individual files. Whole-project checks
|
|
11
11
|
* (TypeScript compilation, unit tests) are left to CI.
|
|
12
12
|
*
|
|
13
|
-
* Commands
|
|
13
|
+
* Commands run through the package manager that owns the tree — `npm run ... --`, `bun run ... --`, and
|
|
14
|
+
* so on — so nano-staged file paths are forwarded as CLI arguments.
|
|
14
15
|
*/
|
|
15
16
|
export declare const obsidianDevUtilsConfig: Record<string, string[]>;
|
|
16
17
|
/**
|
|
@@ -25,7 +26,9 @@ export declare const obsidianDevUtilsConfig: Record<string, string[]>;
|
|
|
25
26
|
* every npm script gets — but both share the same notion of an off value, via {@link isEnvVariableOff}.
|
|
26
27
|
*
|
|
27
28
|
* This is a function rather than module-level code so importing the package barrel never triggers the
|
|
28
|
-
* `.env` read or the process exit; call it from the thin `scripts/nano-staged-config.ts` entry.
|
|
29
|
+
* `.env` read or the process exit; call it from the thin `scripts/nano-staged-config.ts` entry. Resolving the
|
|
30
|
+
* package manager is the one thing that does run at module scope, and it does neither of those two
|
|
31
|
+
* things — it only probes for a lockfile.
|
|
29
32
|
*
|
|
30
33
|
* @returns The nano-staged task configuration. Does not return when the opt-out is active.
|
|
31
34
|
*/
|