obsidian-dev-utils 76.0.0 → 77.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.
Files changed (115) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/dev/main.js +277 -59
  3. package/dist/lib/cjs/library.cjs +1 -1
  4. package/dist/lib/cjs/obsidian/attachment-path.cjs +2 -2
  5. package/dist/lib/cjs/obsidian/attachment-path.d.cts +11 -4
  6. package/dist/lib/cjs/obsidian/case-insensitive-file-index.cjs +238 -0
  7. package/dist/lib/cjs/obsidian/case-insensitive-file-index.d.cts +92 -0
  8. package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.cjs +173 -0
  9. package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.d.cts +29 -0
  10. package/dist/lib/cjs/obsidian/components/embed-extensions-component.cjs +167 -0
  11. package/dist/lib/cjs/obsidian/components/embed-extensions-component.d.cts +38 -0
  12. package/dist/lib/cjs/obsidian/components/index.cjs +7 -1
  13. package/dist/lib/cjs/obsidian/components/index.d.cts +2 -0
  14. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +17 -15
  15. package/dist/lib/cjs/obsidian/file-change.cjs +4 -4
  16. package/dist/lib/cjs/obsidian/file-change.d.cts +6 -2
  17. package/dist/lib/cjs/obsidian/file-manager.cjs +6 -6
  18. package/dist/lib/cjs/obsidian/file-manager.d.cts +6 -2
  19. package/dist/lib/cjs/obsidian/file-system.cjs +20 -19
  20. package/dist/lib/cjs/obsidian/file-system.d.cts +6 -12
  21. package/dist/lib/cjs/obsidian/index.cjs +7 -1
  22. package/dist/lib/cjs/obsidian/index.d.cts +2 -0
  23. package/dist/lib/cjs/obsidian/link.cjs +13 -14
  24. package/dist/lib/cjs/obsidian/link.d.cts +15 -7
  25. package/dist/lib/cjs/obsidian/vault.cjs +3 -3
  26. package/dist/lib/cjs/obsidian/view-registrar.cjs +156 -0
  27. package/dist/lib/cjs/obsidian/view-registrar.d.cts +39 -0
  28. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +5 -5
  29. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +8 -8
  30. package/dist/lib/cjs/script-utils/bundlers/esbuild.cjs +1 -1
  31. package/dist/lib/cjs/script-utils/bundlers/esbuild.d.cts +1 -1
  32. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -3
  33. package/dist/lib/cjs/script-utils/formatters/dprint.d.cts +3 -3
  34. package/dist/lib/cjs/script-utils/json.cjs +1 -1
  35. package/dist/lib/cjs/script-utils/json.d.cts +5 -1
  36. package/dist/lib/cjs/script-utils/linters/cspell.cjs +3 -3
  37. package/dist/lib/cjs/script-utils/linters/cspell.d.cts +3 -3
  38. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +5 -5
  39. package/dist/lib/cjs/script-utils/linters/eslint-config.d.cts +3 -3
  40. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.cjs +22 -17
  41. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +16 -6
  42. package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -3
  43. package/dist/lib/cjs/script-utils/linters/eslint.d.cts +3 -3
  44. package/dist/lib/cjs/script-utils/linters/index.cjs +6 -3
  45. package/dist/lib/cjs/script-utils/linters/index.d.cts +1 -0
  46. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +3 -3
  47. package/dist/lib/cjs/script-utils/linters/markdownlint.d.cts +3 -3
  48. package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +453 -0
  49. package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +204 -0
  50. package/dist/lib/cjs/script-utils/npm.cjs +1 -1
  51. package/dist/lib/cjs/script-utils/npm.d.cts +20 -4
  52. package/dist/lib/cjs/script-utils/root.cjs +1 -1
  53. package/dist/lib/cjs/script-utils/root.d.cts +5 -1
  54. package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +8 -8
  55. package/dist/lib/cjs/script-utils/test-runners/vitest.d.cts +14 -10
  56. package/dist/lib/esm/library.mjs +1 -1
  57. package/dist/lib/esm/obsidian/attachment-path.d.mts +11 -4
  58. package/dist/lib/esm/obsidian/attachment-path.mjs +2 -2
  59. package/dist/lib/esm/obsidian/case-insensitive-file-index.d.mts +92 -0
  60. package/dist/lib/esm/obsidian/case-insensitive-file-index.mjs +127 -0
  61. package/dist/lib/esm/obsidian/components/case-insensitive-file-index-component.d.mts +29 -0
  62. package/dist/lib/esm/obsidian/components/case-insensitive-file-index-component.mjs +69 -0
  63. package/dist/lib/esm/obsidian/components/embed-extensions-component.d.mts +38 -0
  64. package/dist/lib/esm/obsidian/components/embed-extensions-component.mjs +59 -0
  65. package/dist/lib/esm/obsidian/components/index.d.mts +2 -0
  66. package/dist/lib/esm/obsidian/components/index.mjs +5 -1
  67. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +17 -15
  68. package/dist/lib/esm/obsidian/file-change.d.mts +6 -2
  69. package/dist/lib/esm/obsidian/file-change.mjs +4 -4
  70. package/dist/lib/esm/obsidian/file-manager.d.mts +6 -2
  71. package/dist/lib/esm/obsidian/file-manager.mjs +6 -6
  72. package/dist/lib/esm/obsidian/file-system.d.mts +6 -12
  73. package/dist/lib/esm/obsidian/file-system.mjs +20 -19
  74. package/dist/lib/esm/obsidian/index.d.mts +2 -0
  75. package/dist/lib/esm/obsidian/index.mjs +5 -1
  76. package/dist/lib/esm/obsidian/link.d.mts +15 -7
  77. package/dist/lib/esm/obsidian/link.mjs +13 -14
  78. package/dist/lib/esm/obsidian/vault.mjs +3 -3
  79. package/dist/lib/esm/obsidian/view-registrar.d.mts +39 -0
  80. package/dist/lib/esm/obsidian/view-registrar.mjs +48 -0
  81. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +8 -8
  82. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +5 -5
  83. package/dist/lib/esm/script-utils/bundlers/esbuild.d.mts +1 -1
  84. package/dist/lib/esm/script-utils/bundlers/esbuild.mjs +1 -1
  85. package/dist/lib/esm/script-utils/formatters/dprint.d.mts +3 -3
  86. package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -3
  87. package/dist/lib/esm/script-utils/json.d.mts +5 -1
  88. package/dist/lib/esm/script-utils/json.mjs +1 -1
  89. package/dist/lib/esm/script-utils/linters/cspell.d.mts +3 -3
  90. package/dist/lib/esm/script-utils/linters/cspell.mjs +3 -3
  91. package/dist/lib/esm/script-utils/linters/eslint-config.d.mts +3 -3
  92. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +5 -5
  93. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +16 -6
  94. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.mjs +22 -17
  95. package/dist/lib/esm/script-utils/linters/eslint.d.mts +3 -3
  96. package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -3
  97. package/dist/lib/esm/script-utils/linters/index.d.mts +1 -0
  98. package/dist/lib/esm/script-utils/linters/index.mjs +4 -2
  99. package/dist/lib/esm/script-utils/linters/markdownlint.d.mts +3 -3
  100. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +3 -3
  101. package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +204 -0
  102. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +365 -0
  103. package/dist/lib/esm/script-utils/npm.d.mts +20 -4
  104. package/dist/lib/esm/script-utils/npm.mjs +1 -1
  105. package/dist/lib/esm/script-utils/root.d.mts +5 -1
  106. package/dist/lib/esm/script-utils/root.mjs +1 -1
  107. package/dist/lib/esm/script-utils/test-runners/vitest.d.mts +14 -10
  108. package/dist/lib/esm/script-utils/test-runners/vitest.mjs +8 -8
  109. package/dist/scripts/linters/over-exposure/find-overexposed.ts +12 -0
  110. package/obsidian/Components/case-insensitive-file-index-component/package.json +6 -0
  111. package/obsidian/Components/embed-extensions-component/package.json +6 -0
  112. package/obsidian/case-insensitive-file-index/package.json +6 -0
  113. package/obsidian/view-registrar/package.json +6 -0
  114. package/package.json +15 -15
  115. package/script-utils/linters/over-exposure/package.json +6 -0
