obsidian-dev-utils 88.6.0 → 88.7.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.
Files changed (54) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/integration-test-plugin/main.js +309 -190
  3. package/dist/lib/cjs/__merged.cjs +4 -1
  4. package/dist/lib/cjs/__merged.d.cts +1 -0
  5. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  6. package/dist/lib/cjs/obsidian/components/index.cjs +6 -3
  7. package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
  8. package/dist/lib/cjs/obsidian/components/syntax-highlighting-component.cjs +244 -0
  9. package/dist/lib/cjs/obsidian/components/syntax-highlighting-component.d.cts +149 -0
  10. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +1 -1
  11. package/dist/lib/cjs/script-utils/cli-utils.cjs +9 -1
  12. package/dist/lib/cjs/script-utils/cli-utils.d.cts +6 -0
  13. package/dist/lib/cjs/script-utils/env-toggle.cjs +180 -0
  14. package/dist/lib/cjs/script-utils/env-toggle.d.cts +42 -0
  15. package/dist/lib/cjs/script-utils/git.cjs +156 -0
  16. package/dist/lib/cjs/script-utils/git.d.cts +37 -0
  17. package/dist/lib/cjs/script-utils/index.cjs +7 -1
  18. package/dist/lib/cjs/script-utils/index.d.cts +2 -0
  19. package/dist/lib/cjs/script-utils/linters/cspell.cjs +11 -2
  20. package/dist/lib/cjs/script-utils/linters/cspell.d.cts +7 -0
  21. package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +7 -4
  22. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +17 -8
  23. package/dist/lib/cjs/script-utils/nano-staged-config.cjs +7 -11
  24. package/dist/lib/cjs/script-utils/nano-staged-config.d.cts +7 -5
  25. package/dist/lib/esm/__merged.d.mts +1 -0
  26. package/dist/lib/esm/__merged.mjs +3 -1
  27. package/dist/lib/esm/generated-during-build.mjs +1 -1
  28. package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
  29. package/dist/lib/esm/obsidian/components/index.mjs +4 -2
  30. package/dist/lib/esm/obsidian/components/syntax-highlighting-component.d.mts +149 -0
  31. package/dist/lib/esm/obsidian/components/syntax-highlighting-component.mjs +136 -0
  32. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +1 -1
  33. package/dist/lib/esm/script-utils/cli-utils.d.mts +6 -0
  34. package/dist/lib/esm/script-utils/cli-utils.mjs +9 -1
  35. package/dist/lib/esm/script-utils/env-toggle.d.mts +42 -0
  36. package/dist/lib/esm/script-utils/env-toggle.mjs +60 -0
  37. package/dist/lib/esm/script-utils/git.d.mts +37 -0
  38. package/dist/lib/esm/script-utils/git.mjs +48 -0
  39. package/dist/lib/esm/script-utils/index.d.mts +2 -0
  40. package/dist/lib/esm/script-utils/index.mjs +5 -1
  41. package/dist/lib/esm/script-utils/linters/cspell.d.mts +7 -0
  42. package/dist/lib/esm/script-utils/linters/cspell.mjs +15 -3
  43. package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +7 -4
  44. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +17 -8
  45. package/dist/lib/esm/script-utils/nano-staged-config.d.mts +7 -5
  46. package/dist/lib/esm/script-utils/nano-staged-config.mjs +10 -11
  47. package/dist/templates/dprint.json +2 -2
  48. package/obsidian/components/syntax-highlighting-component/package.json +6 -0
  49. package/package.json +2 -2
  50. package/script-utils/env-toggle/package.json +6 -0
  51. package/script-utils/git/package.json +6 -0
  52. package/@types/obsidian/package.json +0 -4
  53. package/dist/lib/cjs/@types/obsidian.d.cts +0 -28
  54. package/dist/lib/esm/@types/obsidian.d.mts +0 -28