@@ -0,0 +1,204 @@
1
+ /// <reference path="../../library.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Over-exposure analyzer.
6
+ *
7
+ * Finds declarations exposed more broadly than their references require, so the exposure can be
8
+ * tightened:
9
+ *
10
+ * - `export`ed symbols referenced only within their own file — the `export` can be dropped.
11
+ * - `public` class members referenced only inside their own class — they can be `private`.
12
+ * - `public` class members referenced only inside their own class and its subclasses — they can be
13
+ * `protected`.
14
+ * - `protected` class members referenced only inside their own class — they can be `private`.
15
+ *
16
+ * The analysis is whole-program and type-aware: it uses the TypeScript language service's
17
+ * find-all-references to locate every use of each declaration, then classifies the tightest
18
+ * exposure that still covers all references. Members invoked by the framework via registration
19
+ * rather than by visible references (Obsidian lifecycle hooks, settings-tab `display`, etc.) are
20
+ * excluded via {@link LIFECYCLE_ALLOWLIST}, as are `override` and `static` members whose exposure is
21
+ * constrained by a base declaration.
22
+ *
23
+ * A member referenced only from test files is reported with {@link OverExposureFinding.isForcedByTestOnly}
24
+ * set, surfacing members widened purely for testability — the canonical case for extracting logic
25
+ * into an independently testable component instead.
26
+ */
27
+ import type { CompilerOptions, LanguageService, LanguageServiceHost } from 'typescript';
28
+ /**
29
+ * Parameters for {@link analyzeOverExposure}.
30
+ */
31
+ export interface AnalyzeOverExposureParams {
32
+ /** The language service to query for references and types. */
33
+ readonly languageService: LanguageService;
34
+ /**
35
+ * Optional callback invoked once per analyzed source file, before that file is processed. The
36
+ * whole-program reference analysis is slow, so this lets callers report live progress instead of
37
+ * appearing to hang.
38
+ */
39
+ onProgress?(this: void, progress: OverExposureProgress): void;
40
+ /**
41
+ * Absolute (canonical) path of the project's `src` folder. Only declarations in non-test files
42
+ * under this folder are analyzed; declarations elsewhere (test files, dependencies) are ignored
43
+ * but still counted as reference sites.
44
+ */
45
+ readonly srcFolder: string;
46
+ }
47
+ /**
48
+ * Parameters for {@link createLanguageServiceHost}.
49
+ */
50
+ export interface CreateLanguageServiceHostParams {
51
+ /** The compiler options. */
52
+ readonly compilerOptions: CompilerOptions;
53
+ /** The files to include in the program. */
54
+ readonly fileNames: readonly string[];
55
+ /** The file-system operations used to read sources. */
56
+ readonly fileSystem: OverExposureFileSystem;
57
+ }
58
+ /**
59
+ * Parameters for {@link createProjectLanguageService}.
60
+ */
61
+ export interface CreateProjectLanguageServiceParams {
62
+ /** Absolute path to the project's `tsconfig.json`. */
63
+ readonly tsConfigPath: string;
64
+ }
65
+ /**
66
+ * The exposure level a declaration currently has.
67
+ */
68
+ export type CurrentExposure = 'export' | 'protected' | 'public';
69
+ /**
70
+ * Parameters for {@link findOverExposure}.
71
+ */
72
+ export interface FindOverExposureParams {
73
+ /**
74
+ * Optional callback invoked once per analyzed source file, for live progress reporting. Forwarded
75
+ * to {@link analyzeOverExposure}.
76
+ */
77
+ onProgress?(this: void, progress: OverExposureProgress): void;
78
+ /** Absolute path to the project root (the folder containing `tsconfig.json` and `src`). */
79
+ readonly projectFolder: string;
80
+ }
81
+ /**
82
+ * The subset of file-system operations the language-service host needs. Injecting this (rather than
83
+ * always using `typescript`'s `sys`) lets tests drive the analyzer against in-memory sources with no
84
+ * real file-system access.
85
+ */
86
+ export interface OverExposureFileSystem {
87
+ /**
88
+ * @param path - Directory path.
89
+ * @returns `true` when the directory exists.
90
+ */
91
+ directoryExists(this: void, path: string): boolean;
92
+ /**
93
+ * @param path - File path.
94
+ * @returns `true` when the file exists.
95
+ */
96
+ fileExists(this: void, path: string): boolean;
97
+ /**
98
+ * @returns The current working directory.
99
+ */
100
+ getCurrentDirectory(this: void): string;
101
+ /**
102
+ * @param path - Directory path.
103
+ * @returns The immediate subdirectory names.
104
+ */
105
+ getDirectories(this: void, path: string): string[];
106
+ /**
107
+ * @param path - Root directory.
108
+ * @param extensions - Extensions to include.
109
+ * @param exclude - Patterns to exclude.
110
+ * @param include - Patterns to include.
111
+ * @param depth - Maximum recursion depth.
112
+ * @returns The matching file paths.
113
+ */
114
+ readDirectory(this: void, path: string, extensions?: readonly string[], exclude?: readonly string[], include?: readonly string[], depth?: number): string[];
115
+ /**
116
+ * @param path - File path.
117
+ * @returns The file contents, or `undefined` when absent.
118
+ */
119
+ readFile(this: void, path: string): string | undefined;
120
+ }
121
+ /**
122
+ * A single over-exposed declaration.
123
+ */
124
+ export interface OverExposureFinding {
125
+ /** 1-based column of the declaration's name. */
126
+ readonly column: number;
127
+ /** The current exposure level. */
128
+ readonly currentExposure: CurrentExposure;
129
+ /** Absolute path of the file declaring the symbol. */
130
+ readonly filePath: string;
131
+ /** `true` when the declaration has no references at all (besides itself). */
132
+ readonly hasNoReferences: boolean;
133
+ /**
134
+ * `true` when the declaration would qualify for a tighter exposure if not for references coming
135
+ * exclusively from test files — i.e. it is exposed purely for testability.
136
+ */
137
+ readonly isForcedByTestOnly: boolean;
138
+ /** `true` for a class member, `false` for a top-level export. */
139
+ readonly isMember: boolean;
140
+ /** 1-based line of the declaration's name. */
141
+ readonly line: number;
142
+ /** The declared name. */
143
+ readonly name: string;
144
+ /** The exposure the declaration could be tightened to. */
145
+ readonly suggestedExposure: SuggestedExposure;
146
+ }
147
+ /**
148
+ * Progress reported while analyzing a project, one event per analyzed source file.
149
+ */
150
+ export interface OverExposureProgress {
151
+ /** Number of source files fully analyzed before the current one (0-based). */
152
+ readonly analyzedFileCount: number;
153
+ /** Absolute (canonical) path of the source file about to be analyzed. */
154
+ readonly currentFilePath: string;
155
+ /** Total number of source files that will be analyzed. */
156
+ readonly totalFileCount: number;
157
+ }
158
+ /**
159
+ * The (tighter) exposure level a declaration could be reduced to.
160
+ */
161
+ export type SuggestedExposure = 'file-local' | 'private' | 'protected';
162
+ /**
163
+ * Lifecycle and framework members invoked by Obsidian or a base class via registration rather than
164
+ * by references the language service can see. Tightening these would break the framework contract,
165
+ * so they are never reported.
166
+ */
167
+ export declare const LIFECYCLE_ALLOWLIST: ReadonlySet<string>;
168
+ /**
169
+ * Analyzes a project (already loaded into a language service) for over-exposed declarations.
170
+ *
171
+ * @param params - The {@link AnalyzeOverExposureParams}.
172
+ * @returns The over-exposed declarations, in discovery order.
173
+ */
174
+ export declare function analyzeOverExposure(params: AnalyzeOverExposureParams): OverExposureFinding[];
175
+ /**
176
+ * Builds a {@link LanguageServiceHost} backed by an explicit file list and file system.
177
+ *
178
+ * @param params - The {@link CreateLanguageServiceHostParams}.
179
+ * @returns The language-service host.
180
+ */
181
+ export declare function createLanguageServiceHost(params: CreateLanguageServiceHostParams): LanguageServiceHost;
182
+ /**
183
+ * Builds a language service over every file in a project's `tsconfig.json`.
184
+ *
185
+ * @param params - The {@link CreateProjectLanguageServiceParams}.
186
+ * @returns A language service ready for {@link analyzeOverExposure}.
187
+ */
188
+ export declare function createProjectLanguageService(params: CreateProjectLanguageServiceParams): LanguageService;
189
+ /**
190
+ * Finds over-exposed declarations in a project on disk.
191
+ *
192
+ * @param params - The {@link FindOverExposureParams}.
193
+ * @returns The over-exposed declarations.
194
+ */
195
+ export declare function findOverExposure(params: FindOverExposureParams): OverExposureFinding[];
196
+ /**
197
+ * Formats over-exposure findings as a human-readable report. Findings are grouped by file and each
198
+ * line begins with a `path:line:column` location so terminals (e.g. VS Code) render it as a
199
+ * clickable link that jumps to the declaration.
200
+ *
201
+ * @param findings - The findings to format.
202
+ * @returns The report text. Empty-finding input yields a single "no findings" line.
203
+ */
204
+ export declare function formatOverExposureFindings(findings: readonly OverExposureFinding[]): string;
@@ -235,4 +235,4 @@ function writePackageLockJsonSync(packageLockJson, cwd) {
235
235
  writePackageLockJson,
236
236
  writePackageLockJsonSync
237
237
  });
238
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9ucG0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgTlBNIHBhY2thZ2UuanNvbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBhY2thZ2VKc29uLFxuICBQcm9taXNhYmxlXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgRWRpdEpzb25PcHRpb25zIH0gZnJvbSAnLi9qc29uLnRzJztcblxuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHtcbiAgZWRpdEpzb24sXG4gIGVkaXRKc29uU3luYyxcbiAgcmVhZEpzb24sXG4gIHJlYWRKc29uU3luYyxcbiAgd3JpdGVKc29uLFxuICB3cml0ZUpzb25TeW5jXG59IGZyb20gJy4vanNvbi50cyc7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290IH0gZnJvbSAnLi9yb290LnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdFBhY2thZ2VKc29ufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0UGFja2FnZUpzb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS5qc29uYCBpcyBsb2NhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHNraXBzIGVkaXRpbmcgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwSWZNaXNzaW5nPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHR5cGUgb2YgdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfTtcblxuLyoqXG4gKiBBIHR5cGUgb2YgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlTG9ja0pzb24gZXh0ZW5kcyBQYXJ0aWFsPFBhY2thZ2VKc29uPiB7XG4gIC8qKlxuICAgKiBQYWNrYWdlcyBpbiB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlLlxuICAgKi9cbiAgcGFja2FnZXM/OiBSZWNvcmQ8c3RyaW5nLCBQYWNrYWdlSnNvbj47XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBlZGl0aW5nLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIGVkaXRlZCBhbmQgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXROcG1TaHJpbmtXcmFwSnNvbihcbiAgZWRpdEZuOiAocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24pID0+IFByb21pc2FibGU8dm9pZD4sXG4gIG9wdGlvbnM6IEVkaXRQYWNrYWdlSnNvbk9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBjd2QsXG4gICAgc2hvdWxkU2tpcElmTWlzc2luZ1xuICB9ID0gb3B0aW9ucztcbiAgYXdhaXQgZWRpdEpzb248UGFja2FnZUpzb24+KGdldE5wbVNocmlua1dyYXBKc29uUGF0aChjd2QpLCBlZGl0Rm4sIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFZGl0SnNvbk9wdGlvbnM+KHsgc2hvdWxkU2tpcElmTWlzc2luZyB9KSk7XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgdXNpbmcgdGhlIHByb3ZpZGVkIGVkaXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGVkaXRGbiAtIFRoZSBmdW5jdGlvbiB0byBlZGl0IHRoZSBwYXJzZWQgYFBhY2thZ2VKc29uYCBvYmplY3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgZWRpdGluZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBoYXMgYmVlbiBlZGl0ZWQgYW5kIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0UGFja2FnZUpzb24oXG4gIGVkaXRGbjogKHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbikgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgb3B0aW9uczogRWRpdFBhY2thZ2VKc29uT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGN3ZCxcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBhd2FpdCBlZGl0SnNvbjxQYWNrYWdlSnNvbj4oZ2V0UGFja2FnZUpzb25QYXRoKGN3ZCksIGVkaXRGbiwgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEVkaXRKc29uT3B0aW9ucz4oeyBzaG91bGRTa2lwSWZNaXNzaW5nIH0pKTtcbn1cblxuLyoqXG4gKiBSZWFkcywgZWRpdHMsIGFuZCB3cml0ZXMgYmFjayB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBlZGl0aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWRpdFBhY2thZ2VKc29uU3luYyhcbiAgZWRpdEZuOiAocGFja2FnZUpzb246IFBhY2thZ2VKc29uKSA9PiB2b2lkLFxuICBvcHRpb25zOiBFZGl0UGFja2FnZUpzb25PcHRpb25zID0ge31cbik6IHZvaWQge1xuICBjb25zdCB7XG4gICAgY3dkLFxuICAgIHNob3VsZFNraXBJZk1pc3NpbmdcbiAgfSA9IG9wdGlvbnM7XG4gIGVkaXRKc29uU3luYzxQYWNrYWdlSnNvbj4oZ2V0UGFja2FnZUpzb25QYXRoKGN3ZCksIGVkaXRGbiwgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEVkaXRKc29uT3B0aW9ucz4oeyBzaG91bGRTa2lwSWZNaXNzaW5nIH0pKTtcbn1cblxuLyoqXG4gKiBSZWFkcywgZWRpdHMsIGFuZCB3cml0ZXMgYmFjayB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlIHVzaW5nIHRoZSBwcm92aWRlZCBlZGl0IGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBlZGl0Rm4gLSBUaGUgZnVuY3Rpb24gdG8gZWRpdCB0aGUgcGFyc2VkIGBQYWNrYWdlSnNvbmAgb2JqZWN0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGVkaXRpbmcuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gZWRpdGVkIGFuZCB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWRpdFBhY2thZ2VMb2NrSnNvbihcbiAgZWRpdEZuOiAocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24pID0+IFByb21pc2FibGU8dm9pZD4sXG4gIG9wdGlvbnM6IEVkaXRQYWNrYWdlSnNvbk9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBjd2QsXG4gICAgc2hvdWxkU2tpcElmTWlzc2luZ1xuICB9ID0gb3B0aW9ucztcbiAgYXdhaXQgZWRpdEpzb248UGFja2FnZUpzb24+KGdldFBhY2thZ2VMb2NrSnNvblBhdGgoY3dkKSwgZWRpdEZuLCBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8RWRpdEpzb25PcHRpb25zPih7IHNob3VsZFNraXBJZk1pc3NpbmcgfSkpO1xufVxuXG4vKipcbiAqIFJlYWRzLCBlZGl0cywgYW5kIHdyaXRlcyBiYWNrIHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGUgdXNpbmcgdGhlIHByb3ZpZGVkIGVkaXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGVkaXRGbiAtIFRoZSBmdW5jdGlvbiB0byBlZGl0IHRoZSBwYXJzZWQgYFBhY2thZ2VMb2NrSnNvbmAgb2JqZWN0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGVkaXRpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlZGl0UGFja2FnZUxvY2tKc29uU3luYyhcbiAgZWRpdEZuOiAocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24pID0+IHZvaWQsXG4gIG9wdGlvbnM6IEVkaXRQYWNrYWdlSnNvbk9wdGlvbnMgPSB7fVxuKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBjd2QsXG4gICAgc2hvdWxkU2tpcElmTWlzc2luZ1xuICB9ID0gb3B0aW9ucztcbiAgZWRpdEpzb25TeW5jPFBhY2thZ2VMb2NrSnNvbj4oZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2QpLCBlZGl0Rm4sIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFZGl0SnNvbk9wdGlvbnM+KHsgc2hvdWxkU2tpcElmTWlzc2luZyB9KSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHBhdGggdG8gdGhlIGBucG0tc2hyaW5rd3JhcC5qc29uYCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGluIHRoZSByb290IGlmIG5vIGZvbGRlciBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBucG0tc2hyaW5rd3JhcC5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHBhdGggdG8gdGhlIGBucG0tc2hyaW5rd3JhcC5qc29uYCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnBtU2hyaW5rV3JhcEpzb25QYXRoKGN3ZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShyZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk5wbVNocmlua3dyYXBKc29uLCBjd2QpLCAnQ291bGQgbm90IGRldGVybWluZSB0aGUgbnBtLXNocmlua3dyYXAuanNvbiBwYXRoJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHBhdGggdG8gdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgaW4gdGhlIHJvb3QgaWYgbm8gZm9sZGVyIGlzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UuanNvbmAgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoIHRvIHRoZSBgcGFja2FnZS5qc29uYCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZUpzb25QYXRoKGN3ZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShyZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlBhY2thZ2VKc29uLCBjd2QpLCAnQ291bGQgbm90IGRldGVybWluZSB0aGUgcGFja2FnZS5qc29uIHBhdGgnKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgcGF0aCB0byB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGluIHRoZSByb290IGlmIG5vIGZvbGRlciBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLWxvY2suanNvbmAgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoIHRvIHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTG9ja0pzb25QYXRoKGN3ZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShyZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlBhY2thZ2VMb2NrSnNvbiwgY3dkKSwgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHBhY2thZ2UtbG9jay5qc29uIHBhdGgnKTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZSBmcm9tIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGZyb20gdGhlIHJvb3QgaWYgbm8gZm9sZGVyIGlzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UuanNvbmAgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcGFyc2VkIGBQYWNrYWdlSnNvbmAgb2JqZWN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFBhY2thZ2VKc29uKGN3ZD86IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUpzb24+IHtcbiAgcmV0dXJuIGF3YWl0IHJlYWRKc29uPFBhY2thZ2VKc29uPihnZXRQYWNrYWdlSnNvblBhdGgoY3dkKSk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgZnJvbSB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBmcm9tIHRoZSByb290IGlmIG5vIGZvbGRlciBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGBQYWNrYWdlSnNvbmAgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZFBhY2thZ2VKc29uU3luYyhjd2Q/OiBzdHJpbmcpOiBQYWNrYWdlSnNvbiB7XG4gIHJldHVybiByZWFkSnNvblN5bmM8UGFja2FnZUpzb24+KGdldFBhY2thZ2VKc29uUGF0aChjd2QpKTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlIGZyb20gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgZnJvbSB0aGUgcm9vdCBpZiBubyBmb2xkZXIgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS1sb2NrLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRQYWNrYWdlTG9ja0pzb24oY3dkPzogc3RyaW5nKTogUHJvbWlzZTxQYWNrYWdlTG9ja0pzb24+IHtcbiAgcmV0dXJuIGF3YWl0IHJlYWRKc29uPFBhY2thZ2VMb2NrSnNvbj4oZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2QpKTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlIGZyb20gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgZnJvbSB0aGUgcm9vdCBpZiBubyBmb2xkZXIgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS1sb2NrLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGBQYWNrYWdlTG9ja0pzb25gIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRQYWNrYWdlTG9ja0pzb25TeW5jKGN3ZD86IHN0cmluZyk6IFBhY2thZ2VMb2NrSnNvbiB7XG4gIHJldHVybiByZWFkSnNvblN5bmM8UGFja2FnZUxvY2tKc29uPihnZXRQYWNrYWdlTG9ja0pzb25QYXRoKGN3ZCkpO1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUgcHJvdmlkZWQgYFBhY2thZ2VKc29uYCBvYmplY3QgdG8gdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgaW4gdGhlIHJvb3QuXG4gKlxuICogQHBhcmFtIHBhY2thZ2VKc29uIC0gVGhlIGBQYWNrYWdlSnNvbmAgb2JqZWN0IHRvIHdyaXRlLlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUGFja2FnZUpzb24ocGFja2FnZUpzb246IFBhY2thZ2VKc29uLCBjd2Q/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgd3JpdGVKc29uKGdldFBhY2thZ2VKc29uUGF0aChjd2QpLCBwYWNrYWdlSnNvbik7XG59XG5cbi8qKlxuICogV3JpdGVzIHRoZSBwcm92aWRlZCBgUGFja2FnZUpzb25gIG9iamVjdCB0byB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBpbiB0aGUgcm9vdC5cbiAqXG4gKiBAcGFyYW0gcGFja2FnZUpzb24gLSBUaGUgYFBhY2thZ2VKc29uYCBvYmplY3QgdG8gd3JpdGUuXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UuanNvbmAgaXMgbG9jYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUGFja2FnZUpzb25TeW5jKHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbiwgY3dkPzogc3RyaW5nKTogdm9pZCB7XG4gIHdyaXRlSnNvblN5bmMoZ2V0UGFja2FnZUpzb25QYXRoKGN3ZCksIHBhY2thZ2VKc29uKTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIHByb3ZpZGVkIGBQYWNrYWdlSnNvbmAgb2JqZWN0IHRvIHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgaW4gdGhlIHJvb3QuXG4gKlxuICogQHBhcmFtIHBhY2thZ2VMb2NrSnNvbiAtIFRoZSBgUGFja2FnZUxvY2tKc29uYCBvYmplY3QgdG8gd3JpdGUuXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UtbG9jay5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVBhY2thZ2VMb2NrSnNvbihwYWNrYWdlTG9ja0pzb246IFBhY2thZ2VMb2NrSnNvbiwgY3dkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHdyaXRlSnNvbihnZXRQYWNrYWdlTG9ja0pzb25QYXRoKGN3ZCksIHBhY2thZ2VMb2NrSnNvbik7XG59XG5cbi8qKlxuICogV3JpdGVzIHRoZSBwcm92aWRlZCBgUGFja2FnZUxvY2tKc29uYCBvYmplY3QgdG8gdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBpbiB0aGUgcm9vdC5cbiAqXG4gKiBAcGFyYW0gcGFja2FnZUxvY2tKc29uIC0gVGhlIGBQYWNrYWdlTG9ja0pzb25gIG9iamVjdCB0byB3cml0ZS5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS1sb2NrLmpzb25gIGlzIGxvY2F0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBhY2thZ2VMb2NrSnNvblN5bmMocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24sIGN3ZD86IHN0cmluZyk6IHZvaWQge1xuICB3cml0ZUpzb25TeW5jKGdldFBhY2thZ2VMb2NrSnNvblBhdGgoY3dkKSwgcGFja2FnZUxvY2tKc29uKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFBLDBCQUE0QztBQUM1Qyx3Q0FBd0M7QUFDeEMseUJBQWtDO0FBQ2xDLGtCQU9PO0FBQ1Asa0JBQW9DO0FBdUNwQyxlQUFzQixzQkFDcEIsUUFDQSxVQUFrQyxDQUFDLEdBQ3BCO0FBQ2YsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osWUFBTSxzQkFBc0IseUJBQXlCLEdBQUcsR0FBRyxZQUFRLGlEQUE2QyxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDMUk7QUFTQSxlQUFzQixnQkFDcEIsUUFDQSxVQUFrQyxDQUFDLEdBQ3BCO0FBQ2YsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osWUFBTSxzQkFBc0IsbUJBQW1CLEdBQUcsR0FBRyxZQUFRLGlEQUE2QyxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDcEk7QUFRTyxTQUFTLG9CQUNkLFFBQ0EsVUFBa0MsQ0FBQyxHQUM3QjtBQUNOLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLGdDQUEwQixtQkFBbUIsR0FBRyxHQUFHLFlBQVEsaURBQTZDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUNsSTtBQVNBLGVBQXNCLG9CQUNwQixRQUNBLFVBQWtDLENBQUMsR0FDcEI7QUFDZixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixZQUFNLHNCQUFzQix1QkFBdUIsR0FBRyxHQUFHLFlBQVEsaURBQTZDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUN4STtBQVFPLFNBQVMsd0JBQ2QsUUFDQSxVQUFrQyxDQUFDLEdBQzdCO0FBQ04sUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osZ0NBQThCLHVCQUF1QixHQUFHLEdBQUcsWUFBUSxpREFBNkMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQzFJO0FBUU8sU0FBUyx5QkFBeUIsS0FBc0I7QUFDN0QsYUFBTywwQ0FBa0IsaUNBQW9CLDBEQUF3QixtQkFBbUIsR0FBRyxHQUFHLGtEQUFrRDtBQUNsSjtBQVFPLFNBQVMsbUJBQW1CLEtBQXNCO0FBQ3ZELGFBQU8sMENBQWtCLGlDQUFvQiwwREFBd0IsYUFBYSxHQUFHLEdBQUcsMkNBQTJDO0FBQ3JJO0FBUU8sU0FBUyx1QkFBdUIsS0FBc0I7QUFDM0QsYUFBTywwQ0FBa0IsaUNBQW9CLDBEQUF3QixpQkFBaUIsR0FBRyxHQUFHLGdEQUFnRDtBQUM5STtBQVFBLGVBQXNCLGdCQUFnQixLQUFvQztBQUN4RSxTQUFPLFVBQU0sc0JBQXNCLG1CQUFtQixHQUFHLENBQUM7QUFDNUQ7QUFRTyxTQUFTLG9CQUFvQixLQUEyQjtBQUM3RCxhQUFPLDBCQUEwQixtQkFBbUIsR0FBRyxDQUFDO0FBQzFEO0FBUUEsZUFBc0Isb0JBQW9CLEtBQXdDO0FBQ2hGLFNBQU8sVUFBTSxzQkFBMEIsdUJBQXVCLEdBQUcsQ0FBQztBQUNwRTtBQVFPLFNBQVMsd0JBQXdCLEtBQStCO0FBQ3JFLGFBQU8sMEJBQThCLHVCQUF1QixHQUFHLENBQUM7QUFDbEU7QUFTQSxlQUFzQixpQkFBaUIsYUFBMEIsS0FBNkI7QUFDNUYsWUFBTSx1QkFBVSxtQkFBbUIsR0FBRyxHQUFHLFdBQVc7QUFDdEQ7QUFRTyxTQUFTLHFCQUFxQixhQUEwQixLQUFvQjtBQUNqRixpQ0FBYyxtQkFBbUIsR0FBRyxHQUFHLFdBQVc7QUFDcEQ7QUFTQSxlQUFzQixxQkFBcUIsaUJBQWtDLEtBQTZCO0FBQ3hHLFlBQU0sdUJBQVUsdUJBQXVCLEdBQUcsR0FBRyxlQUFlO0FBQzlEO0FBUU8sU0FBUyx5QkFBeUIsaUJBQWtDLEtBQW9CO0FBQzdGLGlDQUFjLHVCQUF1QixHQUFHLEdBQUcsZUFBZTtBQUM1RDsiLAogICJuYW1lcyI6IFtdCn0K
238
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9ucG0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgTlBNIHBhY2thZ2UuanNvbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBhY2thZ2VKc29uLFxuICBQcm9taXNhYmxlXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgRWRpdEpzb25PcHRpb25zIH0gZnJvbSAnLi9qc29uLnRzJztcblxuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHtcbiAgZWRpdEpzb24sXG4gIGVkaXRKc29uU3luYyxcbiAgcmVhZEpzb24sXG4gIHJlYWRKc29uU3luYyxcbiAgd3JpdGVKc29uLFxuICB3cml0ZUpzb25TeW5jXG59IGZyb20gJy4vanNvbi50cyc7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290IH0gZnJvbSAnLi9yb290LnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdE5wbVNocmlua1dyYXBKc29ufS5cbiAqL1xuZXhwb3J0IHR5cGUgRWRpdE5wbVNocmlua1dyYXBKc29uT3B0aW9ucyA9IEVkaXRQYWNrYWdlSnNvbk9wdGlvbnM7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGVkaXRQYWNrYWdlSnNvbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdFBhY2thZ2VKc29uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UuanNvbmAgaXMgbG9jYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBza2lwcyBlZGl0aW5nIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcElmTWlzc2luZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGVkaXRQYWNrYWdlSnNvblN5bmN9LlxuICovXG5leHBvcnQgdHlwZSBFZGl0UGFja2FnZUpzb25TeW5jT3B0aW9ucyA9IEVkaXRQYWNrYWdlSnNvbk9wdGlvbnM7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGVkaXRQYWNrYWdlTG9ja0pzb259LlxuICovXG5leHBvcnQgdHlwZSBFZGl0UGFja2FnZUxvY2tKc29uT3B0aW9ucyA9IEVkaXRQYWNrYWdlSnNvbk9wdGlvbnM7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGVkaXRQYWNrYWdlTG9ja0pzb25TeW5jfS5cbiAqL1xuZXhwb3J0IHR5cGUgRWRpdFBhY2thZ2VMb2NrSnNvblN5bmNPcHRpb25zID0gRWRpdFBhY2thZ2VKc29uT3B0aW9ucztcblxuLyoqXG4gKiBBIHR5cGUgb2YgdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfTtcblxuLyoqXG4gKiBBIHR5cGUgb2YgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlTG9ja0pzb24gZXh0ZW5kcyBQYXJ0aWFsPFBhY2thZ2VKc29uPiB7XG4gIC8qKlxuICAgKiBQYWNrYWdlcyBpbiB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlLlxuICAgKi9cbiAgcGFja2FnZXM/OiBSZWNvcmQ8c3RyaW5nLCBQYWNrYWdlSnNvbj47XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBlZGl0aW5nLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIGVkaXRlZCBhbmQgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXROcG1TaHJpbmtXcmFwSnNvbihcbiAgZWRpdEZuOiAocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24pID0+IFByb21pc2FibGU8dm9pZD4sXG4gIG9wdGlvbnM6IEVkaXROcG1TaHJpbmtXcmFwSnNvbk9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBjd2QsXG4gICAgc2hvdWxkU2tpcElmTWlzc2luZ1xuICB9ID0gb3B0aW9ucztcbiAgYXdhaXQgZWRpdEpzb248UGFja2FnZUpzb24+KGdldE5wbVNocmlua1dyYXBKc29uUGF0aChjd2QpLCBlZGl0Rm4sIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFZGl0SnNvbk9wdGlvbnM+KHsgc2hvdWxkU2tpcElmTWlzc2luZyB9KSk7XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgdXNpbmcgdGhlIHByb3ZpZGVkIGVkaXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGVkaXRGbiAtIFRoZSBmdW5jdGlvbiB0byBlZGl0IHRoZSBwYXJzZWQgYFBhY2thZ2VKc29uYCBvYmplY3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgZWRpdGluZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBoYXMgYmVlbiBlZGl0ZWQgYW5kIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0UGFja2FnZUpzb24oXG4gIGVkaXRGbjogKHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbikgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgb3B0aW9uczogRWRpdFBhY2thZ2VKc29uT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGN3ZCxcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBhd2FpdCBlZGl0SnNvbjxQYWNrYWdlSnNvbj4oZ2V0UGFja2FnZUpzb25QYXRoKGN3ZCksIGVkaXRGbiwgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEVkaXRKc29uT3B0aW9ucz4oeyBzaG91bGRTa2lwSWZNaXNzaW5nIH0pKTtcbn1cblxuLyoqXG4gKiBSZWFkcywgZWRpdHMsIGFuZCB3cml0ZXMgYmFjayB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBlZGl0aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWRpdFBhY2thZ2VKc29uU3luYyhcbiAgZWRpdEZuOiAocGFja2FnZUpzb246IFBhY2thZ2VKc29uKSA9PiB2b2lkLFxuICBvcHRpb25zOiBFZGl0UGFja2FnZUpzb25TeW5jT3B0aW9ucyA9IHt9XG4pOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGN3ZCxcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBlZGl0SnNvblN5bmM8UGFja2FnZUpzb24+KGdldFBhY2thZ2VKc29uUGF0aChjd2QpLCBlZGl0Rm4sIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFZGl0SnNvbk9wdGlvbnM+KHsgc2hvdWxkU2tpcElmTWlzc2luZyB9KSk7XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBlZGl0aW5nLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIGVkaXRlZCBhbmQgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRQYWNrYWdlTG9ja0pzb24oXG4gIGVkaXRGbjogKHBhY2thZ2VMb2NrSnNvbjogUGFja2FnZUxvY2tKc29uKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICBvcHRpb25zOiBFZGl0UGFja2FnZUxvY2tKc29uT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGN3ZCxcbiAgICBzaG91bGRTa2lwSWZNaXNzaW5nXG4gIH0gPSBvcHRpb25zO1xuICBhd2FpdCBlZGl0SnNvbjxQYWNrYWdlSnNvbj4oZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2QpLCBlZGl0Rm4sIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFZGl0SnNvbk9wdGlvbnM+KHsgc2hvdWxkU2tpcElmTWlzc2luZyB9KSk7XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSB1c2luZyB0aGUgcHJvdmlkZWQgZWRpdCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZWRpdEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGVkaXQgdGhlIHBhcnNlZCBgUGFja2FnZUxvY2tKc29uYCBvYmplY3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgZWRpdGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVkaXRQYWNrYWdlTG9ja0pzb25TeW5jKFxuICBlZGl0Rm46IChwYWNrYWdlTG9ja0pzb246IFBhY2thZ2VMb2NrSnNvbikgPT4gdm9pZCxcbiAgb3B0aW9uczogRWRpdFBhY2thZ2VMb2NrSnNvblN5bmNPcHRpb25zID0ge31cbik6IHZvaWQge1xuICBjb25zdCB7XG4gICAgY3dkLFxuICAgIHNob3VsZFNraXBJZk1pc3NpbmdcbiAgfSA9IG9wdGlvbnM7XG4gIGVkaXRKc29uU3luYzxQYWNrYWdlTG9ja0pzb24+KGdldFBhY2thZ2VMb2NrSnNvblBhdGgoY3dkKSwgZWRpdEZuLCBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8RWRpdEpzb25PcHRpb25zPih7IHNob3VsZFNraXBJZk1pc3NpbmcgfSkpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBwYXRoIHRvIHRoZSBgbnBtLXNocmlua3dyYXAuanNvbmAgZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBpbiB0aGUgcm9vdCBpZiBubyBmb2xkZXIgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgbnBtLXNocmlua3dyYXAuanNvbmAgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoIHRvIHRoZSBgbnBtLXNocmlua3dyYXAuanNvbmAgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5wbVNocmlua1dyYXBKc29uUGF0aChjd2Q/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUocmVzb2x2ZVBhdGhGcm9tUm9vdChPYnNpZGlhblBsdWdpblJlcG9QYXRocy5OcG1TaHJpbmt3cmFwSnNvbiwgY3dkKSwgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG5wbS1zaHJpbmt3cmFwLmpzb24gcGF0aCcpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBwYXRoIHRvIHRoZSBgcGFja2FnZS5qc29uYCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGluIHRoZSByb290IGlmIG5vIGZvbGRlciBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcGF0aCB0byB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2thZ2VKc29uUGF0aChjd2Q/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUocmVzb2x2ZVBhdGhGcm9tUm9vdChPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QYWNrYWdlSnNvbiwgY3dkKSwgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHBhY2thZ2UuanNvbiBwYXRoJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHBhdGggdG8gdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBpbiB0aGUgcm9vdCBpZiBubyBmb2xkZXIgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS1sb2NrLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcGF0aCB0byB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2Q/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUocmVzb2x2ZVBhdGhGcm9tUm9vdChPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QYWNrYWdlTG9ja0pzb24sIGN3ZCksICdDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBwYWNrYWdlLWxvY2suanNvbiBwYXRoJyk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgZnJvbSB0aGUgc3BlY2lmaWVkIGZvbGRlciBvciBmcm9tIHRoZSByb290IGlmIG5vIGZvbGRlciBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLmpzb25gIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRQYWNrYWdlSnNvbihjd2Q/OiBzdHJpbmcpOiBQcm9taXNlPFBhY2thZ2VKc29uPiB7XG4gIHJldHVybiBhd2FpdCByZWFkSnNvbjxQYWNrYWdlSnNvbj4oZ2V0UGFja2FnZUpzb25QYXRoKGN3ZCkpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBgcGFja2FnZS5qc29uYCBmaWxlIGZyb20gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgZnJvbSB0aGUgcm9vdCBpZiBubyBmb2xkZXIgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBgUGFja2FnZUpzb25gIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRQYWNrYWdlSnNvblN5bmMoY3dkPzogc3RyaW5nKTogUGFja2FnZUpzb24ge1xuICByZXR1cm4gcmVhZEpzb25TeW5jPFBhY2thZ2VKc29uPihnZXRQYWNrYWdlSnNvblBhdGgoY3dkKSk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSBmcm9tIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGZyb20gdGhlIHJvb3QgaWYgbm8gZm9sZGVyIGlzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UtbG9jay5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBwYXJzZWQgYFBhY2thZ2VKc29uYCBvYmplY3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUGFja2FnZUxvY2tKc29uKGN3ZD86IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUxvY2tKc29uPiB7XG4gIHJldHVybiBhd2FpdCByZWFkSnNvbjxQYWNrYWdlTG9ja0pzb24+KGdldFBhY2thZ2VMb2NrSnNvblBhdGgoY3dkKSk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgZmlsZSBmcm9tIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGZyb20gdGhlIHJvb3QgaWYgbm8gZm9sZGVyIGlzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UtbG9jay5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBgUGFja2FnZUxvY2tKc29uYCBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkUGFja2FnZUxvY2tKc29uU3luYyhjd2Q/OiBzdHJpbmcpOiBQYWNrYWdlTG9ja0pzb24ge1xuICByZXR1cm4gcmVhZEpzb25TeW5jPFBhY2thZ2VMb2NrSnNvbj4oZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2QpKTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIHByb3ZpZGVkIGBQYWNrYWdlSnNvbmAgb2JqZWN0IHRvIHRoZSBgcGFja2FnZS5qc29uYCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGluIHRoZSByb290LlxuICpcbiAqIEBwYXJhbSBwYWNrYWdlSnNvbiAtIFRoZSBgUGFja2FnZUpzb25gIG9iamVjdCB0byB3cml0ZS5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB3aGVyZSBgcGFja2FnZS5qc29uYCBpcyBsb2NhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVBhY2thZ2VKc29uKHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbiwgY3dkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHdyaXRlSnNvbihnZXRQYWNrYWdlSnNvblBhdGgoY3dkKSwgcGFja2FnZUpzb24pO1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUgcHJvdmlkZWQgYFBhY2thZ2VKc29uYCBvYmplY3QgdG8gdGhlIGBwYWNrYWdlLmpzb25gIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgaW4gdGhlIHJvb3QuXG4gKlxuICogQHBhcmFtIHBhY2thZ2VKc29uIC0gVGhlIGBQYWNrYWdlSnNvbmAgb2JqZWN0IHRvIHdyaXRlLlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLmpzb25gIGlzIGxvY2F0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBhY2thZ2VKc29uU3luYyhwYWNrYWdlSnNvbjogUGFja2FnZUpzb24sIGN3ZD86IHN0cmluZyk6IHZvaWQge1xuICB3cml0ZUpzb25TeW5jKGdldFBhY2thZ2VKc29uUGF0aChjd2QpLCBwYWNrYWdlSnNvbik7XG59XG5cbi8qKlxuICogV3JpdGVzIHRoZSBwcm92aWRlZCBgUGFja2FnZUpzb25gIG9iamVjdCB0byB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9yIGluIHRoZSByb290LlxuICpcbiAqIEBwYXJhbSBwYWNrYWdlTG9ja0pzb24gLSBUaGUgYFBhY2thZ2VMb2NrSnNvbmAgb2JqZWN0IHRvIHdyaXRlLlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHdoZXJlIGBwYWNrYWdlLWxvY2suanNvbmAgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBoYXMgYmVlbiB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVQYWNrYWdlTG9ja0pzb24ocGFja2FnZUxvY2tKc29uOiBQYWNrYWdlTG9ja0pzb24sIGN3ZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCB3cml0ZUpzb24oZ2V0UGFja2FnZUxvY2tKc29uUGF0aChjd2QpLCBwYWNrYWdlTG9ja0pzb24pO1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUgcHJvdmlkZWQgYFBhY2thZ2VMb2NrSnNvbmAgb2JqZWN0IHRvIHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIgb3IgaW4gdGhlIHJvb3QuXG4gKlxuICogQHBhcmFtIHBhY2thZ2VMb2NrSnNvbiAtIFRoZSBgUGFja2FnZUxvY2tKc29uYCBvYmplY3QgdG8gd3JpdGUuXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgd2hlcmUgYHBhY2thZ2UtbG9jay5qc29uYCBpcyBsb2NhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVQYWNrYWdlTG9ja0pzb25TeW5jKHBhY2thZ2VMb2NrSnNvbjogUGFja2FnZUxvY2tKc29uLCBjd2Q/OiBzdHJpbmcpOiB2b2lkIHtcbiAgd3JpdGVKc29uU3luYyhnZXRQYWNrYWdlTG9ja0pzb25QYXRoKGN3ZCksIHBhY2thZ2VMb2NrSnNvbik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFhQSwwQkFBNEM7QUFDNUMsd0NBQXdDO0FBQ3hDLHlCQUFrQztBQUNsQyxrQkFPTztBQUNQLGtCQUFvQztBQTJEcEMsZUFBc0Isc0JBQ3BCLFFBQ0EsVUFBd0MsQ0FBQyxHQUMxQjtBQUNmLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLFlBQU0sc0JBQXNCLHlCQUF5QixHQUFHLEdBQUcsWUFBUSxpREFBNkMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQzFJO0FBU0EsZUFBc0IsZ0JBQ3BCLFFBQ0EsVUFBa0MsQ0FBQyxHQUNwQjtBQUNmLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLFlBQU0sc0JBQXNCLG1CQUFtQixHQUFHLEdBQUcsWUFBUSxpREFBNkMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3BJO0FBUU8sU0FBUyxvQkFDZCxRQUNBLFVBQXNDLENBQUMsR0FDakM7QUFDTixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixnQ0FBMEIsbUJBQW1CLEdBQUcsR0FBRyxZQUFRLGlEQUE2QyxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDbEk7QUFTQSxlQUFzQixvQkFDcEIsUUFDQSxVQUFzQyxDQUFDLEdBQ3hCO0FBQ2YsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osWUFBTSxzQkFBc0IsdUJBQXVCLEdBQUcsR0FBRyxZQUFRLGlEQUE2QyxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDeEk7QUFRTyxTQUFTLHdCQUNkLFFBQ0EsVUFBMEMsQ0FBQyxHQUNyQztBQUNOLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLGdDQUE4Qix1QkFBdUIsR0FBRyxHQUFHLFlBQVEsaURBQTZDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUMxSTtBQVFPLFNBQVMseUJBQXlCLEtBQXNCO0FBQzdELGFBQU8sMENBQWtCLGlDQUFvQiwwREFBd0IsbUJBQW1CLEdBQUcsR0FBRyxrREFBa0Q7QUFDbEo7QUFRTyxTQUFTLG1CQUFtQixLQUFzQjtBQUN2RCxhQUFPLDBDQUFrQixpQ0FBb0IsMERBQXdCLGFBQWEsR0FBRyxHQUFHLDJDQUEyQztBQUNySTtBQVFPLFNBQVMsdUJBQXVCLEtBQXNCO0FBQzNELGFBQU8sMENBQWtCLGlDQUFvQiwwREFBd0IsaUJBQWlCLEdBQUcsR0FBRyxnREFBZ0Q7QUFDOUk7QUFRQSxlQUFzQixnQkFBZ0IsS0FBb0M7QUFDeEUsU0FBTyxVQUFNLHNCQUFzQixtQkFBbUIsR0FBRyxDQUFDO0FBQzVEO0FBUU8sU0FBUyxvQkFBb0IsS0FBMkI7QUFDN0QsYUFBTywwQkFBMEIsbUJBQW1CLEdBQUcsQ0FBQztBQUMxRDtBQVFBLGVBQXNCLG9CQUFvQixLQUF3QztBQUNoRixTQUFPLFVBQU0sc0JBQTBCLHVCQUF1QixHQUFHLENBQUM7QUFDcEU7QUFRTyxTQUFTLHdCQUF3QixLQUErQjtBQUNyRSxhQUFPLDBCQUE4Qix1QkFBdUIsR0FBRyxDQUFDO0FBQ2xFO0FBU0EsZUFBc0IsaUJBQWlCLGFBQTBCLEtBQTZCO0FBQzVGLFlBQU0sdUJBQVUsbUJBQW1CLEdBQUcsR0FBRyxXQUFXO0FBQ3REO0FBUU8sU0FBUyxxQkFBcUIsYUFBMEIsS0FBb0I7QUFDakYsaUNBQWMsbUJBQW1CLEdBQUcsR0FBRyxXQUFXO0FBQ3BEO0FBU0EsZUFBc0IscUJBQXFCLGlCQUFrQyxLQUE2QjtBQUN4RyxZQUFNLHVCQUFVLHVCQUF1QixHQUFHLEdBQUcsZUFBZTtBQUM5RDtBQVFPLFNBQVMseUJBQXlCLGlCQUFrQyxLQUFvQjtBQUM3RixpQ0FBYyx1QkFBdUIsR0FBRyxHQUFHLGVBQWU7QUFDNUQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -5,6 +5,10 @@
5
5
  * Contains utility functions for NPM package.json.