@@ -0,0 +1,180 @@
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 initCjs() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ const globalThisRecord = globalThis;
9
+ globalThisRecord['__name'] ??= name;
10
+ const originalRequire = require;
11
+ if (originalRequire && !originalRequire.__isPatched) {
12
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
13
+ require = Object.assign(
14
+ (id) => requirePatched(id),
15
+ originalRequire,
16
+ {
17
+ __isPatched: true
18
+ }
19
+ );
20
+ }
21
+
22
+ const newFuncs = {
23
+ __extractDefault() {
24
+ return extractDefault;
25
+ },
26
+ process() {
27
+ const browserProcess = {
28
+ browser: true,
29
+ cwd() {
30
+ return '/';
31
+ },
32
+ env: {},
33
+ platform: 'android'
34
+ };
35
+ return browserProcess;
36
+ }
37
+ };
38
+
39
+ for (const key of Object.keys(newFuncs)) {
40
+ globalThisRecord[key] ??= newFuncs[key]?.();
41
+ }
42
+
43
+ function name(obj) {
44
+ return obj;
45
+ }
46
+
47
+ function extractDefault(module) {
48
+ return module && module.__esModule && 'default' in module ? module.default : module;
49
+ }
50
+
51
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
+ 'obsidian',
53
+ '@codemirror/autocomplete',
54
+ '@codemirror/collab',
55
+ '@codemirror/commands',
56
+ '@codemirror/language',
57
+ '@codemirror/lint',
58
+ '@codemirror/search',
59
+ '@codemirror/state',
60
+ '@codemirror/text',
61
+ '@codemirror/view',
62
+ '@lezer/common',
63
+ '@lezer/lr',
64
+ '@lezer/highlight'];
65
+
66
+
67
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
68
+ '@codemirror/closebrackets',
69
+ '@codemirror/comment',
70
+ '@codemirror/fold',
71
+ '@codemirror/gutter',
72
+ '@codemirror/highlight',
73
+ '@codemirror/history',
74
+ '@codemirror/matchbrackets',
75
+ '@codemirror/panel',
76
+ '@codemirror/rangeset',
77
+ '@codemirror/rectangular-selection',
78
+ '@codemirror/stream-parser',
79
+ '@codemirror/tooltip'];
80
+
81
+
82
+ function requirePatched(id) {
83
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
84
+ return originalRequire?.(id);
85
+ }
86
+
87
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
88
+ if (globalThis.app.isMobile) {
89
+ if (id === 'process' || id === 'node:process') {
90
+ // eslint-disable-next-line no-console -- Valid usage.
91
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
+ return globalThis.process;
94
+ }
95
+ } else {
96
+ const module = originalRequire?.(id);
97
+ if (module) {
98
+ return extractDefault(module);
99
+ }
100
+ }
101
+
102
+ // eslint-disable-next-line no-console -- Valid usage.
103
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
104
+ return {};
105
+ }
106
+ })();
107
+
108
+ "use strict";
109
+ var __create = Object.create;
110
+ var __defProp = Object.defineProperty;
111
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
112
+ var __getOwnPropNames = Object.getOwnPropertyNames;
113
+ var __getProtoOf = Object.getPrototypeOf;
114
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
115
+ var __export = (target, all) => {
116
+ for (var name in all)
117
+ __defProp(target, name, { get: all[name], enumerable: true });
118
+ };
119
+ var __copyProps = (to, from, except, desc) => {
120
+ if (from && typeof from === "object" || typeof from === "function") {
121
+ for (let key of __getOwnPropNames(from))
122
+ if (!__hasOwnProp.call(to, key) && key !== except)
123
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
124
+ }
125
+ return to;
126
+ };
127
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
128
+ // If the importer is in node compatibility mode or this is not an ESM
129
+ // file that has been converted to a CommonJS file using a Babel-
130
+ // compatible transform (i.e. "__esModule" has not been set), then set
131
+ // "default" to the CommonJS "module.exports" for node compatibility.
132
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
133
+ mod
134
+ ));
135
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
136
+ var env_toggle_exports = {};
137
+ __export(env_toggle_exports, {
138
+ getDisabledScriptEnvVariableName: () => getDisabledScriptEnvVariableName,
139
+ isEnvVariableOff: () => isEnvVariableOff,
140
+ loadEnvFileIfExists: () => loadEnvFileIfExists
141
+ });
142
+ module.exports = __toCommonJS(env_toggle_exports);
143
+ var import_node_fs = require('node:fs');
144
+ var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
145
+ var import_string = require('../string.cjs');
146
+ const OFF_VALUES = /* @__PURE__ */ new Set(["0", "false", "no", "off"]);
147
+ const ENV_FILE_PATH = ".env";
148
+ const NON_ALPHANUMERIC_REG_EXP = /[^a-z0-9]+/gi;
149
+ const NPM_SCRIPT_NAME_ENV_VARIABLE = "npm_lifecycle_event";
150
+ function getDisabledScriptEnvVariableName() {
151
+ loadEnvFileIfExists();
152
+ const scriptName = import_node_process.default.env[NPM_SCRIPT_NAME_ENV_VARIABLE];
153
+ if (!scriptName) {
154
+ return null;
155
+ }
156
+ const envVariableName = toEnvVariableName(scriptName);
157
+ return isEnvVariableOff(envVariableName) ? envVariableName : null;
158
+ }
159
+ function isEnvVariableOff(envVariableName) {
160
+ return OFF_VALUES.has((import_node_process.default.env[envVariableName] ?? "").trim().toLowerCase());
161
+ }
162
+ function loadEnvFileIfExists() {
163
+ if ((0, import_node_fs.existsSync)(ENV_FILE_PATH)) {
164
+ import_node_process.default.loadEnvFile(ENV_FILE_PATH);
165
+ }
166
+ }
167
+ function toEnvVariableName(scriptName) {
168
+ return (0, import_string.replaceAll)({
169
+ replacer: "_",
170
+ searchValue: NON_ALPHANUMERIC_REG_EXP,
171
+ str: scriptName
172
+ }).toUpperCase();
173
+ }
174
+ // Annotate the CommonJS export names for ESM import in node:
175
+ 0 && (module.exports = {
176
+ getDisabledScriptEnvVariableName,
177
+ isEnvVariableOff,
178
+ loadEnvFileIfExists
179
+ });
180
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9lbnYtdG9nZ2xlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogU2hhcmVkIGVudmlyb25tZW50LXZhcmlhYmxlIG9mZiBzd2l0Y2hlcyBmb3IgdGhlIENMSSBzY3JpcHRzLlxuICpcbiAqIEV2ZXJ5IG5wbSBzY3JpcHQgY2FuIGJlIHNraXBwZWQgYnkgc2V0dGluZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lZCBhZnRlciBpdCBcdTIwMTQgdGhlIHNjcmlwdCBuYW1lXG4gKiB1cHBlcmNhc2VkLCB3aXRoIGV2ZXJ5IG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVyIHJlcGxhY2VkIGJ5IGBfYDpcbiAqXG4gKiB8IFNjcmlwdCAgICAgICAgICAgICAgfCBTd2l0Y2ggICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBgbGludGAgICAgICAgICAgICAgIHwgYExJTlQ9MGAgICAgICAgICAgICB8XG4gKiB8IGBsaW50Om1kOmZpeGAgICAgICAgfCBgTElOVF9NRF9GSVg9MGAgICAgIHxcbiAqIHwgYGZvcm1hdDpjaGVja2AgICAgICB8IGBGT1JNQVRfQ0hFQ0s9MGAgICAgfFxuICogfCBgZmluZC1vdmVyZXhwb3NlZGAgIHwgYEZJTkRfT1ZFUkVYUE9TRUQ9MGB8XG4gKlxuICogVGhpcyBtaXJyb3JzIHRoZSBwcmUtZXhpc3RpbmcgYE5BTk9fU1RBR0VEPTBgIC8gYEhVU0tZPTBgIGVzY2FwZSBoYXRjaGVzLCBhbmQgcmV1c2VzIHRoZWlyIG5vdGlvbiBvZiBhblxuICogXCJvZmZcIiB2YWx1ZSwgc28gdGhlcmUgaXMgYSBzaW5nbGUgYW5zd2VyIHRvIHdoYXQgY291bnRzIGFzIG9mZiBhY3Jvc3MgdGhlIHdob2xlIHRvb2wgc2V0LlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuLi9zdHJpbmcudHMnO1xuXG4vKipcbiAqIFRoZSB2YWx1ZXMgdGhhdCBzd2l0Y2ggYSB2YXJpYWJsZSBvZmYuIEFueXRoaW5nIGVsc2UgXHUyMDE0IGluY2x1ZGluZyBhbiB1bnNldCB2YXJpYWJsZSBcdTIwMTQgbGVhdmVzIGl0IG9uLCBzbyB0aGVcbiAqIGRlZmF1bHQgaXMgYWx3YXlzIFwicnVuIHRoZSBzY3JpcHRcIi5cbiAqL1xuY29uc3QgT0ZGX1ZBTFVFUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoWycwJywgJ2ZhbHNlJywgJ25vJywgJ29mZiddKTtcblxuLyoqXG4gKiBUaGUgb3B0aW9uYWwgcGVyLWRldmVsb3BlciBlbnZpcm9ubWVudCBmaWxlLiBMb2FkZWQgdmlhIE5vZGUncyBvd24gYHByb2Nlc3MubG9hZEVudkZpbGVgLCBzbyBpdCBiZWhhdmVzXG4gKiB0aGUgc2FtZSBvbiBldmVyeSBwbGF0Zm9ybSBhbmQgc2hlbGwuXG4gKi9cbmNvbnN0IEVOVl9GSUxFX1BBVEggPSAnLmVudic7XG5cbi8qKlxuICogTWF0Y2hlcyBldmVyeSBydW4gb2YgY2hhcmFjdGVycyB0aGF0IGNhbm5vdCBhcHBlYXIgaW4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZS5cbiAqL1xuY29uc3QgTk9OX0FMUEhBTlVNRVJJQ19SRUdfRVhQID0gL1teYS16MC05XSsvZ2k7XG5cbi8qKlxuICogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5wbSBzZXRzIHRvIHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQgaXQgaXMgY3VycmVudGx5IHJ1bm5pbmcuXG4gKi9cbmNvbnN0IE5QTV9TQ1JJUFRfTkFNRV9FTlZfVkFSSUFCTEUgPSAnbnBtX2xpZmVjeWNsZV9ldmVudCc7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIG9mZiBzd2l0Y2ggZm9yIHRoZSBucG0gc2NyaXB0IHRoYXQgaXMgY3VycmVudGx5IHJ1bm5pbmcsIGxvYWRpbmcge0BsaW5rIEVOVl9GSUxFX1BBVEh9IGZpcnN0LlxuICpcbiAqIFRoZSBzY3JpcHQgbmFtZSBjb21lcyBmcm9tIG5wbSBpdHNlbGYsIHNvIG5vIHNjcmlwdCBoYXMgdG8gZGVjbGFyZSBpdHMgb3duIHN3aXRjaC4gV2hlbiB0aGUgc2NyaXB0IHdhc1xuICogc3RhcnRlZCBkaXJlY3RseSByYXRoZXIgdGhhbiB0aHJvdWdoIG5wbSwgdGhlcmUgaXMgbm8gbmFtZSB0byBkZXJpdmUgZnJvbSBhbmQgbm90aGluZyBpcyBldmVyIHNraXBwZWQuXG4gKlxuICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgc3dpdGNoZWQgdGhlIGN1cnJlbnQgc2NyaXB0IG9mZiwgb3IgYG51bGxgIHdoZW4gdGhlXG4gKiBzY3JpcHQgc2hvdWxkIHJ1bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc2FibGVkU2NyaXB0RW52VmFyaWFibGVOYW1lKCk6IG51bGwgfCBzdHJpbmcge1xuICBsb2FkRW52RmlsZUlmRXhpc3RzKCk7XG4gIGNvbnN0IHNjcmlwdE5hbWUgPSBwcm9jZXNzLmVudltOUE1fU0NSSVBUX05BTUVfRU5WX1ZBUklBQkxFXTtcbiAgaWYgKCFzY3JpcHROYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBlbnZWYXJpYWJsZU5hbWUgPSB0b0VudlZhcmlhYmxlTmFtZShzY3JpcHROYW1lKTtcbiAgcmV0dXJuIGlzRW52VmFyaWFibGVPZmYoZW52VmFyaWFibGVOYW1lKSA/IGVudlZhcmlhYmxlTmFtZSA6IG51bGw7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gYW4gb2ZmIHZhbHVlIChgMGAsIGBmYWxzZWAsIGBub2AsIG9yIGBvZmZgLFxuICogY2FzZS1pbnNlbnNpdGl2ZWx5IGFuZCBpZ25vcmluZyBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlKS5cbiAqXG4gKiBAcGFyYW0gZW52VmFyaWFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgdmFyaWFibGUgaXMgc2V0IHRvIGFuIG9mZiB2YWx1ZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VudlZhcmlhYmxlT2ZmKGVudlZhcmlhYmxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBPRkZfVkFMVUVTLmhhcygocHJvY2Vzcy5lbnZbZW52VmFyaWFibGVOYW1lXSA/PyAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xufVxuXG4vKipcbiAqIExvYWRzIHRoZSBvcHRpb25hbCB7QGxpbmsgRU5WX0ZJTEVfUEFUSH0gZmlsZSBpbnRvIGBwcm9jZXNzLmVudmAgd2hlbiBpdCBleGlzdHMsIHNvIGEgZGV2ZWxvcGVyIGNhbiBwYXJrIGFcbiAqIHN3aXRjaCBzdWNoIGFzIGBMSU5UX01EPTBgIHRoZXJlIGluc3RlYWQgb2YgcHJlZml4aW5nIGV2ZXJ5IGNvbW1hbmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRW52RmlsZUlmRXhpc3RzKCk6IHZvaWQge1xuICBpZiAoZXhpc3RzU3luYyhFTlZfRklMRV9QQVRIKSkge1xuICAgIHByb2Nlc3MubG9hZEVudkZpbGUoRU5WX0ZJTEVfUEFUSCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBucG0gc2NyaXB0IG5hbWUgaW50byB0aGUgbmFtZSBvZiBpdHMgb2ZmIHN3aXRjaC5cbiAqXG4gKiBAcGFyYW0gc2NyaXB0TmFtZSAtIFRoZSBucG0gc2NyaXB0IG5hbWUsIGUuZy4gYGxpbnQ6bWQ6Zml4YC5cbiAqIEByZXR1cm5zIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lLCBlLmcuIGBMSU5UX01EX0ZJWGAuXG4gKi9cbmZ1bmN0aW9uIHRvRW52VmFyaWFibGVOYW1lKHNjcmlwdE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICByZXBsYWNlcjogJ18nLFxuICAgIHNlYXJjaFZhbHVlOiBOT05fQUxQSEFOVU1FUklDX1JFR19FWFAsXG4gICAgc3RyOiBzY3JpcHROYW1lXG4gIH0pLnRvVXBwZXJDYXNlKCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxxQkFBMkI7QUFDM0IsMEJBQW9CO0FBRXBCLG9CQUEyQjtBQU0zQixNQUFNLGFBQWtDLG9CQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsTUFBTSxLQUFLLENBQUM7QUFNM0UsTUFBTSxnQkFBZ0I7QUFLdEIsTUFBTSwyQkFBMkI7QUFLakMsTUFBTSwrQkFBK0I7QUFXOUIsU0FBUyxtQ0FBa0Q7QUFDaEUsc0JBQW9CO0FBQ3BCLFFBQU0sYUFBYSxvQkFBQUEsUUFBUSxJQUFJLDRCQUE0QjtBQUMzRCxNQUFJLENBQUMsWUFBWTtBQUNmLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxrQkFBa0Isa0JBQWtCLFVBQVU7QUFDcEQsU0FBTyxpQkFBaUIsZUFBZSxJQUFJLGtCQUFrQjtBQUMvRDtBQVNPLFNBQVMsaUJBQWlCLGlCQUFrQztBQUNqRSxTQUFPLFdBQVcsS0FBSyxvQkFBQUEsUUFBUSxJQUFJLGVBQWUsS0FBSyxJQUFJLEtBQUssRUFBRSxZQUFZLENBQUM7QUFDakY7QUFNTyxTQUFTLHNCQUE0QjtBQUMxQyxVQUFJLDJCQUFXLGFBQWEsR0FBRztBQUM3Qix3QkFBQUEsUUFBUSxZQUFZLGFBQWE7QUFBQSxFQUNuQztBQUNGO0FBUUEsU0FBUyxrQkFBa0IsWUFBNEI7QUFDckQsYUFBTywwQkFBVztBQUFBLElBQ2hCLFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxJQUNiLEtBQUs7QUFBQSxFQUNQLENBQUMsRUFBRSxZQUFZO0FBQ2pCOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
@@ -0,0 +1,42 @@
1
+ /// <reference path="../library.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Shared environment-variable off switches for the CLI scripts.
6
+ *
7
+ * Every npm script can be skipped by setting an environment variable named after it — the script name
8
+ * uppercased, with every non-alphanumeric character replaced by `_`:
9
+ *
10
+ * | Script | Switch |
11
+ * |---------------------|---------------------|
12
+ * | `lint` | `LINT=0` |
13
+ * | `lint:md:fix` | `LINT_MD_FIX=0` |
14
+ * | `format:check` | `FORMAT_CHECK=0` |
15
+ * | `find-overexposed` | `FIND_OVEREXPOSED=0`|
16
+ *
17
+ * This mirrors the pre-existing `NANO_STAGED=0` / `HUSKY=0` escape hatches, and reuses their notion of an
18
+ * "off" value, so there is a single answer to what counts as off across the whole tool set.
19
+ */
20
+ /**
21
+ * Resolves the off switch for the npm script that is currently running, loading {@link ENV_FILE_PATH} first.
22
+ *
23
+ * The script name comes from npm itself, so no script has to declare its own switch. When the script was
24
+ * started directly rather than through npm, there is no name to derive from and nothing is ever skipped.
25
+ *
26
+ * @returns The name of the environment variable that switched the current script off, or `null` when the
27
+ * script should run.
28
+ */
29
+ export declare function getDisabledScriptEnvVariableName(): null | string;
30
+ /**
31
+ * Determines whether the environment variable is set to an off value (`0`, `false`, `no`, or `off`,
32
+ * case-insensitively and ignoring surrounding whitespace).
33
+ *
34
+ * @param envVariableName - The name of the environment variable to inspect.
35
+ * @returns `true` when the variable is set to an off value, otherwise `false`.
36
+ */
37
+ export declare function isEnvVariableOff(envVariableName: string): boolean;
38
+ /**
39
+ * Loads the optional {@link ENV_FILE_PATH} file into `process.env` when it exists, so a developer can park a
40
+ * switch such as `LINT_MD=0` there instead of prefixing every command.
41
+ */
42
+ export declare function loadEnvFileIfExists(): void;
@@ -0,0 +1,156 @@
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 initCjs() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ const globalThisRecord = globalThis;
9
+ globalThisRecord['__name'] ??= name;
10
+ const originalRequire = require;
11
+ if (originalRequire && !originalRequire.__isPatched) {
12
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
13
+ require = Object.assign(
14
+ (id) => requirePatched(id),
15
+ originalRequire,
16
+ {
17
+ __isPatched: true
18
+ }
19
+ );
20
+ }
21
+
22
+ const newFuncs = {
23
+ __extractDefault() {
24
+ return extractDefault;
25
+ },
26
+ process() {
27
+ const browserProcess = {
28
+ browser: true,
29
+ cwd() {
30
+ return '/';
31
+ },
32
+ env: {},
33
+ platform: 'android'
34
+ };
35
+ return browserProcess;
36
+ }
37
+ };
38
+
39
+ for (const key of Object.keys(newFuncs)) {
40
+ globalThisRecord[key] ??= newFuncs[key]?.();
41
+ }
42
+
43
+ function name(obj) {
44
+ return obj;
45
+ }
46
+
47
+ function extractDefault(module) {
48
+ return module && module.__esModule && 'default' in module ? module.default : module;
49
+ }
50
+
51
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
+ 'obsidian',
53
+ '@codemirror/autocomplete',
54
+ '@codemirror/collab',
55
+ '@codemirror/commands',
56
+ '@codemirror/language',
57
+ '@codemirror/lint',
58
+ '@codemirror/search',
59
+ '@codemirror/state',
60
+ '@codemirror/text',
61
+ '@codemirror/view',
62
+ '@lezer/common',
63
+ '@lezer/lr',
64
+ '@lezer/highlight'];
65
+
66
+
67
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
68
+ '@codemirror/closebrackets',
69
+ '@codemirror/comment',
70
+ '@codemirror/fold',
71
+ '@codemirror/gutter',
72
+ '@codemirror/highlight',
73
+ '@codemirror/history',
74
+ '@codemirror/matchbrackets',
75
+ '@codemirror/panel',
76
+ '@codemirror/rangeset',
77
+ '@codemirror/rectangular-selection',
78
+ '@codemirror/stream-parser',
79
+ '@codemirror/tooltip'];
80
+
81
+
82
+ function requirePatched(id) {
83
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
84
+ return originalRequire?.(id);
85
+ }
86
+
87
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
88
+ if (globalThis.app.isMobile) {
89
+ if (id === 'process' || id === 'node:process') {
90
+ // eslint-disable-next-line no-console -- Valid usage.
91
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
+ return globalThis.process;
94
+ }
95
+ } else {
96
+ const module = originalRequire?.(id);
97
+ if (module) {
98
+ return extractDefault(module);
99
+ }
100
+ }
101
+
102
+ // eslint-disable-next-line no-console -- Valid usage.
103
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
104
+ return {};
105
+ }
106
+ })();
107
+
108
+ "use strict";
109
+ var __defProp = Object.defineProperty;
110
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
111
+ var __getOwnPropNames = Object.getOwnPropertyNames;
112
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
113
+ var __export = (target, all) => {
114
+ for (var name in all)
115
+ __defProp(target, name, { get: all[name], enumerable: true });
116
+ };
117
+ var __copyProps = (to, from, except, desc) => {
118
+ if (from && typeof from === "object" || typeof from === "function") {
119
+ for (let key of __getOwnPropNames(from))
120
+ if (!__hasOwnProp.call(to, key) && key !== except)
121
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
122
+ }
123
+ return to;
124
+ };
125
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
126
+ var git_exports = {};
127
+ __export(git_exports, {
128
+ getNonIgnoredFiles: () => getNonIgnoredFiles
129
+ });
130
+ module.exports = __toCommonJS(git_exports);
131
+ var import_root = require('./root.cjs');
132
+ const NUL_SEPARATOR = "\0";
133
+ async function getNonIgnoredFiles(options) {
134
+ const { patterns = [] } = options ?? {};
135
+ const command = [
136
+ "git",
137
+ "ls-files",
138
+ "--cached",
139
+ "--others",
140
+ "--exclude-standard",
141
+ "-z",
142
+ ...patterns.length > 0 ? ["--", ...patterns] : []
143
+ ];
144
+ let stdout;
145
+ try {
146
+ stdout = await (0, import_root.execFromRoot)(command, { isQuiet: true });
147
+ } catch {
148
+ return null;
149
+ }
150
+ return [...new Set(stdout.split(NUL_SEPARATOR).filter((path) => path !== ""))];
151
+ }
152
+ // Annotate the CommonJS export names for ESM import in node:
153
+ 0 && (module.exports = {
154
+ getNonIgnoredFiles
155
+ });
156
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9naXQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBHaXQtZGVyaXZlZCBmaWxlIGxpc3RpbmdzIGZvciB0aGUgcmVwby13YWxraW5nIHNjcmlwdHMuXG4gKlxuICogVG9vbGluZyB0aGF0IHdhbGtzIHRoZSByZXBvc2l0b3J5IG11c3Qgc2tpcCB3aGF0ZXZlciBgLmdpdGlnbm9yZWAgc2tpcHMgXHUyMDE0IG90aGVyd2lzZSBldmVyeSBzY3JpcHQgZ3Jvd3MgaXRzXG4gKiBvd24gaGFuZC1tYWludGFpbmVkIGlnbm9yZSBsaXN0LCB0aGUgbGlzdHMgZHJpZnQgYXBhcnQsIGFuZCBhIHBhdGggdGhhdCBpcyBnaXRpZ25vcmVkIGJ1dCBub3QgZW51bWVyYXRlZFxuICogKGEgbmVzdGVkIGBub2RlX21vZHVsZXNgIHVuZGVyIGEgdGVzdCBmaXh0dXJlLCBzYXkpIGlzIHdhbGtlZCBhbnl3YXkuIE1vc3QgdG9vbHMgaGF2ZSBhIG5hdGl2ZSBzd2l0Y2ggZm9yXG4gKiB0aGlzOyB0aGUgb25lcyB0aGF0IGRvIG5vdCB0YWtlIGEgZmlsZSBsaXN0IGluc3RlYWQsIGFuZCB0aGF0IGlzIHdoYXQgdGhpcyBtb2R1bGUgcHJvZHVjZXMuXG4gKlxuICogQXNraW5nIGdpdCByYXRoZXIgdGhhbiBwYXJzaW5nIGAuZ2l0aWdub3JlYCBpcyBkZWxpYmVyYXRlOiBpdCBob25vcnMgbmVzdGVkIGlnbm9yZSBmaWxlcywgYCFgIG5lZ2F0aW9ucyxcbiAqIGAuZ2l0L2luZm8vZXhjbHVkZWAsIGFuZCB0aGUgdXNlcidzIGdsb2JhbCBleGNsdWRlcywgYXQgbm8gY29zdCB0byB1cy5cbiAqL1xuXG5pbXBvcnQgeyBleGVjRnJvbVJvb3QgfSBmcm9tICcuL3Jvb3QudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXROb25JZ25vcmVkRmlsZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE5vbklnbm9yZWRGaWxlc09wdGlvbnMge1xuICAvKipcbiAgICogR2l0IHBhdGhzcGVjcyBsaW1pdGluZyB0aGUgbGlzdGluZywgZS5nLiBgWycqLm1kJ11gLiBXaGVuIG9taXR0ZWQsIGV2ZXJ5IG5vbi1pZ25vcmVkIGZpbGUgaXMgbGlzdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSBwYXR0ZXJucz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFNlcGFyYXRlcyB0aGUgcGF0aHMgaW4gYGdpdCBscy1maWxlcyAtemAgb3V0cHV0LiBVc2luZyB0aGUgTlVMIGZvcm0gYXZvaWRzIGdpdCdzIHF1b3Rpbmcgb2YgcGF0aHMgdGhhdFxuICogY29udGFpbiB1bnVzdWFsIGNoYXJhY3RlcnMsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBoYXZlIHRvIGJlIHVuZXNjYXBlZC5cbiAqL1xuY29uc3QgTlVMX1NFUEFSQVRPUiA9ICdcXDAnO1xuXG4vKipcbiAqIExpc3RzIHRoZSByZXBvc2l0b3J5IGZpbGVzIHRoYXQgYC5naXRpZ25vcmVgIGRvZXMgbm90IGV4Y2x1ZGUuXG4gKlxuICogQ292ZXJzIGJvdGggdHJhY2tlZCBmaWxlcyBhbmQgdW50cmFja2VkLWJ1dC1ub3QtaWdub3JlZCBvbmVzLCBzbyBhIGJyYW5kLW5ldyBmaWxlIGlzIGNoZWNrZWQgYmVmb3JlIGl0IGlzXG4gKiBldmVyIGNvbW1pdHRlZC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgR2V0Tm9uSWdub3JlZEZpbGVzT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG1hdGNoaW5nIHBhdGhzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIgYW5kXG4gKiBzZXBhcmF0ZWQgYnkgYC9gOyBvciB3aXRoIGBudWxsYCB3aGVuIGdpdCBjYW5ub3QgYW5zd2VyIFx1MjAxNCBpdCBpcyBub3QgaW5zdGFsbGVkLCBvciB0aGUgcHJvamVjdCBpcyBub3QgYVxuICogZ2l0IHJlcG9zaXRvcnkgKGEgdGFyYmFsbCBjaGVja291dCwgZm9yIGluc3RhbmNlKS4gQ2FsbGVycyBmYWxsIGJhY2sgdG8gdGhlaXIgb3duIGxpc3RpbmcgaW4gdGhhdCBjYXNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Tm9uSWdub3JlZEZpbGVzKG9wdGlvbnM/OiBHZXROb25JZ25vcmVkRmlsZXNPcHRpb25zKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nW10+IHtcbiAgY29uc3QgeyBwYXR0ZXJucyA9IFtdIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCBjb21tYW5kID0gW1xuICAgICdnaXQnLFxuICAgICdscy1maWxlcycsXG4gICAgJy0tY2FjaGVkJyxcbiAgICAnLS1vdGhlcnMnLFxuICAgICctLWV4Y2x1ZGUtc3RhbmRhcmQnLFxuICAgICcteicsXG4gICAgLi4ucGF0dGVybnMubGVuZ3RoID4gMCA/IFsnLS0nLCAuLi5wYXR0ZXJuc10gOiBbXVxuICBdO1xuXG4gIGxldCBzdGRvdXQ6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBzdGRvdXQgPSBhd2FpdCBleGVjRnJvbVJvb3QoY29tbWFuZCwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGAtLWNhY2hlZCAtLW90aGVyc2AgY2FuIG5hbWUgdGhlIHNhbWUgcGF0aCB0d2ljZSAoZS5nLiBhIGZpbGUgc3RhZ2VkIGZvciBkZWxldGlvbiB0aGF0IGlzIHN0aWxsIG9uIGRpc2spLlxuICByZXR1cm4gWy4uLm5ldyBTZXQoc3Rkb3V0LnNwbGl0KE5VTF9TRVBBUkFUT1IpLmZpbHRlcigocGF0aCkgPT4gcGF0aCAhPT0gJycpKV07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSxrQkFBNkI7QUFrQjdCLE1BQU0sZ0JBQWdCO0FBYXRCLGVBQXNCLG1CQUFtQixTQUErRDtBQUN0RyxRQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxXQUFXLENBQUM7QUFDdEMsUUFBTSxVQUFVO0FBQUEsSUFDZDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxHQUFHLFNBQVMsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsSUFBSSxDQUFDO0FBQUEsRUFDbEQ7QUFFQSxNQUFJO0FBQ0osTUFBSTtBQUNGLGFBQVMsVUFBTSwwQkFBYSxTQUFTLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFBQSxFQUN4RCxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFHQSxTQUFPLENBQUMsR0FBRyxJQUFJLElBQUksT0FBTyxNQUFNLGFBQWEsRUFBRSxPQUFPLENBQUMsU0FBUyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQy9FOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,37 @@
1
+ /// <reference path="../library.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Git-derived file listings for the repo-walking scripts.
6
+ *
7
+ * Tooling that walks the repository must skip whatever `.gitignore` skips — otherwise every script grows its
8
+ * own hand-maintained ignore list, the lists drift apart, and a path that is gitignored but not enumerated
9
+ * (a nested `node_modules` under a test fixture, say) is walked anyway. Most tools have a native switch for
10
+ * this; the ones that do not take a file list instead, and that is what this module produces.
11
+ *
12
+ * Asking git rather than parsing `.gitignore` is deliberate: it honors nested ignore files, `!` negations,
13
+ * `.git/info/exclude`, and the user's global excludes, at no cost to us.
14
+ */
15
+ /**
16
+ * Options for {@link getNonIgnoredFiles}.
17
+ */
18
+ export interface GetNonIgnoredFilesOptions {
19
+ /**
20
+ * Git pathspecs limiting the listing, e.g. `['*.md']`. When omitted, every non-ignored file is listed.
21
+ *
22
+ * @default `[]`
23
+ */
24
+ readonly patterns?: readonly string[] | undefined;
25
+ }
26
+ /**
27
+ * Lists the repository files that `.gitignore` does not exclude.
28
+ *
29
+ * Covers both tracked files and untracked-but-not-ignored ones, so a brand-new file is checked before it is
30
+ * ever committed.
31
+ *
32
+ * @param options - The {@link GetNonIgnoredFilesOptions}.
33
+ * @returns A {@link Promise} that resolves with the matching paths, relative to the root folder and
34
+ * separated by `/`; or with `null` when git cannot answer — it is not installed, or the project is not a
35
+ * git repository (a tarball checkout, for instance). Callers fall back to their own listing in that case.
36
+ */
37
+ export declare function getNonIgnoredFiles(options?: GetNonIgnoredFilesOptions): Promise<null | string[]>;
@@ -143,9 +143,11 @@ __export(script_utils_exports, {
143
143
  "commitlint-config": () => commitlint_config,
144
144
  "demo-vault": () => demo_vault,
145
145
  "demo-vault-coverage": () => demo_vault_coverage,
146
+ "env-toggle": () => env_toggle,
146
147
  exec: () => exec,
147
148
  formatters: () => formatters,
148
149
  fs: () => fs,
150
+ git: () => git,
149
151
  json: () => json,
150
152
  linters: () => linters,
151
153
  "nano-staged-config": () => nano_staged_config,
@@ -168,9 +170,11 @@ var code_generator = __toESM(__extractDefault(require('./code-generator.cjs')),
168
170
  var commitlint_config = __toESM(__extractDefault(require('./commitlint-config.cjs')), 1);
169
171
  var demo_vault_coverage = __toESM(__extractDefault(require('./demo-vault-coverage.cjs')), 1);
170
172
  var demo_vault = __toESM(__extractDefault(require('./demo-vault.cjs')), 1);
173
+ var env_toggle = __toESM(__extractDefault(require('./env-toggle.cjs')), 1);
171
174
  var exec = __toESM(__extractDefault(require('./exec.cjs')), 1);
172
175
  var formatters = __toESM(__extractDefault(require('./formatters/index.cjs')), 1);
173
176
  var fs = __toESM(__extractDefault(require('./fs.cjs')), 1);
177
+ var git = __toESM(__extractDefault(require('./git.cjs')), 1);
174
178
  var json = __toESM(__extractDefault(require('./json.cjs')), 1);
175
179
  var linters = __toESM(__extractDefault(require('./linters/index.cjs')), 1);
176
180
  var nano_staged_config = __toESM(__extractDefault(require('./nano-staged-config.cjs')), 1);
@@ -193,9 +197,11 @@ var warnings_as_errors = __toESM(__extractDefault(require('./warnings-as-errors.
193
197
  "commitlint-config": null,
194
198
  "demo-vault": null,
195
199
  "demo-vault-coverage": null,
200
+ "env-toggle": null,
196
201
  exec,
197
202
  formatters,
198
203
  fs,
204
+ git,
199
205
  json,
200
206
  linters,
201
207
  "nano-staged-config": null,
@@ -209,4 +215,4 @@ var warnings_as_errors = __toESM(__extractDefault(require('./warnings-as-errors.
209
215
  version,
210
216
  "warnings-as-errors": null
211
217
  });
212
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdidWlsZCcgZnJvbSAnLi9idWlsZC50cyc7XG5leHBvcnQgKiBhcyAnYnVuZGxlcnMnIGZyb20gJy4vYnVuZGxlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NoZWNrLXByb2plY3QtdHlwZXMnIGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5leHBvcnQgKiBhcyAnY2xpLXV0aWxzJyBmcm9tICcuL2NsaS11dGlscy50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1nZW5lcmF0b3InIGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtY29uZmlnJyBmcm9tICcuL2NvbW1pdGxpbnQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdkZW1vLXZhdWx0LWNvdmVyYWdlJyBmcm9tICcuL2RlbW8tdmF1bHQtY292ZXJhZ2UudHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQnIGZyb20gJy4vZGVtby12YXVsdC50cyc7XG5leHBvcnQgKiBhcyAnZXhlYycgZnJvbSAnLi9leGVjLnRzJztcbmV4cG9ydCAqIGFzICdmb3JtYXR0ZXJzJyBmcm9tICcuL2Zvcm1hdHRlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2ZzJyBmcm9tICcuL2ZzLnRzJztcbmV4cG9ydCAqIGFzICdqc29uJyBmcm9tICcuL2pzb24udHMnO1xuZXhwb3J0ICogYXMgJ2xpbnRlcnMnIGZyb20gJy4vbGludGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnbmFuby1zdGFnZWQtY29uZmlnJyBmcm9tICcuL25hbm8tc3RhZ2VkLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnbnBtLXB1Ymxpc2gnIGZyb20gJy4vbnBtLXB1Ymxpc2gudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1ydW4nIGZyb20gJy4vbnBtLXJ1bi50cyc7XG5leHBvcnQgKiBhcyAnbnBtJyBmcm9tICcuL25wbS50cyc7XG5leHBvcnQgKiBhcyAnb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMnIGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuZXhwb3J0ICogYXMgJ3Jvb3QnIGZyb20gJy4vcm9vdC50cyc7XG5leHBvcnQgKiBhcyAndGVzdC1ydW5uZXJzJyBmcm9tICcuL3Rlc3QtcnVubmVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAndmFsaWRhdGUtZGVjbGFyYXRpb25zJyBmcm9tICcuL3ZhbGlkYXRlLWRlY2xhcmF0aW9ucy50cyc7XG5leHBvcnQgKiBhcyAndmVyc2lvbicgZnJvbSAnLi92ZXJzaW9uLnRzJztcbmV4cG9ydCAqIGFzICd3YXJuaW5ncy1hcy1lcnJvcnMnIGZyb20gJy4vd2FybmluZ3MtYXMtZXJyb3JzLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsK0JBQUFBO0FBQUEsRUFBQSxtQkFBQUM7QUFBQSxFQUFBLHdCQUFBQztBQUFBLEVBQUEsMkJBQUFDO0FBQUEsRUFBQSxvQkFBQUM7QUFBQSxFQUFBLDZCQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDhCQUFBQztBQUFBLEVBQUE7QUFBQSx1QkFBQUM7QUFBQSxFQUFBLGlCQUFBQztBQUFBLEVBQUEsdUNBQUFDO0FBQUEsRUFBQTtBQUFBLHdCQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUEsRUFBQTtBQUFBLDhCQUFBQztBQUFBO0FBQUE7QUFFQSxZQUF5QjtBQUN6QixlQUE0QjtBQUM1QixJQUFBWixzQkFBdUM7QUFDdkMsSUFBQUMsWUFBNkI7QUFDN0IsSUFBQUMsaUJBQWtDO0FBQ2xDLElBQUFDLG9CQUFxQztBQUNyQyxJQUFBRSxzQkFBdUM7QUFDdkMsSUFBQUQsYUFBOEI7QUFDOUIsV0FBd0I7QUFDeEIsaUJBQThCO0FBQzlCLFNBQXNCO0FBQ3RCLFdBQXdCO0FBQ3hCLGNBQTJCO0FBQzNCLElBQUFFLHFCQUFzQztBQUN0QyxJQUFBQyxjQUErQjtBQUMvQixJQUFBQyxVQUEyQjtBQUMzQixVQUF1QjtBQUN2QixJQUFBQyxnQ0FBaUQ7QUFDakQsV0FBd0I7QUFDeEIsSUFBQUMsZUFBZ0M7QUFDaEMsSUFBQUMsd0JBQXlDO0FBQ3pDLGNBQTJCO0FBQzNCLElBQUFDLHFCQUFzQzsiLAogICJuYW1lcyI6IFsiY2hlY2stcHJvamVjdC10eXBlcyIsICJjbGktdXRpbHMiLCAiY29kZS1nZW5lcmF0b3IiLCAiY29tbWl0bGludC1jb25maWciLCAiZGVtby12YXVsdCIsICJkZW1vLXZhdWx0LWNvdmVyYWdlIiwgIm5hbm8tc3RhZ2VkLWNvbmZpZyIsICJucG0tcHVibGlzaCIsICJucG0tcnVuIiwgIm9ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzIiwgInRlc3QtcnVubmVycyIsICJ2YWxpZGF0ZS1kZWNsYXJhdGlvbnMiLCAid2FybmluZ3MtYXMtZXJyb3JzIl0KfQo=
218
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdidWlsZCcgZnJvbSAnLi9idWlsZC50cyc7XG5leHBvcnQgKiBhcyAnYnVuZGxlcnMnIGZyb20gJy4vYnVuZGxlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NoZWNrLXByb2plY3QtdHlwZXMnIGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5leHBvcnQgKiBhcyAnY2xpLXV0aWxzJyBmcm9tICcuL2NsaS11dGlscy50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1nZW5lcmF0b3InIGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtY29uZmlnJyBmcm9tICcuL2NvbW1pdGxpbnQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdkZW1vLXZhdWx0LWNvdmVyYWdlJyBmcm9tICcuL2RlbW8tdmF1bHQtY292ZXJhZ2UudHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQnIGZyb20gJy4vZGVtby12YXVsdC50cyc7XG5leHBvcnQgKiBhcyAnZW52LXRvZ2dsZScgZnJvbSAnLi9lbnYtdG9nZ2xlLnRzJztcbmV4cG9ydCAqIGFzICdleGVjJyBmcm9tICcuL2V4ZWMudHMnO1xuZXhwb3J0ICogYXMgJ2Zvcm1hdHRlcnMnIGZyb20gJy4vZm9ybWF0dGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZnMnIGZyb20gJy4vZnMudHMnO1xuZXhwb3J0ICogYXMgJ2dpdCcgZnJvbSAnLi9naXQudHMnO1xuZXhwb3J0ICogYXMgJ2pzb24nIGZyb20gJy4vanNvbi50cyc7XG5leHBvcnQgKiBhcyAnbGludGVycycgZnJvbSAnLi9saW50ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICduYW5vLXN0YWdlZC1jb25maWcnIGZyb20gJy4vbmFuby1zdGFnZWQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICducG0tcHVibGlzaCcgZnJvbSAnLi9ucG0tcHVibGlzaC50cyc7XG5leHBvcnQgKiBhcyAnbnBtLXJ1bicgZnJvbSAnLi9ucG0tcnVuLnRzJztcbmV4cG9ydCAqIGFzICducG0nIGZyb20gJy4vbnBtLnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocycgZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyc7XG5leHBvcnQgKiBhcyAncm9vdCcgZnJvbSAnLi9yb290LnRzJztcbmV4cG9ydCAqIGFzICd0ZXN0LXJ1bm5lcnMnIGZyb20gJy4vdGVzdC1ydW5uZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnIGZyb20gJy4vdmFsaWRhdGUtZGVjbGFyYXRpb25zLnRzJztcbmV4cG9ydCAqIGFzICd2ZXJzaW9uJyBmcm9tICcuL3ZlcnNpb24udHMnO1xuZXhwb3J0ICogYXMgJ3dhcm5pbmdzLWFzLWVycm9ycycgZnJvbSAnLi93YXJuaW5ncy1hcy1lcnJvcnMudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwrQkFBQUE7QUFBQSxFQUFBLG1CQUFBQztBQUFBLEVBQUEsd0JBQUFDO0FBQUEsRUFBQSwyQkFBQUM7QUFBQSxFQUFBLG9CQUFBQztBQUFBLEVBQUEsNkJBQUFDO0FBQUEsRUFBQSxvQkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDhCQUFBQztBQUFBLEVBQUE7QUFBQSx1QkFBQUM7QUFBQSxFQUFBLGlCQUFBQztBQUFBLEVBQUEsdUNBQUFDO0FBQUEsRUFBQTtBQUFBLHdCQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUEsRUFBQTtBQUFBLDhCQUFBQztBQUFBO0FBQUE7QUFFQSxZQUF5QjtBQUN6QixlQUE0QjtBQUM1QixJQUFBYixzQkFBdUM7QUFDdkMsSUFBQUMsWUFBNkI7QUFDN0IsSUFBQUMsaUJBQWtDO0FBQ2xDLElBQUFDLG9CQUFxQztBQUNyQyxJQUFBRSxzQkFBdUM7QUFDdkMsSUFBQUQsYUFBOEI7QUFDOUIsSUFBQUUsYUFBOEI7QUFDOUIsV0FBd0I7QUFDeEIsaUJBQThCO0FBQzlCLFNBQXNCO0FBQ3RCLFVBQXVCO0FBQ3ZCLFdBQXdCO0FBQ3hCLGNBQTJCO0FBQzNCLElBQUFDLHFCQUFzQztBQUN0QyxJQUFBQyxjQUErQjtBQUMvQixJQUFBQyxVQUEyQjtBQUMzQixVQUF1QjtBQUN2QixJQUFBQyxnQ0FBaUQ7QUFDakQsV0FBd0I7QUFDeEIsSUFBQUMsZUFBZ0M7QUFDaEMsSUFBQUMsd0JBQXlDO0FBQ3pDLGNBQTJCO0FBQzNCLElBQUFDLHFCQUFzQzsiLAogICJuYW1lcyI6IFsiY2hlY2stcHJvamVjdC10eXBlcyIsICJjbGktdXRpbHMiLCAiY29kZS1nZW5lcmF0b3IiLCAiY29tbWl0bGludC1jb25maWciLCAiZGVtby12YXVsdCIsICJkZW1vLXZhdWx0LWNvdmVyYWdlIiwgImVudi10b2dnbGUiLCAibmFuby1zdGFnZWQtY29uZmlnIiwgIm5wbS1wdWJsaXNoIiwgIm5wbS1ydW4iLCAib2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMiLCAidGVzdC1ydW5uZXJzIiwgInZhbGlkYXRlLWRlY2xhcmF0aW9ucyIsICJ3YXJuaW5ncy1hcy1lcnJvcnMiXQp9Cg==
@@ -7,9 +7,11 @@ export * as 'code-generator' from './code-generator.cjs';
7
7
  export * as 'commitlint-config' from './commitlint-config.cjs';
8
8
  export * as 'demo-vault-coverage' from './demo-vault-coverage.cjs';
9
9
  export * as 'demo-vault' from './demo-vault.cjs';
10
+ export * as 'env-toggle' from './env-toggle.cjs';
10
11
  export * as 'exec' from './exec.cjs';
11
12
  export * as 'formatters' from './formatters/index.cjs';
12
13
  export * as 'fs' from './fs.cjs';
14
+ export * as 'git' from './git.cjs';
13
15
  export * as 'json' from './json.cjs';
14
16
  export * as 'linters' from './linters/index.cjs';
15
17
  export * as 'nano-staged-config' from './nano-staged-config.cjs';
@@ -132,10 +132,19 @@ var import_root = require('../root.cjs');
132
132
  async function spellcheck(options) {
133
133
  const { paths } = options ?? {};
134
134
  const targets = paths?.length ? paths : ["."];
135
- await (0, import_root.execFromRoot)(["npx", "cspell", "--no-progress", "--no-must-find-files", { batchedArgs: targets }]);
135
+ const rootFolder = (0, import_root.getRootFolder)();
136
+ await (0, import_root.execFromRoot)([
137
+ "npx",
138
+ "cspell",
139
+ "--no-progress",
140
+ "--no-must-find-files",
141
+ "--gitignore",
142
+ ...rootFolder === null ? [] : ["--gitignore-root", rootFolder],
143
+ { batchedArgs: targets }
144
+ ]);
136
145
  }
137
146
  // Annotate the CommonJS export names for ESM import in node:
138
147
  0 && (module.exports = {
139
148
  spellcheck
140
149
  });
141
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2NzcGVsbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZnVuY3Rpb24gZm9yIHJ1bm5pbmcgYSBzcGVsbGNoZWNrIG9uIHRoZSBjb2RlYmFzZSB1c2luZyB0aGUgYGNzcGVsbGAgbGlicmFyeS5cbiAqIEl0IHJlcG9ydHMgYW55IHNwZWxsaW5nIGlzc3VlcyBmb3VuZCBpbiB0aGUgY29kZSBhbmQgcmV0dXJucyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNwZWxsY2hlY2sgd2FzIHN1Y2Nlc3NmdWwuXG4gKi9cblxuaW1wb3J0IHsgZXhlY0Zyb21Sb290IH0gZnJvbSAnLi4vcm9vdC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBzcGVsbGNoZWNrfSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGVsbGNoZWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGNoZWNrLiBJZiBvbWl0dGVkLCBjaGVja3MgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSdW5zIGEgc3BlbGxjaGVjayBvbiB0aGUgZW50aXJlIGNvZGViYXNlIHVzaW5nIGBjc3BlbGxgLlxuICpcbiAqIENoZWNrcyBhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZm9sZGVyIGFuZCBpdHMgc3ViZm9sZGVycyBmb3Igc3BlbGxpbmcgaXNzdWVzLlxuICogSWYgaXNzdWVzIGFyZSBmb3VuZCwgdGhleSBhcmUgbG9nZ2VkIHRvIHRoZSBjb25zb2xlIHdpdGggdGhlaXIgZmlsZSBwYXRoLCBsaW5lLCBhbmQgY29sdW1uIG51bWJlci5cbiAqXG4gKiBVc2VzIGAtLW5vLW11c3QtZmluZC1maWxlc2Agc28gdGhhdCBjc3BlbGwgZG9lcyBub3QgZmFpbCB3aGVuIGFsbCBwcm92aWRlZCBwYXRoc1xuICogYXJlIGV4Y2x1ZGVkIGJ5IGJ1aWx0LWluIGlnbm9yZSBydWxlcyAoZS5nLiwgYHBhY2thZ2UtbG9jay5qc29uYCkuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFNwZWxsY2hlY2tPcHRpb25zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0sIGluZGljYXRpbmcgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgc3BlbGxjaGVjay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNwZWxsY2hlY2sob3B0aW9ucz86IFNwZWxsY2hlY2tPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcGF0aHMgfSA9IG9wdGlvbnMgPz8ge307XG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoIGlzIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFsnLiddO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWyducHgnLCAnY3NwZWxsJywgJy0tbm8tcHJvZ3Jlc3MnLCAnLS1uby1tdXN0LWZpbmQtZmlsZXMnLCB7IGJhdGNoZWRBcmdzOiB0YXJnZXRzIH1dKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLGtCQUE2QjtBQXdCN0IsZUFBc0IsV0FBVyxTQUE0QztBQUMzRSxRQUFNLEVBQUUsTUFBTSxJQUFJLFdBQVcsQ0FBQztBQUU5QixRQUFNLFVBQVUsT0FBTyxTQUFTLFFBQVEsQ0FBQyxHQUFHO0FBRTVDLFlBQU0sMEJBQWEsQ0FBQyxPQUFPLFVBQVUsaUJBQWlCLHdCQUF3QixFQUFFLGFBQWEsUUFBUSxDQUFDLENBQUM7QUFDekc7IiwKICAibmFtZXMiOiBbXQp9Cg==
150
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2NzcGVsbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZnVuY3Rpb24gZm9yIHJ1bm5pbmcgYSBzcGVsbGNoZWNrIG9uIHRoZSBjb2RlYmFzZSB1c2luZyB0aGUgYGNzcGVsbGAgbGlicmFyeS5cbiAqIEl0IHJlcG9ydHMgYW55IHNwZWxsaW5nIGlzc3VlcyBmb3VuZCBpbiB0aGUgY29kZSBhbmQgcmV0dXJucyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNwZWxsY2hlY2sgd2FzIHN1Y2Nlc3NmdWwuXG4gKi9cblxuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyXG59IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgc3BlbGxjaGVja30gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BlbGxjaGVja09wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBjaGVjay4gSWYgb21pdHRlZCwgY2hlY2tzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVucyBhIHNwZWxsY2hlY2sgb24gdGhlIGVudGlyZSBjb2RlYmFzZSB1c2luZyBgY3NwZWxsYC5cbiAqXG4gKiBDaGVja3MgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGZvbGRlciBhbmQgaXRzIHN1YmZvbGRlcnMgZm9yIHNwZWxsaW5nIGlzc3Vlcy5cbiAqIElmIGlzc3VlcyBhcmUgZm91bmQsIHRoZXkgYXJlIGxvZ2dlZCB0byB0aGUgY29uc29sZSB3aXRoIHRoZWlyIGZpbGUgcGF0aCwgbGluZSwgYW5kIGNvbHVtbiBudW1iZXIuXG4gKlxuICogVXNlcyBgLS1uby1tdXN0LWZpbmQtZmlsZXNgIHNvIHRoYXQgY3NwZWxsIGRvZXMgbm90IGZhaWwgd2hlbiBhbGwgcHJvdmlkZWQgcGF0aHNcbiAqIGFyZSBleGNsdWRlZCBieSBidWlsdC1pbiBpZ25vcmUgcnVsZXMgKGUuZy4sIGBwYWNrYWdlLWxvY2suanNvbmApLlxuICpcbiAqIFVzZXMgYC0tZ2l0aWdub3JlYCBzbyBhIHBhdGggZ2l0IGlnbm9yZXMgaXMgYSBwYXRoIGNzcGVsbCBza2lwcyBcdTIwMTQgZ2VuZXJhdGVkIG91dHB1dCwgYnVpbGQgZm9sZGVycyBhbmRcbiAqIGV2ZXJ5IGBub2RlX21vZHVsZXNgIGFyZSBjb3ZlcmVkIHdpdGhvdXQgYSBoYW5kLW1haW50YWluZWQgYGlnbm9yZVBhdGhzYCBsaXN0IHRoYXQgZHJpZnRzIGZyb21cbiAqIGAuZ2l0aWdub3JlYC4gSXQgaXMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgcmF0aGVyIHRoYW4gc2V0IGluIGBjc3BlbGwuanNvbmAgc28gdGhhdCBldmVyeSBwcm9qZWN0XG4gKiBjb25zdW1pbmcgdGhpcyBmdW5jdGlvbiBpbmhlcml0cyBpdCwgcmF0aGVyIHRoYW4gZWFjaCBoYXZpbmcgdG8gZWRpdCBpdHMgb3duIGNvbmZpZy4gYC0tZ2l0aWdub3JlLXJvb3RgXG4gKiBzdG9wcyB0aGUgc2VhcmNoIGF0IHRoZSBwcm9qZWN0IHJvb3QsIHNvIGEgYC5naXRpZ25vcmVgIGluIHNvbWUgcGFyZW50IGZvbGRlciBvdXRzaWRlIHRoZSBwcm9qZWN0IGNhbm5vdFxuICogc2lsZW50bHkgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGNoZWNrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBTcGVsbGNoZWNrT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9LCBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHNwZWxsY2hlY2suXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzcGVsbGNoZWNrKG9wdGlvbnM/OiBTcGVsbGNoZWNrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHBhdGhzIH0gPSBvcHRpb25zID8/IHt9O1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbJy4nXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3Qgcm9vdEZvbGRlciA9IGdldFJvb3RGb2xkZXIoKTtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAnbnB4JyxcbiAgICAnY3NwZWxsJyxcbiAgICAnLS1uby1wcm9ncmVzcycsXG4gICAgJy0tbm8tbXVzdC1maW5kLWZpbGVzJyxcbiAgICAnLS1naXRpZ25vcmUnLFxuICAgIC4uLnJvb3RGb2xkZXIgPT09IG51bGwgPyBbXSA6IFsnLS1naXRpZ25vcmUtcm9vdCcsIHJvb3RGb2xkZXJdLFxuICAgIHsgYmF0Y2hlZEFyZ3M6IHRhcmdldHMgfVxuICBdKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLGtCQUdPO0FBK0JQLGVBQXNCLFdBQVcsU0FBNEM7QUFDM0UsUUFBTSxFQUFFLE1BQU0sSUFBSSxXQUFXLENBQUM7QUFFOUIsUUFBTSxVQUFVLE9BQU8sU0FBUyxRQUFRLENBQUMsR0FBRztBQUU1QyxRQUFNLGlCQUFhLDJCQUFjO0FBQ2pDLFlBQU0sMEJBQWE7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUcsZUFBZSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixVQUFVO0FBQUEsSUFDN0QsRUFBRSxhQUFhLFFBQVE7QUFBQSxFQUN6QixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -23,6 +23,13 @@ export interface SpellcheckOptions {
23
23
  * Uses `--no-must-find-files` so that cspell does not fail when all provided paths
24
24
  * are excluded by built-in ignore rules (e.g., `package-lock.json`).
25
25
  *
26
+ * Uses `--gitignore` so a path git ignores is a path cspell skips — generated output, build folders and
27
+ * every `node_modules` are covered without a hand-maintained `ignorePaths` list that drifts from
28
+ * `.gitignore`. It is passed on the command line rather than set in `cspell.json` so that every project
29
+ * consuming this function inherits it, rather than each having to edit its own config. `--gitignore-root`
30
+ * stops the search at the project root, so a `.gitignore` in some parent folder outside the project cannot
31
+ * silently remove files from the check.
32
+ *
26
33
  * @param options - The {@link SpellcheckOptions}.
27
34
  * @returns A {@link Promise} that resolves to a {@link CliTaskResult}, indicating the success or failure of the spellcheck.
28
35
  */
@@ -162,17 +162,20 @@ const obsidianDevUtilsConfig = {
162
162
  customRules: [
163
163
  import_markdownlint_rule_relative_links.default
164
164
  ],
165
+ // Every `.gitignore` in the tree, and up to the repository root — git's own default behavior. A path git
166
+ // Ignores is a path we do not lint, so `node_modules` (including the nested ones under test fixtures),
167
+ // `dist`, and every generated folder are skipped without anyone maintaining a list that can drift.
168
+ gitignore: true,
165
169
  globs: [
166
170
  "**/*.md"
167
171
  ],
172
+ // Git never "ignores" `.git` itself — it is simply outside the working tree — so this one stays explicit.
168
173
  ignores: [
169
- "**/node_modules/**",
170
- ".git/**",
171
- "dist/**"
174
+ ".git/**"
172
175
  ]
173
176
  };
174
177
  // Annotate the CommonJS export names for ESM import in node:
175
178
  0 && (module.exports = {
176
179
  obsidianDevUtilsConfig
177
180
  });
178
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlZmF1bHQgbWFya2Rvd25saW50LWNsaTIgY29uZmlndXJhdGlvbiBmb3IgdGhlIE9ic2lkaWFuIERldiBVdGlscy5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVjbGFyYXRpdmUgbWFya2Rvd25saW50LWNsaTIgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBtYXJrZG93bmxpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgcmVsYXRpdmVMaW5rc1J1bGUgZnJvbSAnbWFya2Rvd25saW50LXJ1bGUtcmVsYXRpdmUtbGlua3MnO1xuXG5pbXBvcnQgdHlwZSB7IE1hcmtkb3dubGludENsaTJDb25maWd1cmF0aW9uU2NoZW1hIH0gZnJvbSAnLi9tYXJrZG93bmxpbnQtdHlwZXMvQHR5cGVzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy1zY2hlbWEuZC50cyc7XG5cbi8qKlxuICogRGVmYXVsdCBtYXJrZG93bmxpbnQtY2xpMiBjb25maWd1cmF0aW9uIGZvciB0aGUgT2JzaWRpYW4gRGV2IFV0aWxzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTWFya2Rvd25saW50Q2xpMkNvbmZpZ3VyYXRpb25TY2hlbWEgPSB7XG4gIGNvbmZpZzoge1xuICAgICdNRDAxMyc6IGZhbHNlLFxuICAgICdNRDAyNCc6IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2UgLS0gVGhhdCdzIGhvdyBpdCBpcyBkZWZpbmVkIGluIHRoZSBzY2hlbWEuXG4gICAgICBzaWJsaW5nc19vbmx5OiB0cnVlXG4gICAgfSxcbiAgICAnTUQwNTInOiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlIC0tIFRoYXQncyBob3cgaXQgaXMgZGVmaW5lZCBpbiB0aGUgc2NoZW1hLlxuICAgICAgaWdub3JlZF9sYWJlbHM6IFtcbiAgICAgICAgJyFub3RlJyxcbiAgICAgICAgJyF3YXJuaW5nJyxcbiAgICAgICAgLy8gUHJlc2VydmUgbWFya2Rvd25saW50J3MgZGVmYXVsdCBpZ25vcmVkIGxhYmVsIHNvIEdGTSB0YXNrLWxpc3QgaXRlbXMgKGAtIFt4XWApIGFyZSBub3QgZmxhZ2dlZCBhcyB1bmRlZmluZWQgc2hvcnRjdXQgcmVmZXJlbmNlcy5cbiAgICAgICAgJ3gnXG4gICAgICBdLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSAtLSBUaGF0J3MgaG93IGl0IGlzIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbiAgICAgIHNob3J0Y3V0X3N5bnRheDogdHJ1ZVxuICAgIH0sXG4gICAgJ3JlbGF0aXZlLWxpbmtzJzogdHJ1ZVxuICB9LFxuICBjdXN0b21SdWxlczogW1xuICAgIHJlbGF0aXZlTGlua3NSdWxlXG4gIF0sXG4gIGdsb2JzOiBbXG4gICAgJyoqLyoubWQnXG4gIF0sXG4gIGlnbm9yZXM6IFtcbiAgICAnKiovbm9kZV9tb2R1bGVzLyoqJyxcbiAgICAnLmdpdC8qKicsXG4gICAgJ2Rpc3QvKionXG4gIF1cbn07XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsOENBQThCO0FBT3ZCLE1BQU0seUJBQThEO0FBQUEsRUFDekUsUUFBUTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBO0FBQUEsTUFFUCxlQUFlO0FBQUEsSUFDakI7QUFBQSxJQUNBLFNBQVM7QUFBQTtBQUFBLE1BRVAsZ0JBQWdCO0FBQUEsUUFDZDtBQUFBLFFBQ0E7QUFBQTtBQUFBLFFBRUE7QUFBQSxNQUNGO0FBQUE7QUFBQSxNQUVBLGlCQUFpQjtBQUFBLElBQ25CO0FBQUEsSUFDQSxrQkFBa0I7QUFBQSxFQUNwQjtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1gsd0NBQUFBO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJyZWxhdGl2ZUxpbmtzUnVsZSJdCn0K
181
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlZmF1bHQgbWFya2Rvd25saW50LWNsaTIgY29uZmlndXJhdGlvbiBmb3IgdGhlIE9ic2lkaWFuIERldiBVdGlscy5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVjbGFyYXRpdmUgbWFya2Rvd25saW50LWNsaTIgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBtYXJrZG93bmxpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgcmVsYXRpdmVMaW5rc1J1bGUgZnJvbSAnbWFya2Rvd25saW50LXJ1bGUtcmVsYXRpdmUtbGlua3MnO1xuXG5pbXBvcnQgdHlwZSB7IE1hcmtkb3dubGludENsaTJDb25maWd1cmF0aW9uU2NoZW1hIH0gZnJvbSAnLi9tYXJrZG93bmxpbnQtdHlwZXMvQHR5cGVzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy1zY2hlbWEuZC50cyc7XG5cbi8qKlxuICogRGVmYXVsdCBtYXJrZG93bmxpbnQtY2xpMiBjb25maWd1cmF0aW9uIGZvciB0aGUgT2JzaWRpYW4gRGV2IFV0aWxzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTWFya2Rvd25saW50Q2xpMkNvbmZpZ3VyYXRpb25TY2hlbWEgPSB7XG4gIGNvbmZpZzoge1xuICAgICdNRDAxMyc6IGZhbHNlLFxuICAgICdNRDAyNCc6IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2UgLS0gVGhhdCdzIGhvdyBpdCBpcyBkZWZpbmVkIGluIHRoZSBzY2hlbWEuXG4gICAgICBzaWJsaW5nc19vbmx5OiB0cnVlXG4gICAgfSxcbiAgICAnTUQwNTInOiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlIC0tIFRoYXQncyBob3cgaXQgaXMgZGVmaW5lZCBpbiB0aGUgc2NoZW1hLlxuICAgICAgaWdub3JlZF9sYWJlbHM6IFtcbiAgICAgICAgJyFub3RlJyxcbiAgICAgICAgJyF3YXJuaW5nJyxcbiAgICAgICAgLy8gUHJlc2VydmUgbWFya2Rvd25saW50J3MgZGVmYXVsdCBpZ25vcmVkIGxhYmVsIHNvIEdGTSB0YXNrLWxpc3QgaXRlbXMgKGAtIFt4XWApIGFyZSBub3QgZmxhZ2dlZCBhcyB1bmRlZmluZWQgc2hvcnRjdXQgcmVmZXJlbmNlcy5cbiAgICAgICAgJ3gnXG4gICAgICBdLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSAtLSBUaGF0J3MgaG93IGl0IGlzIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbiAgICAgIHNob3J0Y3V0X3N5bnRheDogdHJ1ZVxuICAgIH0sXG4gICAgJ3JlbGF0aXZlLWxpbmtzJzogdHJ1ZVxuICB9LFxuICBjdXN0b21SdWxlczogW1xuICAgIHJlbGF0aXZlTGlua3NSdWxlXG4gIF0sXG4gIC8vIEV2ZXJ5IGAuZ2l0aWdub3JlYCBpbiB0aGUgdHJlZSwgYW5kIHVwIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QgXHUyMDE0IGdpdCdzIG93biBkZWZhdWx0IGJlaGF2aW9yLiBBIHBhdGggZ2l0XG4gIC8vIElnbm9yZXMgaXMgYSBwYXRoIHdlIGRvIG5vdCBsaW50LCBzbyBgbm9kZV9tb2R1bGVzYCAoaW5jbHVkaW5nIHRoZSBuZXN0ZWQgb25lcyB1bmRlciB0ZXN0IGZpeHR1cmVzKSxcbiAgLy8gYGRpc3RgLCBhbmQgZXZlcnkgZ2VuZXJhdGVkIGZvbGRlciBhcmUgc2tpcHBlZCB3aXRob3V0IGFueW9uZSBtYWludGFpbmluZyBhIGxpc3QgdGhhdCBjYW4gZHJpZnQuXG4gIGdpdGlnbm9yZTogdHJ1ZSxcbiAgZ2xvYnM6IFtcbiAgICAnKiovKi5tZCdcbiAgXSxcbiAgLy8gR2l0IG5ldmVyIFwiaWdub3Jlc1wiIGAuZ2l0YCBpdHNlbGYgXHUyMDE0IGl0IGlzIHNpbXBseSBvdXRzaWRlIHRoZSB3b3JraW5nIHRyZWUgXHUyMDE0IHNvIHRoaXMgb25lIHN0YXlzIGV4cGxpY2l0LlxuICBpZ25vcmVzOiBbXG4gICAgJy5naXQvKionXG4gIF1cbn07XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsOENBQThCO0FBT3ZCLE1BQU0seUJBQThEO0FBQUEsRUFDekUsUUFBUTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBO0FBQUEsTUFFUCxlQUFlO0FBQUEsSUFDakI7QUFBQSxJQUNBLFNBQVM7QUFBQTtBQUFBLE1BRVAsZ0JBQWdCO0FBQUEsUUFDZDtBQUFBLFFBQ0E7QUFBQTtBQUFBLFFBRUE7QUFBQSxNQUNGO0FBQUE7QUFBQSxNQUVBLGlCQUFpQjtBQUFBLElBQ25CO0FBQUEsSUFDQSxrQkFBa0I7QUFBQSxFQUNwQjtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1gsd0NBQUFBO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUEsV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBQUE7QUFBQSxFQUVBLFNBQVM7QUFBQSxJQUNQO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJyZWxhdGl2ZUxpbmtzUnVsZSJdCn0K