6
6
  */
7
7
  import type { PackageJson, Promisable } from 'type-fest';
8
+ /**
9
+ * Options for {@link editNpmShrinkWrapJson}.
10
+ */
11
+ export type EditNpmShrinkWrapJsonOptions = EditPackageJsonOptions;
8
12
  /**
9
13
  * Options for {@link editPackageJson}.
10
14
  */
@@ -18,6 +22,18 @@ export interface EditPackageJsonOptions {
18
22
  */
19
23
  readonly shouldSkipIfMissing?: boolean;
20
24
  }
25
+ /**
26
+ * Options for {@link editPackageJsonSync}.
27
+ */
28
+ export type EditPackageJsonSyncOptions = EditPackageJsonOptions;
29
+ /**
30
+ * Options for {@link editPackageLockJson}.
31
+ */
32
+ export type EditPackageLockJsonOptions = EditPackageJsonOptions;
33
+ /**
34
+ * Options for {@link editPackageLockJsonSync}.
35
+ */
36
+ export type EditPackageLockJsonSyncOptions = EditPackageJsonOptions;
21
37
  /**
22
38
  * A type of the `package.json` file.
23
39
  */
@@ -38,7 +54,7 @@ export interface PackageLockJson extends Partial<PackageJson> {
38
54
  * @param options - Additional options for editing.
39
55
  * @returns A {@link Promise} that resolves when the file has been edited and written.
40
56
  */
41
- export declare function editNpmShrinkWrapJson(editFn: (packageLockJson: PackageLockJson) => Promisable<void>, options?: EditPackageJsonOptions): Promise<void>;
57
+ export declare function editNpmShrinkWrapJson(editFn: (packageLockJson: PackageLockJson) => Promisable<void>, options?: EditNpmShrinkWrapJsonOptions): Promise<void>;
42
58
  /**
43
59
  * Reads, edits, and writes back the `package.json` file using the provided edit function.
44
60
  *
@@ -53,7 +69,7 @@ export declare function editPackageJson(editFn: (packageJson: PackageJson) => Pr
53
69
  * @param editFn - The function to edit the parsed `PackageJson` object.
54
70
  * @param options - Additional options for editing.
55
71
  */
56
- export declare function editPackageJsonSync(editFn: (packageJson: PackageJson) => void, options?: EditPackageJsonOptions): void;
72
+ export declare function editPackageJsonSync(editFn: (packageJson: PackageJson) => void, options?: EditPackageJsonSyncOptions): void;
57
73
  /**
58
74
  * Reads, edits, and writes back the `package-lock.json` file using the provided edit function.
59
75
  *
@@ -61,14 +77,14 @@ export declare function editPackageJsonSync(editFn: (packageJson: PackageJson) =
61
77
  * @param options - Additional options for editing.
62
78
  * @returns A {@link Promise} that resolves when the file has been edited and written.
63
79
  */
64
- export declare function editPackageLockJson(editFn: (packageLockJson: PackageLockJson) => Promisable<void>, options?: EditPackageJsonOptions): Promise<void>;
80
+ export declare function editPackageLockJson(editFn: (packageLockJson: PackageLockJson) => Promisable<void>, options?: EditPackageLockJsonOptions): Promise<void>;
65
81
  /**
66
82
  * Reads, edits, and writes back the `package-lock.json` file using the provided edit function.
67
83
  *
68
84
  * @param editFn - The function to edit the parsed `PackageLockJson` object.
69
85
  * @param options - Additional options for editing.
70
86
  */
71
- export declare function editPackageLockJsonSync(editFn: (packageLockJson: PackageLockJson) => void, options?: EditPackageJsonOptions): void;
87
+ export declare function editPackageLockJsonSync(editFn: (packageLockJson: PackageLockJson) => void, options?: EditPackageLockJsonSyncOptions): void;
72
88
  /**
73
89
  * Resolves the path to the `npm-shrinkwrap.json` file in the specified folder or in the root if no folder is specified.
74
90
  *
@@ -185,4 +185,4 @@ function toRelativeFromRoot(path, cwd) {
185
185
  resolvePathFromRootSafe,
186
186
  toRelativeFromRoot
187
187
  });
188
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9yb290LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBjb21tYW5kcyBmcm9tIHRoZSByb290IGZvbGRlciBvZiBhIHByb2plY3QsXG4gKiByZXNvbHZpbmcgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmRQYXJ0LFxuICBFeGVjRGV0YWlsZWRPcHRpb25zLFxuICBFeGVjT3B0aW9ucyxcbiAgRXhlY1Jlc3VsdCxcbiAgRXhlY1NpbXBsZU9wdGlvbnNcbn0gZnJvbSAnLi9leGVjLnRzJztcblxuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmUsXG4gIHRvUG9zaXhQYXRoXG59IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJy4vZXhlYy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyc7XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kIGZyb20gdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWNGcm9tUm9vdChjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zPzogRXhlY1NpbXBsZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZCBmcm9tIHRoZSByb290IGZvbGRlciBvZiB0aGUgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBFeGVjUmVzdWx0IG9iamVjdC5cbiAqICAgICAgICAgIFRoZSBFeGVjUmVzdWx0IG9iamVjdCBjb250YWlucyB0aGUgZXhpdCBjb2RlLCBleGl0IHNpZ25hbCwgc3RkZXJyLCBhbmQgc3Rkb3V0LlxuICogQHRocm93cyBJZiB0aGUgY29tbWFuZCBmYWlscyB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgZmFsc2VgLlxuICogICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyB0aGUgZXhpdCBjb2RlIGFuZCBzdGRlcnIuXG4gKiAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgaWdub3JlRXhpdENvZGUgaXMgYHRydWVgLFxuICogICAgICAgICB0aGUgZXJyb3IgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjRnJvbVJvb3QoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9uczogRXhlY0RldGFpbGVkT3B0aW9ucyk6IFByb21pc2U8RXhlY1Jlc3VsdD47XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZCBmcm9tIHRoZSByb290IGZvbGRlciBvZiB0aGUgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIG9yIGFuIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNGcm9tUm9vdChjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zOiBFeGVjT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB7XG4gIGxldCByb290ID0gZ2V0Um9vdEZvbGRlcihvcHRpb25zLmN3ZCk7XG5cbiAgaWYgKCFyb290KSB7XG4gICAgaWYgKG9wdGlvbnMuc2hvdWxkRmFpbElmQ2FsbGVkRnJvbU91dHNpZGVSb290ID8/IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgcm9vdCBmb2xkZXInKTtcbiAgICB9XG5cbiAgICByb290ID0gb3B0aW9ucy5jd2QgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNob3VsZEluY2x1ZGVEZXRhaWxzKSB7XG4gICAgcmV0dXJuIGV4ZWMoY29tbWFuZCwgeyAuLi5vcHRpb25zLCBjd2Q6IHJvb3QsIHNob3VsZEluY2x1ZGVEZXRhaWxzOiB0cnVlIH0pO1xuICB9XG5cbiAgcmV0dXJuIGV4ZWMoY29tbWFuZCwgeyAuLi5vcHRpb25zLCBjd2Q6IHJvb3QsIHNob3VsZEluY2x1ZGVEZXRhaWxzOiBmYWxzZSB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGUgcm9vdCBmb2xkZXIuXG4gKiBAdGhyb3dzIElmIHRoZSByb290IGZvbGRlciBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290Rm9sZGVyKGN3ZD86IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBsZXQgY3VycmVudEZvbGRlciA9IHRvUG9zaXhQYXRoKGN3ZCA/PyBwcm9jZXNzLmN3ZCgpKTtcbiAgd2hpbGUgKGN1cnJlbnRGb2xkZXIgIT09IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuQ3VycmVudEZvbGRlciBhcyBzdHJpbmcgJiYgY3VycmVudEZvbGRlciAhPT0gT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Sb290Rm9sZGVyIGFzIHN0cmluZykge1xuICAgIGlmIChleGlzdHNTeW5jKGpvaW4oY3VycmVudEZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5QYWNrYWdlSnNvbikpKSB7XG4gICAgICByZXR1cm4gdG9Qb3NpeFBhdGgoY3VycmVudEZvbGRlcik7XG4gICAgfVxuICAgIGN1cnJlbnRGb2xkZXIgPSBkaXJuYW1lKGN1cnJlbnRGb2xkZXIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlciBvZiB0aGUgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGFic29sdXRlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aEZyb21Sb290KHBhdGg6IHN0cmluZywgY3dkPzogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKGN3ZCk7XG4gIGlmICghcm9vdEZvbGRlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmUocm9vdEZvbGRlciwgcGF0aCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlciwgcmV0dXJuaW5nIHRoZSByZXNvbHZlZCBwYXRoIG9yIHRoZSBvcmlnaW5hbCBwYXRoIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gcmVzb2x2ZS5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcGF0aCBvciB0aGUgb3JpZ2luYWwgcGF0aCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHBhdGg6IHN0cmluZywgY3dkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmVQYXRoRnJvbVJvb3QocGF0aCwgY3dkKSA/PyBwYXRoO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFic29sdXRlIHBhdGggdG8gYSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gY29udmVydC5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSByb290IGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUmVsYXRpdmVGcm9tUm9vdChwYXRoOiBzdHJpbmcsIGN3ZD86IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcihjd2QpO1xuICBpZiAoIXJvb3RGb2xkZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHBhdGggPSB0b1Bvc2l4UGF0aChwYXRoKTtcbiAgcmV0dXJuIHJlbGF0aXZlKHJvb3RGb2xkZXIsIHBhdGgpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQSxxQkFBMkI7QUFVM0Isa0JBTU87QUFDUCxrQkFBcUI7QUFDckIsMkNBQTBDO0FBdUNuQyxTQUFTLGFBQWEsU0FBaUMsVUFBdUIsQ0FBQyxHQUFpQztBQUNySCxNQUFJLE9BQU8sY0FBYyxRQUFRLEdBQUc7QUFFcEMsTUFBSSxDQUFDLE1BQU07QUFDVCxRQUFJLFFBQVEscUNBQXFDLE1BQU07QUFDckQsWUFBTSxJQUFJLE1BQU0sNEJBQTRCO0FBQUEsSUFDOUM7QUFFQSxXQUFPLFFBQVEsT0FBTyxRQUFRLElBQUk7QUFBQSxFQUNwQztBQUVBLE1BQUksUUFBUSxzQkFBc0I7QUFDaEMsZUFBTyxrQkFBSyxTQUFTLEVBQUUsR0FBRyxTQUFTLEtBQUssTUFBTSxzQkFBc0IsS0FBSyxDQUFDO0FBQUEsRUFDNUU7QUFFQSxhQUFPLGtCQUFLLFNBQVMsRUFBRSxHQUFHLFNBQVMsS0FBSyxNQUFNLHNCQUFzQixNQUFNLENBQUM7QUFDN0U7QUFTTyxTQUFTLGNBQWMsS0FBNkI7QUFDekQsTUFBSSxvQkFBZ0IseUJBQVksT0FBTyxRQUFRLElBQUksQ0FBQztBQUNwRCxTQUFPLGtCQUFrQiwrREFBMEIsaUJBQTJCLGtCQUFrQiwrREFBMEIsWUFBc0I7QUFDOUksWUFBSSwrQkFBVyxrQkFBSyxlQUFlLCtEQUEwQixXQUFXLENBQUMsR0FBRztBQUMxRSxpQkFBTyx5QkFBWSxhQUFhO0FBQUEsSUFDbEM7QUFDQSx3QkFBZ0IscUJBQVEsYUFBYTtBQUFBLEVBQ3ZDO0FBRUEsU0FBTztBQUNUO0FBU08sU0FBUyxvQkFBb0IsTUFBYyxLQUE2QjtBQUM3RSxRQUFNLGFBQWEsY0FBYyxHQUFHO0FBQ3BDLE1BQUksQ0FBQyxZQUFZO0FBQ2YsV0FBTztBQUFBLEVBQ1Q7QUFFQSxhQUFPLHFCQUFRLFlBQVksSUFBSTtBQUNqQztBQVNPLFNBQVMsd0JBQXdCLE1BQWMsS0FBc0I7QUFDMUUsU0FBTyxvQkFBb0IsTUFBTSxHQUFHLEtBQUs7QUFDM0M7QUFTTyxTQUFTLG1CQUFtQixNQUFjLEtBQTZCO0FBQzVFLFFBQU0sYUFBYSxjQUFjLEdBQUc7QUFDcEMsTUFBSSxDQUFDLFlBQVk7QUFDZixXQUFPO0FBQUEsRUFDVDtBQUVBLGFBQU8seUJBQVksSUFBSTtBQUN2QixhQUFPLHNCQUFTLFlBQVksSUFBSTtBQUNsQzsiLAogICJuYW1lcyI6IFtdCn0K
188
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9yb290LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBjb21tYW5kcyBmcm9tIHRoZSByb290IGZvbGRlciBvZiBhIHByb2plY3QsXG4gKiByZXNvbHZpbmcgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmRQYXJ0LFxuICBFeGVjRGV0YWlsZWRPcHRpb25zLFxuICBFeGVjT3B0aW9ucyxcbiAgRXhlY1Jlc3VsdCxcbiAgRXhlY1NpbXBsZU9wdGlvbnNcbn0gZnJvbSAnLi9leGVjLnRzJztcblxuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmUsXG4gIHRvUG9zaXhQYXRoXG59IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJy4vZXhlYy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGV4ZWNGcm9tUm9vdH0uXG4gKi9cbmV4cG9ydCB0eXBlIEV4ZWNGcm9tUm9vdE9wdGlvbnMgPSBFeGVjT3B0aW9ucztcblxuLyoqXG4gKiBFeGVjdXRlcyBhIGNvbW1hbmQgZnJvbSB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlIHByb2plY3QuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBleGVjdXRlLiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBleGVjdXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZC5cbiAqIEB0aHJvd3MgSWYgdGhlIGNvbW1hbmQgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSBhbmQgaWdub3JlRXhpdENvZGUgaXMgYGZhbHNlYC5cbiAqICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4aXQgY29kZSBhbmQgc3RkZXJyLlxuICogICAgICAgICBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBleGVjdXRpb24gYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGB0cnVlYCxcbiAqICAgICAgICAgdGhlIGVycm9yIGlzIHJlc29sdmVkIHdpdGggdGhlIHN0ZG91dCBhbmQgc3RkZXJyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY0Zyb21Sb290KGNvbW1hbmQ6IENvbW1hbmRQYXJ0W10gfCBzdHJpbmcsIG9wdGlvbnM/OiBFeGVjU2ltcGxlT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kIGZyb20gdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNGcm9tUm9vdChjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zOiBFeGVjRGV0YWlsZWRPcHRpb25zKTogUHJvbWlzZTxFeGVjUmVzdWx0Pjtcbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kIGZyb20gdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgb3IgYW4gRXhlY1Jlc3VsdCBvYmplY3QuXG4gKiAgICAgICAgICBUaGUgRXhlY1Jlc3VsdCBvYmplY3QgY29udGFpbnMgdGhlIGV4aXQgY29kZSwgZXhpdCBzaWduYWwsIHN0ZGVyciwgYW5kIHN0ZG91dC5cbiAqIEB0aHJvd3MgSWYgdGhlIGNvbW1hbmQgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSBhbmQgaWdub3JlRXhpdENvZGUgaXMgYGZhbHNlYC5cbiAqICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4aXQgY29kZSBhbmQgc3RkZXJyLlxuICogICAgICAgICBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBleGVjdXRpb24gYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGB0cnVlYCxcbiAqICAgICAgICAgdGhlIGVycm9yIGlzIHJlc29sdmVkIHdpdGggdGhlIHN0ZG91dCBhbmQgc3RkZXJyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY0Zyb21Sb290KGNvbW1hbmQ6IENvbW1hbmRQYXJ0W10gfCBzdHJpbmcsIG9wdGlvbnM6IEV4ZWNGcm9tUm9vdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBsZXQgcm9vdCA9IGdldFJvb3RGb2xkZXIob3B0aW9ucy5jd2QpO1xuXG4gIGlmICghcm9vdCkge1xuICAgIGlmIChvcHRpb25zLnNob3VsZEZhaWxJZkNhbGxlZEZyb21PdXRzaWRlUm9vdCA/PyB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHJvb3QgZm9sZGVyJyk7XG4gICAgfVxuXG4gICAgcm9vdCA9IG9wdGlvbnMuY3dkID8/IHByb2Nlc3MuY3dkKCk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5zaG91bGRJbmNsdWRlRGV0YWlscykge1xuICAgIHJldHVybiBleGVjKGNvbW1hbmQsIHsgLi4ub3B0aW9ucywgY3dkOiByb290LCBzaG91bGRJbmNsdWRlRGV0YWlsczogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJldHVybiBleGVjKGNvbW1hbmQsIHsgLi4ub3B0aW9ucywgY3dkOiByb290LCBzaG91bGRJbmNsdWRlRGV0YWlsczogZmFsc2UgfSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSByb290IGZvbGRlciBvZiB0aGUgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIHBhdGggdG8gdGhlIHJvb3QgZm9sZGVyLlxuICogQHRocm93cyBJZiB0aGUgcm9vdCBmb2xkZXIgY2Fubm90IGJlIGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vdEZvbGRlcihjd2Q/OiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgbGV0IGN1cnJlbnRGb2xkZXIgPSB0b1Bvc2l4UGF0aChjd2QgPz8gcHJvY2Vzcy5jd2QoKSk7XG4gIHdoaWxlIChjdXJyZW50Rm9sZGVyICE9PSBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIgYXMgc3RyaW5nICYmIGN1cnJlbnRGb2xkZXIgIT09IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUm9vdEZvbGRlciBhcyBzdHJpbmcpIHtcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKGN1cnJlbnRGb2xkZXIsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUGFja2FnZUpzb24pKSkge1xuICAgICAgcmV0dXJuIHRvUG9zaXhQYXRoKGN1cnJlbnRGb2xkZXIpO1xuICAgIH1cbiAgICBjdXJyZW50Rm9sZGVyID0gZGlybmFtZShjdXJyZW50Rm9sZGVyKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlIHByb2plY3QuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byByZXNvbHZlLlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBhYnNvbHV0ZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhdGhGcm9tUm9vdChwYXRoOiBzdHJpbmcsIGN3ZD86IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcihjd2QpO1xuICBpZiAoIXJvb3RGb2xkZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlKHJvb3RGb2xkZXIsIHBhdGgpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIsIHJldHVybmluZyB0aGUgcmVzb2x2ZWQgcGF0aCBvciB0aGUgb3JpZ2luYWwgcGF0aCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHBhdGggb3IgdGhlIG9yaWdpbmFsIHBhdGggaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aEZyb21Sb290U2FmZShwYXRoOiBzdHJpbmcsIGN3ZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXNvbHZlUGF0aEZyb21Sb290KHBhdGgsIGN3ZCkgPz8gcGF0aDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhYnNvbHV0ZSBwYXRoIHRvIGEgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSByb290IGZvbGRlciBvZiB0aGUgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgcm9vdCBmb2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1JlbGF0aXZlRnJvbVJvb3QocGF0aDogc3RyaW5nLCBjd2Q/OiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3Qgcm9vdEZvbGRlciA9IGdldFJvb3RGb2xkZXIoY3dkKTtcbiAgaWYgKCFyb290Rm9sZGVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwYXRoID0gdG9Qb3NpeFBhdGgocGF0aCk7XG4gIHJldHVybiByZWxhdGl2ZShyb290Rm9sZGVyLCBwYXRoKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0EscUJBQTJCO0FBVTNCLGtCQU1PO0FBQ1Asa0JBQXFCO0FBQ3JCLDJDQUEwQztBQTRDbkMsU0FBUyxhQUFhLFNBQWlDLFVBQStCLENBQUMsR0FBaUM7QUFDN0gsTUFBSSxPQUFPLGNBQWMsUUFBUSxHQUFHO0FBRXBDLE1BQUksQ0FBQyxNQUFNO0FBQ1QsUUFBSSxRQUFRLHFDQUFxQyxNQUFNO0FBQ3JELFlBQU0sSUFBSSxNQUFNLDRCQUE0QjtBQUFBLElBQzlDO0FBRUEsV0FBTyxRQUFRLE9BQU8sUUFBUSxJQUFJO0FBQUEsRUFDcEM7QUFFQSxNQUFJLFFBQVEsc0JBQXNCO0FBQ2hDLGVBQU8sa0JBQUssU0FBUyxFQUFFLEdBQUcsU0FBUyxLQUFLLE1BQU0sc0JBQXNCLEtBQUssQ0FBQztBQUFBLEVBQzVFO0FBRUEsYUFBTyxrQkFBSyxTQUFTLEVBQUUsR0FBRyxTQUFTLEtBQUssTUFBTSxzQkFBc0IsTUFBTSxDQUFDO0FBQzdFO0FBU08sU0FBUyxjQUFjLEtBQTZCO0FBQ3pELE1BQUksb0JBQWdCLHlCQUFZLE9BQU8sUUFBUSxJQUFJLENBQUM7QUFDcEQsU0FBTyxrQkFBa0IsK0RBQTBCLGlCQUEyQixrQkFBa0IsK0RBQTBCLFlBQXNCO0FBQzlJLFlBQUksK0JBQVcsa0JBQUssZUFBZSwrREFBMEIsV0FBVyxDQUFDLEdBQUc7QUFDMUUsaUJBQU8seUJBQVksYUFBYTtBQUFBLElBQ2xDO0FBQ0Esd0JBQWdCLHFCQUFRLGFBQWE7QUFBQSxFQUN2QztBQUVBLFNBQU87QUFDVDtBQVNPLFNBQVMsb0JBQW9CLE1BQWMsS0FBNkI7QUFDN0UsUUFBTSxhQUFhLGNBQWMsR0FBRztBQUNwQyxNQUFJLENBQUMsWUFBWTtBQUNmLFdBQU87QUFBQSxFQUNUO0FBRUEsYUFBTyxxQkFBUSxZQUFZLElBQUk7QUFDakM7QUFTTyxTQUFTLHdCQUF3QixNQUFjLEtBQXNCO0FBQzFFLFNBQU8sb0JBQW9CLE1BQU0sR0FBRyxLQUFLO0FBQzNDO0FBU08sU0FBUyxtQkFBbUIsTUFBYyxLQUE2QjtBQUM1RSxRQUFNLGFBQWEsY0FBYyxHQUFHO0FBQ3BDLE1BQUksQ0FBQyxZQUFZO0FBQ2YsV0FBTztBQUFBLEVBQ1Q7QUFFQSxhQUFPLHlCQUFZLElBQUk7QUFDdkIsYUFBTyxzQkFBUyxZQUFZLElBQUk7QUFDbEM7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -5,7 +5,11 @@
5
5
  * Contains utility functions for executing commands from the root folder of a project,
6
6
  * resolving paths relative to the root.
7
7
  */
8
- import type { CommandPart, ExecDetailedOptions, ExecResult, ExecSimpleOptions } from './exec.cjs';
8
+ import type { CommandPart, ExecDetailedOptions, ExecOptions, ExecResult, ExecSimpleOptions } from './exec.cjs';
9
+ /**
10
+ * Options for {@link execFromRoot}.
11
+ */
12
+ export type ExecFromRootOptions = ExecOptions;
9
13
  /**
10
14
  * Executes a command from the root folder of the project.
11
15
  *
@@ -131,15 +131,15 @@ __export(vitest_exports, {
131
131
  });
132
132
  module.exports = __toCommonJS(vitest_exports);
133
133
  var import_root = require('../root.cjs');
134
- async function test(params = {}) {
135
- await (0, import_root.execFromRoot)(["vitest", "run", ...buildProjectFlags(params.projects)]);
134
+ async function test(options = {}) {
135
+ await (0, import_root.execFromRoot)(["vitest", "run", ...buildProjectFlags(options.projects)]);
136
136
  }
137
- async function testCoverage(params = {}) {
138
- const threshold = String(params.minCoverageInPercents ?? 0);
137
+ async function testCoverage(options = {}) {
138
+ const threshold = String(options.minCoverageInPercents ?? 0);
139
139
  await (0, import_root.execFromRoot)([
140
140
  "vitest",
141
141
  "run",
142
- ...buildProjectFlags(params.projects),
142
+ ...buildProjectFlags(options.projects),
143
143
  "--coverage",
144
144
  `--coverage.thresholds.lines=${threshold}`,
145
145
  `--coverage.thresholds.functions=${threshold}`,
@@ -147,8 +147,8 @@ async function testCoverage(params = {}) {
147
147
  `--coverage.thresholds.statements=${threshold}`
148
148
  ]);
149
149
  }
150
- async function testWatch(params = {}) {
151
- await (0, import_root.execFromRoot)(["vitest", ...buildProjectFlags(params.projects)]);
150
+ async function testWatch(options = {}) {
151
+ await (0, import_root.execFromRoot)(["vitest", ...buildProjectFlags(options.projects)]);
152
152
  }
153
153
  function buildProjectFlags(projects) {
154
154
  return (projects ?? []).flatMap((project) => [`--project=${project}`, `--project=${project}:*`]);
@@ -159,4 +159,4 @@ function buildProjectFlags(projects) {
159
159
  testCoverage,
160
160
  testWatch
161
161
  });
162
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy90ZXN0LXJ1bm5lcnMvdml0ZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBydW5uaW5nIHRlc3RzIHVzaW5nIHRoZSBWaXRlc3QgZnJhbWV3b3JrLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGVjdXRlcyB2aXRlc3QgYXMgYSBDTEkgc3VicHJvY2VzczsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4ZWNGcm9tUm9vdCB9IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHJ1bm5pbmcgdGVzdHMgd2l0aCBjb3ZlcmFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0Q292ZXJhZ2VQYXJhbXMgZXh0ZW5kcyBUZXN0UGFyYW1zIHtcbiAgLyoqXG4gICAqIE1pbmltdW0gY292ZXJhZ2UgcGVyY2VudGFnZSByZXF1aXJlZC4gSWYgdGhlIGFjdHVhbCBjb3ZlcmFnZSBmYWxscyBiZWxvd1xuICAgKiB0aGlzIHRocmVzaG9sZCwgdGhlIHByb2Nlc3MgZXhpdHMgd2l0aCBhIG5vbi16ZXJvIGNvZGUuXG4gICAqL1xuICByZWFkb25seSBtaW5Db3ZlcmFnZUluUGVyY2VudHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgcnVubmluZyB0ZXN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0cyB0byBydW4uXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgdGVzdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0KHBhcmFtczogVGVzdFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ3ZpdGVzdCcsICdydW4nLCAuLi5idWlsZFByb2plY3RGbGFncyhwYXJhbXMucHJvamVjdHMpXSk7XG59XG5cbi8qKlxuICogUnVucyB0aGUgdGVzdCBzdWl0ZSB3aXRoIGNvdmVyYWdlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCBjb3ZlcmFnZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RDb3ZlcmFnZShwYXJhbXM6IFRlc3RDb3ZlcmFnZVBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRocmVzaG9sZCA9IFN0cmluZyhwYXJhbXMubWluQ292ZXJhZ2VJblBlcmNlbnRzID8/IDApO1xuICBhd2FpdCBleGVjRnJvbVJvb3QoW1xuICAgICd2aXRlc3QnLFxuICAgICdydW4nLFxuICAgIC4uLmJ1aWxkUHJvamVjdEZsYWdzKHBhcmFtcy5wcm9qZWN0cyksXG4gICAgJy0tY292ZXJhZ2UnLFxuICAgIGAtLWNvdmVyYWdlLnRocmVzaG9sZHMubGluZXM9JHt0aHJlc2hvbGR9YCxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLmZ1bmN0aW9ucz0ke3RocmVzaG9sZH1gLFxuICAgIGAtLWNvdmVyYWdlLnRocmVzaG9sZHMuYnJhbmNoZXM9JHt0aHJlc2hvbGR9YCxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLnN0YXRlbWVudHM9JHt0aHJlc2hvbGR9YFxuICBdKTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlIGluIHdhdGNoIG1vZGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgdGVzdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0V2F0Y2gocGFyYW1zOiBUZXN0UGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsndml0ZXN0JywgLi4uYnVpbGRQcm9qZWN0RmxhZ3MocGFyYW1zLnByb2plY3RzKV0pO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBgLS1wcm9qZWN0YCBmbGFncyBmb3IgdGhlIGdpdmVuIHByb2plY3QgcHJlZml4ZXMuXG4gKiBFYWNoIHByZWZpeCBleHBhbmRzIHRvIGJvdGggYC0tcHJvamVjdD1wcmVmaXhgIChleGFjdCBtYXRjaClcbiAqIGFuZCBgLS1wcm9qZWN0PXByZWZpeDoqYCAoc3ViLXByb2plY3RzKS5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdHMgLSBUaGUgcHJvamVjdCBuYW1lIHByZWZpeGVzLlxuICogQHJldHVybnMgVGhlIGAtLXByb2plY3RgIGZsYWdzIGFycmF5LlxuICovXG5mdW5jdGlvbiBidWlsZFByb2plY3RGbGFncyhwcm9qZWN0cz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gKHByb2plY3RzID8/IFtdKS5mbGF0TWFwKChwcm9qZWN0KSA9PiBbYC0tcHJvamVjdD0ke3Byb2plY3R9YCwgYC0tcHJvamVjdD0ke3Byb2plY3R9OipgXSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsa0JBQTZCO0FBNkI3QixlQUFzQixLQUFLLFNBQXFCLENBQUMsR0FBa0I7QUFDakUsWUFBTSwwQkFBYSxDQUFDLFVBQVUsT0FBTyxHQUFHLGtCQUFrQixPQUFPLFFBQVEsQ0FBQyxDQUFDO0FBQzdFO0FBUUEsZUFBc0IsYUFBYSxTQUE2QixDQUFDLEdBQWtCO0FBQ2pGLFFBQU0sWUFBWSxPQUFPLE9BQU8seUJBQXlCLENBQUM7QUFDMUQsWUFBTSwwQkFBYTtBQUFBLElBQ2pCO0FBQUEsSUFDQTtBQUFBLElBQ0EsR0FBRyxrQkFBa0IsT0FBTyxRQUFRO0FBQUEsSUFDcEM7QUFBQSxJQUNBLCtCQUErQixTQUFTO0FBQUEsSUFDeEMsbUNBQW1DLFNBQVM7QUFBQSxJQUM1QyxrQ0FBa0MsU0FBUztBQUFBLElBQzNDLG9DQUFvQyxTQUFTO0FBQUEsRUFDL0MsQ0FBQztBQUNIO0FBUUEsZUFBc0IsVUFBVSxTQUFxQixDQUFDLEdBQWtCO0FBQ3RFLFlBQU0sMEJBQWEsQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLE9BQU8sUUFBUSxDQUFDLENBQUM7QUFDdEU7QUFVQSxTQUFTLGtCQUFrQixVQUErQjtBQUN4RCxVQUFRLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxPQUFPLElBQUksYUFBYSxPQUFPLElBQUksQ0FBQztBQUNqRzsiLAogICJuYW1lcyI6IFtdCn0K
162
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy90ZXN0LXJ1bm5lcnMvdml0ZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBydW5uaW5nIHRlc3RzIHVzaW5nIHRoZSBWaXRlc3QgZnJhbWV3b3JrLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGVjdXRlcyB2aXRlc3QgYXMgYSBDTEkgc3VicHJvY2VzczsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4ZWNGcm9tUm9vdCB9IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJ1bm5pbmcgdGVzdHMgd2l0aCBjb3ZlcmFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0Q292ZXJhZ2VPcHRpb25zIGV4dGVuZHMgVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogTWluaW11bSBjb3ZlcmFnZSBwZXJjZW50YWdlIHJlcXVpcmVkLiBJZiB0aGUgYWN0dWFsIGNvdmVyYWdlIGZhbGxzIGJlbG93XG4gICAqIHRoaXMgdGhyZXNob2xkLCB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uLXplcm8gY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IG1pbkNvdmVyYWdlSW5QZXJjZW50cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0cyB0byBydW4uXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJ1bm5pbmcgdGVzdHMgaW4gd2F0Y2ggbW9kZS5cbiAqL1xuZXhwb3J0IHR5cGUgVGVzdFdhdGNoT3B0aW9ucyA9IFRlc3RPcHRpb25zO1xuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHRlc3QuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdChvcHRpb25zOiBUZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ3ZpdGVzdCcsICdydW4nLCAuLi5idWlsZFByb2plY3RGbGFncyhvcHRpb25zLnByb2plY3RzKV0pO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgd2l0aCBjb3ZlcmFnZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvdmVyYWdlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdENvdmVyYWdlKG9wdGlvbnM6IFRlc3RDb3ZlcmFnZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0aHJlc2hvbGQgPSBTdHJpbmcob3B0aW9ucy5taW5Db3ZlcmFnZUluUGVyY2VudHMgPz8gMCk7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgJ3ZpdGVzdCcsXG4gICAgJ3J1bicsXG4gICAgLi4uYnVpbGRQcm9qZWN0RmxhZ3Mob3B0aW9ucy5wcm9qZWN0cyksXG4gICAgJy0tY292ZXJhZ2UnLFxuICAgIGAtLWNvdmVyYWdlLnRocmVzaG9sZHMubGluZXM9JHt0aHJlc2hvbGR9YCxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLmZ1bmN0aW9ucz0ke3RocmVzaG9sZH1gLFxuICAgIGAtLWNvdmVyYWdlLnRocmVzaG9sZHMuYnJhbmNoZXM9JHt0aHJlc2hvbGR9YCxcbiAgICBgLS1jb3ZlcmFnZS50aHJlc2hvbGRzLnN0YXRlbWVudHM9JHt0aHJlc2hvbGR9YFxuICBdKTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSB0ZXN0IHN1aXRlIGluIHdhdGNoIG1vZGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHRlc3QuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFdhdGNoKG9wdGlvbnM6IFRlc3RXYXRjaE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWyd2aXRlc3QnLCAuLi5idWlsZFByb2plY3RGbGFncyhvcHRpb25zLnByb2plY3RzKV0pO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBgLS1wcm9qZWN0YCBmbGFncyBmb3IgdGhlIGdpdmVuIHByb2plY3QgcHJlZml4ZXMuXG4gKiBFYWNoIHByZWZpeCBleHBhbmRzIHRvIGJvdGggYC0tcHJvamVjdD1wcmVmaXhgIChleGFjdCBtYXRjaClcbiAqIGFuZCBgLS1wcm9qZWN0PXByZWZpeDoqYCAoc3ViLXByb2plY3RzKS5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdHMgLSBUaGUgcHJvamVjdCBuYW1lIHByZWZpeGVzLlxuICogQHJldHVybnMgVGhlIGAtLXByb2plY3RgIGZsYWdzIGFycmF5LlxuICovXG5mdW5jdGlvbiBidWlsZFByb2plY3RGbGFncyhwcm9qZWN0cz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gKHByb2plY3RzID8/IFtdKS5mbGF0TWFwKChwcm9qZWN0KSA9PiBbYC0tcHJvamVjdD0ke3Byb2plY3R9YCwgYC0tcHJvamVjdD0ke3Byb2plY3R9OipgXSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsa0JBQTZCO0FBa0M3QixlQUFzQixLQUFLLFVBQXVCLENBQUMsR0FBa0I7QUFDbkUsWUFBTSwwQkFBYSxDQUFDLFVBQVUsT0FBTyxHQUFHLGtCQUFrQixRQUFRLFFBQVEsQ0FBQyxDQUFDO0FBQzlFO0FBUUEsZUFBc0IsYUFBYSxVQUErQixDQUFDLEdBQWtCO0FBQ25GLFFBQU0sWUFBWSxPQUFPLFFBQVEseUJBQXlCLENBQUM7QUFDM0QsWUFBTSwwQkFBYTtBQUFBLElBQ2pCO0FBQUEsSUFDQTtBQUFBLElBQ0EsR0FBRyxrQkFBa0IsUUFBUSxRQUFRO0FBQUEsSUFDckM7QUFBQSxJQUNBLCtCQUErQixTQUFTO0FBQUEsSUFDeEMsbUNBQW1DLFNBQVM7QUFBQSxJQUM1QyxrQ0FBa0MsU0FBUztBQUFBLElBQzNDLG9DQUFvQyxTQUFTO0FBQUEsRUFDL0MsQ0FBQztBQUNIO0FBUUEsZUFBc0IsVUFBVSxVQUE0QixDQUFDLEdBQWtCO0FBQzdFLFlBQU0sMEJBQWEsQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFDdkU7QUFVQSxTQUFTLGtCQUFrQixVQUErQjtBQUN4RCxVQUFRLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxPQUFPLElBQUksYUFBYSxPQUFPLElBQUksQ0FBQztBQUNqRzsiLAogICJuYW1lcyI6IFtdCn0K
@@ -5,9 +5,9 @@
5
5
  * This module provides functions for running tests using the Vitest framework.
6
6
  */
7
7
  /**
8
- * Parameters for running tests with coverage.
8
+ * Options for running tests with coverage.
9
9
  */
10
- export interface TestCoverageParams extends TestParams {
10
+ export interface TestCoverageOptions extends TestOptions {
11
11
  /**
12
12
  * Minimum coverage percentage required. If the actual coverage falls below
13
13
  * this threshold, the process exits with a non-zero code.
@@ -15,32 +15,36 @@ export interface TestCoverageParams extends TestParams {
15
15
  readonly minCoverageInPercents?: number;
16
16
  }
17
17
  /**
18
- * Parameters for running tests.
18
+ * Options for running tests.
19
19
  */
20
- export interface TestParams {
20
+ export interface TestOptions {
21
21
  /**
22
22
  * The projects to run.
23
23
  */
24
24
  readonly projects?: string[];
25
25
  }
26
+ /**
27
+ * Options for running tests in watch mode.
28
+ */
29
+ export type TestWatchOptions = TestOptions;
26
30
  /**
27
31
  * Runs the test suite.
28
32
  *
29
- * @param params - The parameters for the test.
33
+ * @param options - The options for the test.
30
34
  * @returns A {@link Promise} that resolves when the tests have completed.
31
35
  */
32
- export declare function test(params?: TestParams): Promise<void>;
36
+ export declare function test(options?: TestOptions): Promise<void>;
33
37
  /**
34
38
  * Runs the test suite with coverage.
35
39
  *
36
- * @param params - Optional coverage configuration.
40
+ * @param options - Optional coverage configuration.
37
41
  * @returns A {@link Promise} that resolves when the tests have completed.
38
42
  */
39
- export declare function testCoverage(params?: TestCoverageParams): Promise<void>;
43
+ export declare function testCoverage(options?: TestCoverageOptions): Promise<void>;
40
44
  /**
41
45
  * Runs the test suite in watch mode.
42
46
  *
43
- * @param params - The parameters for the test.
47
+ * @param options - The options for the test.
44
48
  * @returns A {@link Promise} that resolves when the tests have completed.
45
49
  */
46
- export declare function testWatch(params?: TestParams): Promise<void>;
50
+ export declare function testWatch(options?: TestWatchOptions): Promise<void>;
@@ -21,7 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
21
21
  globalThis.process = browserProcess;
22
22
  })();
23
23
 
24
- const LIBRARY_VERSION = "76.0.0";
24
+ const LIBRARY_VERSION = "77.0.0";
25
25
  const LIBRARY_NAME = "obsidian-dev-utils";
26
26
  const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACzCJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACAA;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACRJ;EACE;;;ACDF;EACE;;;ACDF;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
27
27
  export {
@@ -31,10 +31,6 @@ export interface GetAvailablePathForAttachmentsExtendedFnParams {
31
31
  * A base name of the attachment.
32
32
  */
33
33
  readonly attachmentFileBaseName: string;
34
- /**
35
- * A content of the attachment file.
36
- */
37
- readonly attachmentFileContent?: ArrayBuffer | undefined;
38
34
  /**
39
35
  * An extension of the attachment.
40
36
  */
@@ -59,6 +55,17 @@ export interface GetAvailablePathForAttachmentsExtendedFnParams {
59
55
  * A path or file of the old note.
60
56
  */
61
57
  readonly oldNotePathOrFile?: PathOrFile | undefined;
58
+ /**
59
+ * Lazily reads the content of the attachment file.
60
+ *
61
+ * The content is read on demand only when a consumer actually needs the bytes (e.g. a template
62
+ * token that embeds them). For the default templates nothing pulls the bytes, so the potentially
63
+ * expensive (size-proportional) `readBinary` never runs. Consumers that may call this more than
64
+ * once should memoize the first call. `null` when there is no attachment file to read.
65
+ *
66
+ * @returns A {@link Promise} that resolves to the content of the attachment file.
67
+ */
68
+ readonly readAttachmentFileContent: (() => Promise<ArrayBuffer>) | null;
62
69
  /**
63
70
  * Should the duplicate check be skipped.
64
71
  */