obsidian-dev-utils 86.1.3 → 87.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 (75) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/lib/cjs/__merged.cjs +34 -3
  3. package/dist/lib/cjs/__merged.d.cts +5 -4
  4. package/dist/lib/cjs/async-events.cjs +32 -3
  5. package/dist/lib/cjs/async-events.d.cts +63 -0
  6. package/dist/lib/cjs/disposable.cjs +103 -115
  7. package/dist/lib/cjs/disposable.d.cts +81 -57
  8. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  9. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +48 -21
  10. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +11 -8
  11. package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.cjs +1 -1
  12. package/dist/lib/cjs/obsidian/community-plugins.cjs +109 -9
  13. package/dist/lib/cjs/obsidian/community-plugins.d.cts +175 -3
  14. package/dist/lib/cjs/obsidian/components/component-ex.cjs +18 -1
  15. package/dist/lib/cjs/obsidian/components/component-ex.d.cts +12 -0
  16. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +8 -4
  17. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +7 -3
  18. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +80 -38
  19. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +81 -19
  20. package/dist/lib/cjs/obsidian/css-class.cjs +4 -2
  21. package/dist/lib/cjs/obsidian/css-class.d.cts +12 -3
  22. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +2 -7
  23. package/dist/lib/cjs/obsidian/events.cjs +165 -0
  24. package/dist/lib/cjs/obsidian/events.d.cts +98 -0
  25. package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +1 -2
  26. package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +0 -1
  27. package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +0 -1
  28. package/dist/lib/cjs/obsidian/index.cjs +4 -1
  29. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  30. package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +1 -1
  31. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +7 -3
  32. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +31 -33
  33. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.cts +11 -0
  34. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +39 -52
  35. package/dist/lib/cjs/script-utils/linters/eslint-no-restricted-syntax.cjs +1 -5
  36. package/dist/lib/cjs/type.cjs +31 -12
  37. package/dist/lib/cjs/type.d.cts +56 -36
  38. package/dist/lib/esm/__merged.d.mts +5 -4
  39. package/dist/lib/esm/__merged.mjs +39 -5
  40. package/dist/lib/esm/async-events.d.mts +63 -0
  41. package/dist/lib/esm/async-events.mjs +29 -2
  42. package/dist/lib/esm/disposable.d.mts +81 -57
  43. package/dist/lib/esm/disposable.mjs +101 -115
  44. package/dist/lib/esm/generated-during-build.mjs +2 -2
  45. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +11 -8
  46. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +49 -22
  47. package/dist/lib/esm/obsidian/command-handlers/open-demo-vault-command-handler.mjs +1 -1
  48. package/dist/lib/esm/obsidian/community-plugins.d.mts +175 -3
  49. package/dist/lib/esm/obsidian/community-plugins.mjs +100 -8
  50. package/dist/lib/esm/obsidian/components/component-ex.d.mts +12 -0
  51. package/dist/lib/esm/obsidian/components/component-ex.mjs +18 -1
  52. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +7 -3
  53. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +8 -4
  54. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +81 -19
  55. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +80 -38
  56. package/dist/lib/esm/obsidian/css-class.d.mts +12 -3
  57. package/dist/lib/esm/obsidian/css-class.mjs +4 -2
  58. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +5 -7
  59. package/dist/lib/esm/obsidian/events.d.mts +98 -0
  60. package/dist/lib/esm/obsidian/events.mjs +55 -0
  61. package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +0 -1
  62. package/dist/lib/esm/obsidian/i18n/locales/en.mjs +1 -2
  63. package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +0 -1
  64. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  65. package/dist/lib/esm/obsidian/index.mjs +3 -1
  66. package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +7 -3
  67. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.mts +11 -0
  68. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +29 -32
  69. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +40 -55
  70. package/dist/lib/esm/script-utils/linters/eslint-no-restricted-syntax.mjs +1 -5
  71. package/dist/lib/esm/type.d.mts +56 -36
  72. package/dist/lib/esm/type.mjs +30 -11
  73. package/dist/styles.css +5 -18
  74. package/obsidian/events/package.json +6 -0
  75. package/package.json +18 -15
@@ -5,6 +5,7 @@
5
5
  * Menu event registrar.
6
6
  */
7
7
  import type { Editor, MarkdownFileInfo, Menu, TAbstractFile, WorkspaceLeaf } from 'obsidian' with { 'resolution-mode': 'import' };
8
+ import type { DisposableEx } from '../disposable.cjs';
8
9
  /**
9
10
  * Handler for the editor context menu event.
10
11
  *
@@ -39,18 +40,21 @@ export interface MenuEventRegistrar {
39
40
  * Registers a handler for the editor context menu event.
40
41
  *
41
42
  * @param handler - The handler to register.
43
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed.
42
44
  */
43
- registerEditorMenuEventHandler(handler: EditorMenuEventHandler): void;
45
+ registerEditorMenuEventHandler(handler: EditorMenuEventHandler): DisposableEx;
44
46
  /**
45
47
  * Registers a handler for the single-file context menu event.
46
48
  *
47
49
  * @param handler - The handler to register.
50
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed.
48
51
  */
49
- registerFileMenuEventHandler(handler: FileMenuEventHandler): void;
52
+ registerFileMenuEventHandler(handler: FileMenuEventHandler): DisposableEx;
50
53
  /**
51
54
  * Registers a handler for the multi-file context menu event.
52
55
  *
53
56
  * @param handler - The handler to register.
57
+ * @returns A {@link DisposableEx} that unregisters the handler when disposed.
54
58
  */
55
- registerFilesMenuEventHandler(handler: FilesMenuEventHandler): void;
59
+ registerFilesMenuEventHandler(handler: FilesMenuEventHandler): DisposableEx;
56
60
  }
@@ -125,7 +125,8 @@ var __copyProps = (to, from, except, desc) => {
125
125
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
126
126
  var change_extension_plugin_exports = {};
127
127
  __export(change_extension_plugin_exports, {
128
- changeExtensionPlugin: () => changeExtensionPlugin
128
+ changeExtensionPlugin: () => changeExtensionPlugin,
129
+ rewriteImportPathExtensions: () => rewriteImportPathExtensions
129
130
  });
130
131
  module.exports = __toCommonJS(change_extension_plugin_exports);
131
132
  var import_promises = require('node:fs/promises');
@@ -145,44 +146,41 @@ function changeExtensionPlugin(extension) {
145
146
  searchValue: /\.js$/g,
146
147
  str: file.path
147
148
  });
148
- let newText = (0, import_string.replaceAll)({
149
- replacer: ({ capturedGroupArgs: [importPath = ""] }) => {
150
- if (importPath.endsWith(import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.DtsExtension)) {
151
- return "undefined";
152
- }
153
- const fixedImportPath = (0, import_string.replaceAll)({
154
- replacer: extension,
155
- searchValue: /\.ts$/g,
156
- str: importPath
157
- });
158
- return `require('${fixedImportPath}')`;
159
- },
160
- searchValue: /require\(["'](?<ImportPath>.+?)["']\)/g,
161
- str: file.text
162
- });
163
- newText = (0, import_string.replaceAll)({
164
- replacer: ({ capturedGroupArgs: [importPath = ""] }) => {
165
- if (importPath.endsWith(import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.DtsExtension)) {
166
- return "undefined";
167
- }
168
- const fixedImportPath = (0, import_string.replaceAll)({
169
- replacer: extension,
170
- searchValue: /\.ts$/g,
171
- str: importPath
172
- });
173
- return `from "${fixedImportPath}"`;
174
- },
175
- searchValue: /from "(?<ImportPath>.+?)"/g,
176
- str: newText
177
- });
149
+ const newText = rewriteImportPathExtensions(file.text, extension);
178
150
  await (0, import_promises.writeFile)(newPath, newText);
179
151
  }
180
152
  });
181
153
  }
182
154
  };
183
155
  }
156
+ function rewriteImportPathExtensions(text, extension) {
157
+ let newText = (0, import_string.replaceAll)({
158
+ replacer: ({ capturedGroupArgs: [importPath = ""] }) => `require('${rewriteTsExtension(importPath, extension)}')`,
159
+ searchValue: /require\(["'](?<ImportPath>.+?)["']\)/g,
160
+ str: text
161
+ });
162
+ newText = (0, import_string.replaceAll)({
163
+ replacer: ({ capturedGroupArgs: [importPath = ""] }) => `from "${rewriteTsExtension(importPath, extension)}"`,
164
+ searchValue: /from "(?<ImportPath>.+?)"/g,
165
+ str: newText
166
+ });
167
+ newText = (0, import_string.replaceAll)({
168
+ replacer: ({ capturedGroupArgs: [importPath = ""] }) => `import("${rewriteTsExtension(importPath, extension)}")`,
169
+ searchValue: /import\(["'](?<ImportPath>.+?)["']\)/g,
170
+ str: newText
171
+ });
172
+ return newText;
173
+ }
174
+ function rewriteTsExtension(importPath, extension) {
175
+ return (0, import_string.replaceAll)({
176
+ replacer: extension,
177
+ searchValue: /\.ts$/g,
178
+ str: importPath
179
+ });
180
+ }
184
181
  // Annotate the CommonJS export names for ESM import in node:
185
182
  0 && (module.exports = {
186
- changeExtensionPlugin
183
+ changeExtensionPlugin,
184
+ rewriteImportPathExtensions
187
185
  });
188
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9idW5kbGVycy9lc2J1aWxkLWltcGwvY2hhbmdlLWV4dGVuc2lvbi1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgY2hhbmdlcyB0aGUgZXh0ZW5zaW9uIG9mIEphdmFTY3JpcHQgZmlsZXMgYWZ0ZXIgdGhlIGJ1aWxkIHByb2Nlc3MuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIGVzYnVpbGQgcGx1Z2luIHRoYXQgcmV3cml0ZXMgZmlsZSBleHRlbnNpb25zIGF0IGJ1aWxkIHRpbWU7IHJlcXVpcmVzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnZXNidWlsZCc7XG5cbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnLi4vLi4vLi4vc3RyaW5nLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IGNoYW5nZXMgdGhlIGV4dGVuc2lvbiBvZiBKYXZhU2NyaXB0IGZpbGVzIGFmdGVyIHRoZSBidWlsZCBwcm9jZXNzLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb24gLSBUaGUgZXh0ZW5zaW9uIHRvIGNoYW5nZSB0aGUgZmlsZXMgdG8uXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIGBQbHVnaW5gIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhlIHJlbmFtaW5nIGFuZCBtb2RpZmljYXRpb24gb2Ygb3V0cHV0IGZpbGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlRXh0ZW5zaW9uUGx1Z2luKGV4dGVuc2lvbjogc3RyaW5nKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnY2hhbmdlLWV4dGVuc2lvbicsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLm9uRW5kKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHJlc3VsdC5vdXRwdXRGaWxlcyA/PyBbXSkge1xuICAgICAgICAgIGlmICghZmlsZS5wYXRoLmVuZHNXaXRoKE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuSnNFeHRlbnNpb24pIHx8IGZpbGUucGF0aC5lbmRzV2l0aChPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRqc0V4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSByZXBsYWNlQWxsKHtcbiAgICAgICAgICAgIHJlcGxhY2VyOiBleHRlbnNpb24sXG4gICAgICAgICAgICBzZWFyY2hWYWx1ZTogL1xcLmpzJC9nLFxuICAgICAgICAgICAgc3RyOiBmaWxlLnBhdGhcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxldCBuZXdUZXh0ID0gcmVwbGFjZUFsbCh7XG4gICAgICAgICAgICByZXBsYWNlcjogKHsgY2FwdHVyZWRHcm91cEFyZ3M6IFtpbXBvcnRQYXRoID0gJyddIH0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKGltcG9ydFBhdGguZW5kc1dpdGgoT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EdHNFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgZml4ZWRJbXBvcnRQYXRoID0gcmVwbGFjZUFsbCh7XG4gICAgICAgICAgICAgICAgcmVwbGFjZXI6IGV4dGVuc2lvbixcbiAgICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogL1xcLnRzJC9nLFxuICAgICAgICAgICAgICAgIHN0cjogaW1wb3J0UGF0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIGByZXF1aXJlKCcke2ZpeGVkSW1wb3J0UGF0aH0nKWA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VhcmNoVmFsdWU6IC9yZXF1aXJlXFwoW1wiJ10oPzxJbXBvcnRQYXRoPi4rPylbXCInXVxcKS9nLFxuICAgICAgICAgICAgc3RyOiBmaWxlLnRleHRcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG5ld1RleHQgPSByZXBsYWNlQWxsKHtcbiAgICAgICAgICAgIHJlcGxhY2VyOiAoeyBjYXB0dXJlZEdyb3VwQXJnczogW2ltcG9ydFBhdGggPSAnJ10gfSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaW1wb3J0UGF0aC5lbmRzV2l0aChPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkR0c0V4dGVuc2lvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBmaXhlZEltcG9ydFBhdGggPSByZXBsYWNlQWxsKHtcbiAgICAgICAgICAgICAgICByZXBsYWNlcjogZXh0ZW5zaW9uLFxuICAgICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiAvXFwudHMkL2csXG4gICAgICAgICAgICAgICAgc3RyOiBpbXBvcnRQYXRoXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gYGZyb20gXCIke2ZpeGVkSW1wb3J0UGF0aH1cImA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VhcmNoVmFsdWU6IC9mcm9tIFwiKD88SW1wb3J0UGF0aD4uKz8pXCIvZyxcbiAgICAgICAgICAgIHN0cjogbmV3VGV4dFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKG5ld1BhdGgsIG5ld1RleHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQSxzQkFBMEI7QUFFMUIsb0JBQTJCO0FBQzNCLDJDQUEwQztBQVFuQyxTQUFTLHNCQUFzQixXQUEyQjtBQUMvRCxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNLE9BQWE7QUFDakIsWUFBTSxNQUFNLE9BQU8sV0FBVztBQUM1QixtQkFBVyxRQUFRLE9BQU8sZUFBZSxDQUFDLEdBQUc7QUFDM0MsY0FBSSxDQUFDLEtBQUssS0FBSyxTQUFTLCtEQUEwQixXQUFXLEtBQUssS0FBSyxLQUFLLFNBQVMsK0RBQTBCLFlBQVksR0FBRztBQUM1SDtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxjQUFVLDBCQUFXO0FBQUEsWUFDekIsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsS0FBSyxLQUFLO0FBQUEsVUFDWixDQUFDO0FBRUQsY0FBSSxjQUFVLDBCQUFXO0FBQUEsWUFDdkIsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTTtBQUN0RCxrQkFBSSxXQUFXLFNBQVMsK0RBQTBCLFlBQVksR0FBRztBQUMvRCx1QkFBTztBQUFBLGNBQ1Q7QUFFQSxvQkFBTSxzQkFBa0IsMEJBQVc7QUFBQSxnQkFDakMsVUFBVTtBQUFBLGdCQUNWLGFBQWE7QUFBQSxnQkFDYixLQUFLO0FBQUEsY0FDUCxDQUFDO0FBQ0QscUJBQU8sWUFBWSxlQUFlO0FBQUEsWUFDcEM7QUFBQSxZQUNBLGFBQWE7QUFBQSxZQUNiLEtBQUssS0FBSztBQUFBLFVBQ1osQ0FBQztBQUVELHdCQUFVLDBCQUFXO0FBQUEsWUFDbkIsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTTtBQUN0RCxrQkFBSSxXQUFXLFNBQVMsK0RBQTBCLFlBQVksR0FBRztBQUMvRCx1QkFBTztBQUFBLGNBQ1Q7QUFFQSxvQkFBTSxzQkFBa0IsMEJBQVc7QUFBQSxnQkFDakMsVUFBVTtBQUFBLGdCQUNWLGFBQWE7QUFBQSxnQkFDYixLQUFLO0FBQUEsY0FDUCxDQUFDO0FBQ0QscUJBQU8sU0FBUyxlQUFlO0FBQUEsWUFDakM7QUFBQSxZQUNBLGFBQWE7QUFBQSxZQUNiLEtBQUs7QUFBQSxVQUNQLENBQUM7QUFFRCxvQkFBTSwyQkFBVSxTQUFTLE9BQU87QUFBQSxRQUNsQztBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
186
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9idW5kbGVycy9lc2J1aWxkLWltcGwvY2hhbmdlLWV4dGVuc2lvbi1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgY2hhbmdlcyB0aGUgZXh0ZW5zaW9uIG9mIEphdmFTY3JpcHQgZmlsZXMgYWZ0ZXIgdGhlIGJ1aWxkIHByb2Nlc3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcblxuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuLi8uLi8uLi9zdHJpbmcudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4uLy4uL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIGVzYnVpbGQgcGx1Z2luIHRoYXQgcmV3cml0ZXMgZmlsZSBleHRlbnNpb25zIGF0IGJ1aWxkIHRpbWU7IHJlcXVpcmVzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IGNoYW5nZXMgdGhlIGV4dGVuc2lvbiBvZiBKYXZhU2NyaXB0IGZpbGVzIGFmdGVyIHRoZSBidWlsZCBwcm9jZXNzLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb24gLSBUaGUgZXh0ZW5zaW9uIHRvIGNoYW5nZSB0aGUgZmlsZXMgdG8uXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIGBQbHVnaW5gIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhlIHJlbmFtaW5nIGFuZCBtb2RpZmljYXRpb24gb2Ygb3V0cHV0IGZpbGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlRXh0ZW5zaW9uUGx1Z2luKGV4dGVuc2lvbjogc3RyaW5nKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnY2hhbmdlLWV4dGVuc2lvbicsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLm9uRW5kKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHJlc3VsdC5vdXRwdXRGaWxlcyA/PyBbXSkge1xuICAgICAgICAgIGlmICghZmlsZS5wYXRoLmVuZHNXaXRoKE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuSnNFeHRlbnNpb24pIHx8IGZpbGUucGF0aC5lbmRzV2l0aChPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRqc0V4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSByZXBsYWNlQWxsKHtcbiAgICAgICAgICAgIHJlcGxhY2VyOiBleHRlbnNpb24sXG4gICAgICAgICAgICBzZWFyY2hWYWx1ZTogL1xcLmpzJC9nLFxuICAgICAgICAgICAgc3RyOiBmaWxlLnBhdGhcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IG5ld1RleHQgPSByZXdyaXRlSW1wb3J0UGF0aEV4dGVuc2lvbnMoZmlsZS50ZXh0LCBleHRlbnNpb24pO1xuXG4gICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKG5ld1BhdGgsIG5ld1RleHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qKlxuICogUmV3cml0ZXMgdGhlIGV4dGVuc2lvbiBvZiBldmVyeSBpbXBvcnQtbGlrZSBwYXRoIGluIGFuIGVtaXR0ZWQgbW9kdWxlJ3MgdGV4dCBmcm9tIGAudHNgIHRvIHRoZSB0YXJnZXRcbiAqIG91dHB1dCBleHRlbnNpb24gKGAubWpzYCAvIGAuY2pzYCksIHNvIHRoZSBtdWx0aS1maWxlIGBkaXN0L2xpYmAgYnVpbGQgcmVmZXJlbmNlcyBpdHMgcmVhbCBzaWJsaW5ncy5cbiAqXG4gKiBDb3ZlcnMgYHJlcXVpcmUoJ1x1MjAyNicpYCwgc3RhdGljIGBmcm9tIFwiXHUyMDI2XCJgLCBhbmQgZHluYW1pYyBgaW1wb3J0KFwiXHUyMDI2XCIpYCBvY2N1cnJlbmNlcy5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBlbWl0dGVkIG1vZHVsZSB0ZXh0IHRvIHJld3JpdGUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uIC0gVGhlIG91dHB1dCBleHRlbnNpb24gdG8gcmV3cml0ZSBgLnRzYCBwYXRocyB0byAoZS5nLiBgLm1qc2Agb3IgYC5janNgKS5cbiAqIEByZXR1cm5zIFRoZSByZXdyaXR0ZW4gbW9kdWxlIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlSW1wb3J0UGF0aEV4dGVuc2lvbnModGV4dDogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBuZXdUZXh0ID0gcmVwbGFjZUFsbCh7XG4gICAgcmVwbGFjZXI6ICh7IGNhcHR1cmVkR3JvdXBBcmdzOiBbaW1wb3J0UGF0aCA9ICcnXSB9KSA9PiBgcmVxdWlyZSgnJHtyZXdyaXRlVHNFeHRlbnNpb24oaW1wb3J0UGF0aCwgZXh0ZW5zaW9uKX0nKWAsXG4gICAgc2VhcmNoVmFsdWU6IC9yZXF1aXJlXFwoW1wiJ10oPzxJbXBvcnRQYXRoPi4rPylbXCInXVxcKS9nLFxuICAgIHN0cjogdGV4dFxuICB9KTtcblxuICBuZXdUZXh0ID0gcmVwbGFjZUFsbCh7XG4gICAgcmVwbGFjZXI6ICh7IGNhcHR1cmVkR3JvdXBBcmdzOiBbaW1wb3J0UGF0aCA9ICcnXSB9KSA9PiBgZnJvbSBcIiR7cmV3cml0ZVRzRXh0ZW5zaW9uKGltcG9ydFBhdGgsIGV4dGVuc2lvbil9XCJgLFxuICAgIHNlYXJjaFZhbHVlOiAvZnJvbSBcIig/PEltcG9ydFBhdGg+Lis/KVwiL2csXG4gICAgc3RyOiBuZXdUZXh0XG4gIH0pO1xuXG4gIG5ld1RleHQgPSByZXBsYWNlQWxsKHtcbiAgICByZXBsYWNlcjogKHsgY2FwdHVyZWRHcm91cEFyZ3M6IFtpbXBvcnRQYXRoID0gJyddIH0pID0+IGBpbXBvcnQoXCIke3Jld3JpdGVUc0V4dGVuc2lvbihpbXBvcnRQYXRoLCBleHRlbnNpb24pfVwiKWAsXG4gICAgc2VhcmNoVmFsdWU6IC9pbXBvcnRcXChbXCInXSg/PEltcG9ydFBhdGg+Lis/KVtcIiddXFwpL2csXG4gICAgc3RyOiBuZXdUZXh0XG4gIH0pO1xuXG4gIHJldHVybiBuZXdUZXh0O1xufVxuXG4vKipcbiAqIFJld3JpdGVzIGEgdHJhaWxpbmcgYC50c2AgZXh0ZW5zaW9uIGluIGEgc2luZ2xlIGltcG9ydCBwYXRoIHRvIHRoZSB0YXJnZXQgb3V0cHV0IGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0gaW1wb3J0UGF0aCAtIFRoZSBjYXB0dXJlZCBpbXBvcnQgcGF0aC5cbiAqIEBwYXJhbSBleHRlbnNpb24gLSBUaGUgb3V0cHV0IGV4dGVuc2lvbiB0byByZXdyaXRlIGEgdHJhaWxpbmcgYC50c2AgdG8uXG4gKiBAcmV0dXJucyBUaGUgcmV3cml0dGVuIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHJld3JpdGVUc0V4dGVuc2lvbihpbXBvcnRQYXRoOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgIHJlcGxhY2VyOiBleHRlbnNpb24sXG4gICAgc2VhcmNoVmFsdWU6IC9cXC50cyQvZyxcbiAgICBzdHI6IGltcG9ydFBhdGhcbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHNCQUEwQjtBQUUxQixvQkFBMkI7QUFDM0IsMkNBQTBDO0FBVW5DLFNBQVMsc0JBQXNCLFdBQTJCO0FBQy9ELFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE1BQU0sT0FBYTtBQUNqQixZQUFNLE1BQU0sT0FBTyxXQUFXO0FBQzVCLG1CQUFXLFFBQVEsT0FBTyxlQUFlLENBQUMsR0FBRztBQUMzQyxjQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsK0RBQTBCLFdBQVcsS0FBSyxLQUFLLEtBQUssU0FBUywrREFBMEIsWUFBWSxHQUFHO0FBQzVIO0FBQUEsVUFDRjtBQUVBLGdCQUFNLGNBQVUsMEJBQVc7QUFBQSxZQUN6QixVQUFVO0FBQUEsWUFDVixhQUFhO0FBQUEsWUFDYixLQUFLLEtBQUs7QUFBQSxVQUNaLENBQUM7QUFFRCxnQkFBTSxVQUFVLDRCQUE0QixLQUFLLE1BQU0sU0FBUztBQUVoRSxvQkFBTSwyQkFBVSxTQUFTLE9BQU87QUFBQSxRQUNsQztBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0Y7QUFjTyxTQUFTLDRCQUE0QixNQUFjLFdBQTJCO0FBQ25GLE1BQUksY0FBVSwwQkFBVztBQUFBLElBQ3ZCLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sWUFBWSxtQkFBbUIsWUFBWSxTQUFTLENBQUM7QUFBQSxJQUM3RyxhQUFhO0FBQUEsSUFDYixLQUFLO0FBQUEsRUFDUCxDQUFDO0FBRUQsZ0JBQVUsMEJBQVc7QUFBQSxJQUNuQixVQUFVLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLFNBQVMsbUJBQW1CLFlBQVksU0FBUyxDQUFDO0FBQUEsSUFDMUcsYUFBYTtBQUFBLElBQ2IsS0FBSztBQUFBLEVBQ1AsQ0FBQztBQUVELGdCQUFVLDBCQUFXO0FBQUEsSUFDbkIsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxXQUFXLG1CQUFtQixZQUFZLFNBQVMsQ0FBQztBQUFBLElBQzVHLGFBQWE7QUFBQSxJQUNiLEtBQUs7QUFBQSxFQUNQLENBQUM7QUFFRCxTQUFPO0FBQ1Q7QUFTQSxTQUFTLG1CQUFtQixZQUFvQixXQUEyQjtBQUN6RSxhQUFPLDBCQUFXO0FBQUEsSUFDaEIsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsS0FBSztBQUFBLEVBQ1AsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -12,3 +12,14 @@ import type { Plugin } from 'esbuild' with { 'resolution-mode': 'import' };
12
12
  * @returns An esbuild `Plugin` object that handles the renaming and modification of output files.
13
13
  */
14
14
  export declare function changeExtensionPlugin(extension: string): Plugin;
15
+ /**
16
+ * Rewrites the extension of every import-like path in an emitted module's text from `.ts` to the target
17
+ * output extension (`.mjs` / `.cjs`), so the multi-file `dist/lib` build references its real siblings.
18
+ *
19
+ * Covers `require('…')`, static `from "…"`, and dynamic `import("…", { with: { 'resolution-mode': 'import' } })` occurrences.
20
+ *
21
+ * @param text - The emitted module text to rewrite.
22
+ * @param extension - The output extension to rewrite `.ts` paths to (e.g. `.mjs` or `.cjs`).
23
+ * @returns The rewritten module text.
24
+ */
25
+ export declare function rewriteImportPathExtensions(text: string, extension: string): string;
@@ -138,7 +138,6 @@ __export(copy_to_obsidian_plugins_folder_plugin_exports, {
138
138
  copyToObsidianPluginsFolderPlugin: () => copyToObsidianPluginsFolderPlugin
139
139
  });
140
140
  module.exports = __toCommonJS(copy_to_obsidian_plugins_folder_plugin_exports);
141
- var import_node_fs = require('node:fs');
142
141
  var import_promises = require('node:fs/promises');
143
142
  var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
144
143
  var import_obsidian_integration_testing = require('obsidian-integration-testing');
@@ -171,63 +170,16 @@ function copyToObsidianPluginsFolderPlugin(params) {
171
170
  }
172
171
  obsidianConfigFolder = (0, import_path.toPosixPath)(obsidianConfigFolder);
173
172
  const pluginFolder = (0, import_path.join)(obsidianConfigFolder, "plugins", pluginName);
174
- if (!(0, import_node_fs.existsSync)(pluginFolder)) {
175
- await (0, import_promises.mkdir)(pluginFolder, { recursive: true });
176
- }
173
+ await (0, import_promises.mkdir)(pluginFolder, { recursive: true });
177
174
  await (0, import_promises.cp)(distFolder, pluginFolder, { recursive: true });
178
- const hotReloadFolder = (0, import_path.join)(obsidianConfigFolder, "plugins/hot-reload");
179
- if (!(0, import_node_fs.existsSync)(hotReloadFolder)) {
180
- await (0, import_promises.mkdir)(hotReloadFolder, { recursive: true });
181
- const hotReloadRepoUrl = "https://raw.githubusercontent.com/pjeby/hot-reload/master/";
182
- for (const fileName of ["main.js", "manifest.json"]) {
183
- const fileUrl = hotReloadRepoUrl + fileName;
184
- const response = await fetch(fileUrl);
185
- const text = await response.text();
186
- await (0, import_promises.writeFile)((0, import_path.join)(hotReloadFolder, fileName), text);
187
- }
188
- }
189
- await enableCommunityPlugin({
190
- obsidianConfigFolder,
191
- pluginId: "hot-reload"
192
- });
193
- await enableCommunityPlugin({
175
+ await installAndEnableHotReload({
194
176
  obsidianConfigFolder,
195
- pluginId: pluginName
177
+ pluginName
196
178
  });
197
179
  });
198
180
  }
199
181
  };
200
182
  }
201
- async function enableCommunityPlugin(params) {
202
- const { obsidianConfigFolder, pluginId } = params;
203
- const communityPluginsPath = (0, import_path.join)(obsidianConfigFolder, "community-plugins.json");
204
- let plugins = [];
205
- if ((0, import_node_fs.existsSync)(communityPluginsPath)) {
206
- const content = await (0, import_promises.readFile)(communityPluginsPath, "utf-8");
207
- plugins = JSON.parse(content);
208
- }
209
- if (!plugins.includes(pluginId)) {
210
- plugins.push(pluginId);
211
- const JSON_INDENT = 2;
212
- await (0, import_promises.writeFile)(communityPluginsPath, JSON.stringify(plugins, null, JSON_INDENT), "utf-8");
213
- }
214
- const vaultPath = (0, import_path.dirname)(obsidianConfigFolder);
215
- try {
216
- const transport = await getOrLaunchDevInstance(vaultPath);
217
- await (0, import_obsidian_integration_testing.evalInObsidian)({
218
- args: { pluginId },
219
- // eslint-disable-next-line no-shadow -- No actual shadowing as the function is executed externally.
220
- async fn({ app, pluginId: pluginId2 }) {
221
- await app.plugins.enablePluginAndSave(pluginId2);
222
- },
223
- shouldSkipPreflightChecks: true,
224
- transport,
225
- vaultPath
226
- });
227
- } catch (e) {
228
- (0, import_debug.getLibDebugger)("copyToObsidianPluginsFolderPlugin")(`Failed to live-enable plugin '${pluginId}'. It will be enabled on the next vault open.`, e);
229
- }
230
- }
231
183
  async function getOrLaunchDevInstance(vaultPath) {
232
184
  devInstanceTransportPromise ??= launchDevInstance(vaultPath);
233
185
  try {
@@ -237,6 +189,41 @@ async function getOrLaunchDevInstance(vaultPath) {
237
189
  throw e;
238
190
  }
239
191
  }
192
+ async function installAndEnableHotReload(params) {
193
+ const {
194
+ obsidianConfigFolder,
195
+ pluginName
196
+ } = params;
197
+ const vaultPath = (0, import_path.dirname)(obsidianConfigFolder);
198
+ const transport = await getOrLaunchDevInstance(vaultPath);
199
+ await (0, import_obsidian_integration_testing.evalInObsidian)({
200
+ args: { pluginName },
201
+ // eslint-disable-next-line no-shadow -- No actual shadowing as the function is executed externally.
202
+ async fn({ app, obsidianModule, pluginName: pluginName2 }) {
203
+ const HOT_RELOAD_PLUGIN_ID = "hot-reload";
204
+ const COMMUNITY_PLUGINS_REGISTRY_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-plugins.json";
205
+ const { requestUrl } = obsidianModule;
206
+ if (!app.plugins.manifests[HOT_RELOAD_PLUGIN_ID]) {
207
+ const registryEntries = (await requestUrl(COMMUNITY_PLUGINS_REGISTRY_URL)).json;
208
+ const entry = registryEntries.find((candidate) => candidate.id === HOT_RELOAD_PLUGIN_ID);
209
+ if (!entry) {
210
+ throw new Error(`Plugin '${HOT_RELOAD_PLUGIN_ID}' was not found in the Obsidian community plugins registry.`);
211
+ }
212
+ const latestRelease = (await requestUrl(`https://api.github.com/repos/${entry.repo}/releases/latest`)).json;
213
+ const version = latestRelease.tag_name;
214
+ const manifest = (await requestUrl(`https://github.com/${entry.repo}/releases/download/${version}/manifest.json`)).json;
215
+ await app.plugins.installPlugin(entry.repo, version, manifest);
216
+ }
217
+ if (!app.plugins.enabledPlugins.has(HOT_RELOAD_PLUGIN_ID)) {
218
+ await app.plugins.enablePluginAndSave(HOT_RELOAD_PLUGIN_ID);
219
+ }
220
+ await app.plugins.enablePluginAndSave(pluginName2);
221
+ },
222
+ shouldSkipPreflightChecks: true,
223
+ transport,
224
+ vaultPath
225
+ });
226
+ }
240
227
  async function launchDevInstance(vaultPath) {
241
228
  const transport = await (0, import_obsidian_integration_testing.createTransportFromOptions)();
242
229
  try {
@@ -272,4 +259,4 @@ function registerDevInstanceCleanup(transport) {
272
259
  0 && (module.exports = {
273
260
  copyToObsidianPluginsFolderPlugin
274
261
  });
275
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9idW5kbGVycy9lc2J1aWxkLWltcGwvY29weS10by1vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgYXV0b21hdGljYWxseSBjb3BpZXMgdGhlIGJ1aWxkIG91dHB1dFxuICogdG8gdGhlIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyIGR1cmluZyBkZXZlbG9wbWVudC4gVGhpcyBwbHVnaW4gaGVscHMgc3RyZWFtbGluZVxuICogdGhlIGRldmVsb3BtZW50IHdvcmtmbG93IGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGxhdGVzdCBidWlsZCBpcyBhbHdheXMgYXZhaWxhYmxlXG4gKiBpbiB0aGUgY29ycmVjdCBPYnNpZGlhbiBmb2xkZXIgZm9yIHRlc3RpbmcgYW5kIHVzZS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gZXNidWlsZCBwbHVnaW4gdGhhdCBjb3BpZXMgYnVpbGQgb3V0cHV0IHRvIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyOyByZXF1aXJlcyBhIGxpdmUgZXNidWlsZCBjb250ZXh0LiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBjcCxcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHtcbiAgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMsXG4gIGV2YWxJbk9ic2lkaWFuXG59IGZyb20gJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uLy4uLy4uL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW4sXG4gIHRvUG9zaXhQYXRoXG59IGZyb20gJy4uLy4uLy4uL3BhdGgudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb3B5VG9PYnNpZGlhblBsdWdpbnNGb2xkZXJQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdoZXJlIHRoZSBidWlsdCBmaWxlcyBhcmUgbG9jYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYnVpbGQgaXMgYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNQcm9kdWN0aW9uQnVpbGQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgb2YgdGhlIE9ic2lkaWFuIGNvbmZpZ3VyYXRpb24uIElmIG5vdCBwcm92aWRlZCwgdGhlIHBsdWdpbiB3aWxsIG5vdCBjb3B5IGZpbGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5Db25maWdGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIE9ic2lkaWFuIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIG9mIHRoZSBPYnNpZGlhbiBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5Db25maWdGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBjb21tdW5pdHkgcGx1Z2luIHRvIGVuYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8vIFRoZSBgbnBtIHJ1biBkZXZgLW93bmVkIE9ic2lkaWFuIGluc3RhbmNlOiBsYXVuY2hlZCBvbiB0aGUgZmlyc3QgcmVidWlsZCBhbmQgcmV1c2VkIGFjcm9zcyByZWJ1aWxkcy5cbi8vIEl0IGlzIGNsb3NlZCB3aGVuIHRoZSBgbnBtIHJ1biBkZXZgIHByb2Nlc3MgdGVybWluYXRlcyAoc2VlIGByZWdpc3RlckRldkluc3RhbmNlQ2xlYW51cGApLlxubGV0IGRldkluc3RhbmNlVHJhbnNwb3J0UHJvbWlzZTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4gfCB1bmRlZmluZWQ7XG5sZXQgaXNEZXZJbnN0YW5jZUNsZWFudXBSZWdpc3RlcmVkID0gZmFsc2U7XG5sZXQgaXNEZXZJbnN0YW5jZURpc3Bvc2VkID0gZmFsc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IGNvcGllcyB0aGUgYnVpbGQgb3V0cHV0IHRvIHRoZSBPYnNpZGlhbiBwbHVnaW5zIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luKHBhcmFtczogQ29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luUGFyYW1zKTogUGx1Z2luIHtcbiAgY29uc3Qge1xuICAgIGRpc3RGb2xkZXIsXG4gICAgaXNQcm9kdWN0aW9uQnVpbGQsXG4gICAgcGx1Z2luTmFtZVxuICB9ID0gcGFyYW1zO1xuICBsZXQge1xuICAgIG9ic2lkaWFuQ29uZmlnRm9sZGVyXG4gIH0gPSBwYXJhbXM7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2NvcHktdG8tb2JzaWRpYW4tcGx1Z2lucy1mb2xkZXInLFxuICAgIHNldHVwKGJ1aWxkKTogdm9pZCB7XG4gICAgICBidWlsZC5vbkVuZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChpc1Byb2R1Y3Rpb25CdWlsZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb2JzaWRpYW5Db25maWdGb2xkZXIpIHtcbiAgICAgICAgICBnZXRMaWJEZWJ1Z2dlcignY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luJykoXG4gICAgICAgICAgICAnTm8gT2JzaWRpYW4gY29uZmlnIGZvbGRlciBjb25maWd1cmVkLiBgT0JTSURJQU5fQ09ORklHX0ZPTERFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBpbiBzeXN0ZW0gb3IgaW4gYC5lbnZgIGZpbGUuIFRoZSBjb21waWxlZCBwbHVnaW4gd2lsbCBub3QgYmUgY29waWVkIGludG8gT2JzaWRpYW4gcGx1Z2lucyBmb2xkZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzaWRpYW5Db25maWdGb2xkZXIgPSB0b1Bvc2l4UGF0aChvYnNpZGlhbkNvbmZpZ0ZvbGRlcik7XG5cbiAgICAgICAgY29uc3QgcGx1Z2luRm9sZGVyID0gam9pbihvYnNpZGlhbkNvbmZpZ0ZvbGRlciwgJ3BsdWdpbnMnLCBwbHVnaW5OYW1lKTtcblxuICAgICAgICBpZiAoIWV4aXN0c1N5bmMocGx1Z2luRm9sZGVyKSkge1xuICAgICAgICAgIGF3YWl0IG1rZGlyKHBsdWdpbkZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBjcChkaXN0Rm9sZGVyLCBwbHVnaW5Gb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAgIGNvbnN0IGhvdFJlbG9hZEZvbGRlciA9IGpvaW4ob2JzaWRpYW5Db25maWdGb2xkZXIsICdwbHVnaW5zL2hvdC1yZWxvYWQnKTtcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKGhvdFJlbG9hZEZvbGRlcikpIHtcbiAgICAgICAgICBhd2FpdCBta2Rpcihob3RSZWxvYWRGb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnN0IGhvdFJlbG9hZFJlcG9VcmwgPSAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3BqZWJ5L2hvdC1yZWxvYWQvbWFzdGVyLyc7XG4gICAgICAgICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBbJ21haW4uanMnLCAnbWFuaWZlc3QuanNvbiddKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVXJsID0gaG90UmVsb2FkUmVwb1VybCArIGZpbGVOYW1lO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBXZSBydW4gdGhpcyBvdXRzaWRlIG9mIE9ic2lkaWFuLCBzbyB3ZSBkb24ndCBoYXZlIGByZXF1ZXN0VXJsKClgLlxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmaWxlVXJsKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihob3RSZWxvYWRGb2xkZXIsIGZpbGVOYW1lKSwgdGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHtcbiAgICAgICAgICBvYnNpZGlhbkNvbmZpZ0ZvbGRlcixcbiAgICAgICAgICBwbHVnaW5JZDogJ2hvdC1yZWxvYWQnXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4oe1xuICAgICAgICAgIG9ic2lkaWFuQ29uZmlnRm9sZGVyLFxuICAgICAgICAgIHBsdWdpbklkOiBwbHVnaW5OYW1lXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIGluIHRoZSBPYnNpZGlhbiBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZW5hYmxpbmcgdGhlIGNvbW11bml0eSBwbHVnaW4uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyBlbmFibGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBvYnNpZGlhbkNvbmZpZ0ZvbGRlciwgcGx1Z2luSWQgfSA9IHBhcmFtcztcbiAgY29uc3QgY29tbXVuaXR5UGx1Z2luc1BhdGggPSBqb2luKG9ic2lkaWFuQ29uZmlnRm9sZGVyLCAnY29tbXVuaXR5LXBsdWdpbnMuanNvbicpO1xuICBsZXQgcGx1Z2luczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKGV4aXN0c1N5bmMoY29tbXVuaXR5UGx1Z2luc1BhdGgpKSB7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGNvbW11bml0eVBsdWdpbnNQYXRoLCAndXRmLTgnKTtcbiAgICBwbHVnaW5zID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGlmICghcGx1Z2lucy5pbmNsdWRlcyhwbHVnaW5JZCkpIHtcbiAgICBwbHVnaW5zLnB1c2gocGx1Z2luSWQpO1xuICAgIGNvbnN0IEpTT05fSU5ERU5UID0gMjtcbiAgICBhd2FpdCB3cml0ZUZpbGUoY29tbXVuaXR5UGx1Z2luc1BhdGgsIEpTT04uc3RyaW5naWZ5KHBsdWdpbnMsIG51bGwsIEpTT05fSU5ERU5UKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICBjb25zdCB2YXVsdFBhdGggPSBkaXJuYW1lKG9ic2lkaWFuQ29uZmlnRm9sZGVyKTtcblxuICAvLyBMaXZlLWVuYWJsaW5nIGlzIGJlc3QtZWZmb3J0OiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAsIHNvIGl0IGlzIGVuYWJsZWQgb24gdGhlIG5leHQgdmF1bHQgb3BlbiBldmVuIGlmIHRoaXMgZmFpbHMgKGFuZCBob3QtcmVsb2FkIHBpY2tzIHVwIHJlYnVpbGRzIG1lYW53aGlsZSkuXG4gIHRyeSB7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgZ2V0T3JMYXVuY2hEZXZJbnN0YW5jZSh2YXVsdFBhdGgpO1xuICAgIGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICAgIGFyZ3M6IHsgcGx1Z2luSWQgfSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3cgLS0gTm8gYWN0dWFsIHNoYWRvd2luZyBhcyB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZXh0ZXJuYWxseS5cbiAgICAgIGFzeW5jIGZuKHsgYXBwLCBwbHVnaW5JZCB9KSB7XG4gICAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xuICAgICAgfSxcbiAgICAgIHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3M6IHRydWUsXG4gICAgICB0cmFuc3BvcnQsXG4gICAgICB2YXVsdFBhdGhcbiAgICB9KTtcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIGdldExpYkRlYnVnZ2VyKCdjb3B5VG9PYnNpZGlhblBsdWdpbnNGb2xkZXJQbHVnaW4nKShgRmFpbGVkIHRvIGxpdmUtZW5hYmxlIHBsdWdpbiAnJHtwbHVnaW5JZH0nLiBJdCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIG5leHQgdmF1bHQgb3Blbi5gLCBlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGBucG0gcnVuIGRldmAtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiB2YXVsdCwgbGF1bmNoaW5nIGl0IG9uIGZpcnN0IHVzZSBhbmRcbiAqIHJldXNpbmcgaXQgb24gc3Vic2VxdWVudCByZWJ1aWxkcy5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlciB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBvd25lZCB7QGxpbmsgT2JzaWRpYW5UcmFuc3BvcnR9LlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRPckxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBkZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2UgPz89IGxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGRldkluc3RhbmNlVHJhbnNwb3J0UHJvbWlzZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIENsZWFyIHRoZSBjYWNoZSBzbyBhIGxhdGVyIHJlYnVpbGQgcmV0cmllcyB0aGUgbGF1bmNoLlxuICAgIGRldkluc3RhbmNlVHJhbnNwb3J0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICogTGF1bmNoZXMgYSBmcmVzaCBvd25lZCBPYnNpZGlhbiBpbnN0YW5jZSAoaXNvbGF0ZWQgdXNlci1kYXRhIGRpcikgYW5kIG9wZW5zIHRoZSBnaXZlbiB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlciB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBsYXVuY2hlZCB7QGxpbmsgT2JzaWRpYW5UcmFuc3BvcnR9LlxuICovXG5hc3luYyBmdW5jdGlvbiBsYXVuY2hEZXZJbnN0YW5jZSh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0cmFuc3BvcnQucmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJhbnNwb3J0LmRpc3Bvc2VTeW5jPy4oKTtcbiAgICB0aHJvdyBlO1xuICB9XG4gIHJlZ2lzdGVyRGV2SW5zdGFuY2VDbGVhbnVwKHRyYW5zcG9ydCk7XG4gIHJldHVybiB0cmFuc3BvcnQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHByb2Nlc3MtZXhpdCBhbmQgc2lnbmFsIGhhbmRsZXJzIChvbmNlKSB0aGF0IHN5bmNocm9ub3VzbHkgY2xvc2UgdGhlIG93bmVkIE9ic2lkaWFuXG4gKiBpbnN0YW5jZSB3aGVuIHRoZSBgbnBtIHJ1biBkZXZgIHByb2Nlc3MgdGVybWluYXRlcy5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gVGhlIG93bmVkIHRyYW5zcG9ydCB0byBkaXNwb3NlIG9uIHNodXRkb3duLlxuICovXG5mdW5jdGlvbiByZWdpc3RlckRldkluc3RhbmNlQ2xlYW51cCh0cmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0KTogdm9pZCB7XG4gIGlmIChpc0Rldkluc3RhbmNlQ2xlYW51cFJlZ2lzdGVyZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaXNEZXZJbnN0YW5jZUNsZWFudXBSZWdpc3RlcmVkID0gdHJ1ZTtcblxuICAvLyBgZXhpdGAgY292ZXJzIGFueSBgcHJvY2Vzcy5leGl0KClgLCBidXQgYSBkZWZhdWx0IEN0cmwrQyB0ZXJtaW5hdGVzIFdJVEhPVVQgZmlyaW5nIGBleGl0YCwgc28gdGhlIHNpZ25hbCBoYW5kbGVycyBndWFyYW50ZWUgdGhlIG93bmVkIE9ic2lkaWFuIGlzIGtpbGxlZCBvbiBzaHV0ZG93bi5cbiAgcHJvY2Vzcy5vbignZXhpdCcsIGRpc3Bvc2VEZXZJbnN0YW5jZSk7XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFsnU0lHSFVQJywgJ1NJR0lOVCcsICdTSUdURVJNJ10gYXMgY29uc3QpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBkaXNwb3NlRGV2SW5zdGFuY2UoKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlzcG9zZURldkluc3RhbmNlKCk6IHZvaWQge1xuICAgIGlmIChpc0Rldkluc3RhbmNlRGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXNEZXZJbnN0YW5jZURpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0cmFuc3BvcnQuZGlzcG9zZVN5bmM/LigpO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0EscUJBQTJCO0FBQzNCLHNCQUtPO0FBQ1AsMEJBQW9CO0FBQ3BCLDBDQUdPO0FBRVAsbUJBQStCO0FBQy9CLGtCQUlPO0FBNENQLElBQUk7QUFDSixJQUFJLGlDQUFpQztBQUNyQyxJQUFJLHdCQUF3QjtBQVFyQixTQUFTLGtDQUFrQyxRQUF5RDtB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
262
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9idW5kbGVycy9lc2J1aWxkLWltcGwvY29weS10by1vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgYXV0b21hdGljYWxseSBjb3BpZXMgdGhlIGJ1aWxkIG91dHB1dFxuICogdG8gdGhlIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyIGR1cmluZyBkZXZlbG9wbWVudC4gVGhpcyBwbHVnaW4gaGVscHMgc3RyZWFtbGluZVxuICogdGhlIGRldmVsb3BtZW50IHdvcmtmbG93IGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGxhdGVzdCBidWlsZCBpcyBhbHdheXMgYXZhaWxhYmxlXG4gKiBpbiB0aGUgY29ycmVjdCBPYnNpZGlhbiBmb2xkZXIgZm9yIHRlc3RpbmcgYW5kIHVzZS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gZXNidWlsZCBwbHVnaW4gdGhhdCBjb3BpZXMgYnVpbGQgb3V0cHV0IHRvIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyOyByZXF1aXJlcyBhIGxpdmUgZXNidWlsZCBjb250ZXh0LiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5NYW5pZmVzdCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJztcblxuaW1wb3J0IHtcbiAgY3AsXG4gIG1rZGlyXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zLFxuICBldmFsSW5PYnNpZGlhblxufSBmcm9tICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJztcblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi8uLi8uLi9kZWJ1Zy50cyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBqb2luLFxuICB0b1Bvc2l4UGF0aFxufSBmcm9tICcuLi8uLi8uLi9wYXRoLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2lufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb3B5VG9PYnNpZGlhblBsdWdpbnNGb2xkZXJQbHVnaW5QYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZvbGRlciB3aGVyZSB0aGUgYnVpbHQgZmlsZXMgYXJlIGxvY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBkaXN0Rm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJ1aWxkIGlzIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIG9mIHRoZSBPYnNpZGlhbiBjb25maWd1cmF0aW9uLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBwbHVnaW4gd2lsbCBub3QgY29weSBmaWxlcy5cbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuQ29uZmlnRm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBPYnNpZGlhbiBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZW50cnkgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeSAoYGNvbW11bml0eS1wbHVnaW5zLmpzb25gKS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnkge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkgdGhlIHBsdWdpbiBpcyBwdWJsaXNoZWQgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2Ugd2UgcmVhZC5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkfS5cbiAqL1xuaW50ZXJmYWNlIEluc3RhbGxBbmRFbmFibGVIb3RSZWxvYWRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZvbGRlciBvZiB0aGUgT2JzaWRpYW4gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuQ29uZmlnRm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBidWlsdCBPYnNpZGlhbiBwbHVnaW4gdG8gZW5hYmxlIG9uY2UgSG90UmVsb2FkIGlzIGluIHBsYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vLyBUaGUgYG5wbSBydW4gZGV2YC1vd25lZCBPYnNpZGlhbiBpbnN0YW5jZTogbGF1bmNoZWQgb24gdGhlIGZpcnN0IHJlYnVpbGQgYW5kIHJldXNlZCBhY3Jvc3MgcmVidWlsZHMuXG4vLyBJdCBpcyBjbG9zZWQgd2hlbiB0aGUgYG5wbSBydW4gZGV2YCBwcm9jZXNzIHRlcm1pbmF0ZXMgKHNlZSBgcmVnaXN0ZXJEZXZJbnN0YW5jZUNsZWFudXBgKS5cbmxldCBkZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2U6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHwgdW5kZWZpbmVkO1xubGV0IGlzRGV2SW5zdGFuY2VDbGVhbnVwUmVnaXN0ZXJlZCA9IGZhbHNlO1xubGV0IGlzRGV2SW5zdGFuY2VEaXNwb3NlZCA9IGZhbHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXNidWlsZCBwbHVnaW4gdGhhdCBjb3BpZXMgdGhlIGJ1aWxkIG91dHB1dCB0byB0aGUgT2JzaWRpYW4gcGx1Z2lucyBmb2xkZXIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIGBQbHVnaW5gIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpbihwYXJhbXM6IENvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpblBhcmFtcyk6IFBsdWdpbiB7XG4gIGNvbnN0IHtcbiAgICBkaXN0Rm9sZGVyLFxuICAgIGlzUHJvZHVjdGlvbkJ1aWxkLFxuICAgIHBsdWdpbk5hbWVcbiAgfSA9IHBhcmFtcztcbiAgbGV0IHtcbiAgICBvYnNpZGlhbkNvbmZpZ0ZvbGRlclxuICB9ID0gcGFyYW1zO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdjb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyJyxcbiAgICBzZXR1cChidWlsZCk6IHZvaWQge1xuICAgICAgYnVpbGQub25FbmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoaXNQcm9kdWN0aW9uQnVpbGQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9ic2lkaWFuQ29uZmlnRm9sZGVyKSB7XG4gICAgICAgICAgZ2V0TGliRGVidWdnZXIoJ2NvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpbicpKFxuICAgICAgICAgICAgJ05vIE9ic2lkaWFuIGNvbmZpZyBmb2xkZXIgY29uZmlndXJlZC4gYE9CU0lESUFOX0NPTkZJR19GT0xERVJgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQgaW4gc3lzdGVtIG9yIGluIGAuZW52YCBmaWxlLiBUaGUgY29tcGlsZWQgcGx1Z2luIHdpbGwgbm90IGJlIGNvcGllZCBpbnRvIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyLidcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2lkaWFuQ29uZmlnRm9sZGVyID0gdG9Qb3NpeFBhdGgob2JzaWRpYW5Db25maWdGb2xkZXIpO1xuXG4gICAgICAgIGNvbnN0IHBsdWdpbkZvbGRlciA9IGpvaW4ob2JzaWRpYW5Db25maWdGb2xkZXIsICdwbHVnaW5zJywgcGx1Z2luTmFtZSk7XG4gICAgICAgIGF3YWl0IG1rZGlyKHBsdWdpbkZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGF3YWl0IGNwKGRpc3RGb2xkZXIsIHBsdWdpbkZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgICAgYXdhaXQgaW5zdGFsbEFuZEVuYWJsZUhvdFJlbG9hZCh7XG4gICAgICAgICAgb2JzaWRpYW5Db25maWdGb2xkZXIsXG4gICAgICAgICAgcGx1Z2luTmFtZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBgbnBtIHJ1biBkZXZgLW93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gdmF1bHQsIGxhdW5jaGluZyBpdCBvbiBmaXJzdCB1c2UgYW5kXG4gKiByZXVzaW5nIGl0IG9uIHN1YnNlcXVlbnQgcmVidWlsZHMuXG4gKlxuICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIgdG8gb3Blbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgb3duZWQge0BsaW5rIE9ic2lkaWFuVHJhbnNwb3J0fS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0T3JMYXVuY2hEZXZJbnN0YW5jZSh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgZGV2SW5zdGFuY2VUcmFuc3BvcnRQcm9taXNlID8/PSBsYXVuY2hEZXZJbnN0YW5jZSh2YXVsdFBhdGgpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBkZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2U7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBDbGVhciB0aGUgY2FjaGUgc28gYSBsYXRlciByZWJ1aWxkIHJldHJpZXMgdGhlIGxhdW5jaC5cbiAgICBkZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBIb3RSZWxvYWQgcGx1Z2luIGZyb20gdGhlIG9mZmljaWFsIGNvbW11bml0eSBzdG9yZSAoaWYgbm90IGFscmVhZHkgaW5zdGFsbGVkKSwgZW5hYmxlcyBpdFxuICogKGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQpLCBhbmQgZW5hYmxlcyB0aGUgZnJlc2hseS1idWlsdCBwbHVnaW4gXHUyMDE0IGFsbCB0aHJvdWdoIHRoZSBgbnBtIHJ1biBkZXZgLW93bmVkXG4gKiBPYnNpZGlhbiBpbnN0YW5jZSwgc28gSG90UmVsb2FkIHRoZW4gYXV0by1yZWZyZXNoZXMgdGhlIGRlcGxveWVkIHBsdWdpbiBvbiBldmVyeSByZWJ1aWxkLlxuICpcbiAqIFRoZSBpbnN0YWxsIGdvZXMgdGhyb3VnaCBPYnNpZGlhbidzIG93biBgaW5zdGFsbFBsdWdpbmAgKHRoZSBjb21tdW5pdHktc3RvcmUgbWVjaGFuaXNtKSwgYW5kIGV2ZXJ5IHN0ZXBcbiAqIHJ1bnMgYWdhaW5zdCB0aGUgb3duZWQgaW5zdGFuY2Ugb3ZlciBDRFA7IGFueSBmYWlsdXJlIHN1cmZhY2VzICh0aGUgZGV2IGJ1aWxkIHJlcG9ydHMgaXQpIHJhdGhlciB0aGFuXG4gKiBiZWluZyBzaWxlbnRseSBzd2FsbG93ZWQuXG4gKlxuICogVGhlIGluc3RhbGwtaWYtbWlzc2luZyAvIGVuYWJsZS1pZi1kaXNhYmxlZCBsb2dpYyBiZWxvdyBpbnRlbnRpb25hbGx5IG1pcnJvcnMgdGhlIHB1YmxpY1xuICogYGluc3RhbGxDb21tdW5pdHlQbHVnaW5gIC8gYGVuYWJsZUNvbW11bml0eVBsdWdpbmAgaGVscGVycyBpbiBgc3JjL29ic2lkaWFuL2NvbW11bml0eS1wbHVnaW5zLnRzYC4gSXRcbiAqIGNhbm5vdCBpbXBvcnQgYW5kIGNhbGwgdGhlbTogdGhlIGBmbmAgaXMgc2VyaWFsaXplZCAoYHRvU3RyaW5nKClgKSBhbmQgZXhlY3V0ZWQgaW4gdGhlIHJlbmRlcmVyLCBhbmRcbiAqIHRoaXMgYnVpbGQtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgaXMgYmFyZSBcdTIwMTQgaXQgaGFzIG5vIGRldi11dGlscyBgbGliYCBwcm92aWRlciB3aXJlZCAodGhhdCByZXNvbHZlciBpc1xuICogcmVnaXN0ZXJlZCBvbmx5IGluIHRoZSBpbnRlZ3JhdGlvbi10ZXN0IHNldHVwLCB3aG9zZSBmaXh0dXJlIHB1Ymxpc2hlcyB0aGUgbWVyZ2VkIHN1cmZhY2Ugb24gYHdpbmRvd2ApLFxuICogc28gdGhlIGNsb3N1cmUgaGFzIG5vIGFjY2VzcyB0byB0aGUgbGlicmFyeSBzdXJmYWNlIGFuZCBtdXN0IGlubGluZSB0aGUgZXF1aXZhbGVudCBzdGVwcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBJbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSBIb3RSZWxvYWQgYW5kIHRoZSBidWlsdCBwbHVnaW4gYXJlIGluc3RhbGxlZCBhbmQgZW5hYmxlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFuZEVuYWJsZUhvdFJlbG9hZChwYXJhbXM6IEluc3RhbGxBbmRFbmFibGVIb3RSZWxvYWRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIG9ic2lkaWFuQ29uZmlnRm9sZGVyLFxuICAgIHBsdWdpbk5hbWVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgdmF1bHRQYXRoID0gZGlybmFtZShvYnNpZGlhbkNvbmZpZ0ZvbGRlcik7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IGF3YWl0IGdldE9yTGF1bmNoRGV2SW5zdGFuY2UodmF1bHRQYXRoKTtcbiAgYXdhaXQgZXZhbEluT2JzaWRpYW4oe1xuICAgIGFyZ3M6IHsgcGx1Z2luTmFtZSB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3cgLS0gTm8gYWN0dWFsIHNoYWRvd2luZyBhcyB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZXh0ZXJuYWxseS5cbiAgICBhc3luYyBmbih7IGFwcCwgb2JzaWRpYW5Nb2R1bGUsIHBsdWdpbk5hbWUgfSkge1xuICAgICAgY29uc3QgSE9UX1JFTE9BRF9QTFVHSU5fSUQgPSAnaG90LXJlbG9hZCc7XG4gICAgICBjb25zdCBDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkwgPSAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvSEVBRC9jb21tdW5pdHktcGx1Z2lucy5qc29uJztcbiAgICAgIGNvbnN0IHsgcmVxdWVzdFVybCB9ID0gb2JzaWRpYW5Nb2R1bGU7XG5cbiAgICAgIGlmICghYXBwLnBsdWdpbnMubWFuaWZlc3RzW0hPVF9SRUxPQURfUExVR0lOX0lEXSkge1xuICAgICAgICBjb25zdCByZWdpc3RyeUVudHJpZXMgPSAoYXdhaXQgcmVxdWVzdFVybChDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkwpKS5qc29uIGFzIENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnlbXTtcbiAgICAgICAgY29uc3QgZW50cnkgPSByZWdpc3RyeUVudHJpZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT09IEhPVF9SRUxPQURfUExVR0lOX0lEKTtcbiAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luICcke0hPVF9SRUxPQURfUExVR0lOX0lEfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXRlc3RSZWxlYXNlID0gKGF3YWl0IHJlcXVlc3RVcmwoYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtlbnRyeS5yZXBvfS9yZWxlYXNlcy9sYXRlc3RgKSkuanNvbiBhcyBHaXRIdWJSZWxlYXNlO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gbGF0ZXN0UmVsZWFzZS50YWdfbmFtZTtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSAoYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9naXRodWIuY29tLyR7ZW50cnkucmVwb30vcmVsZWFzZXMvZG93bmxvYWQvJHt2ZXJzaW9ufS9tYW5pZmVzdC5qc29uYCkpLmpzb24gYXMgUGx1Z2luTWFuaWZlc3Q7XG4gICAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW4oZW50cnkucmVwbywgdmVyc2lvbiwgbWFuaWZlc3QpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhIT1RfUkVMT0FEX1BMVUdJTl9JRCkpIHtcbiAgICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShIT1RfUkVMT0FEX1BMVUdJTl9JRCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luTmFtZSk7XG4gICAgfSxcbiAgICBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzOiB0cnVlLFxuICAgIHRyYW5zcG9ydCxcbiAgICB2YXVsdFBhdGhcbiAgfSk7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgYSBmcmVzaCBvd25lZCBPYnNpZGlhbiBpbnN0YW5jZSAoaXNvbGF0ZWQgdXNlci1kYXRhIGRpcikgYW5kIG9wZW5zIHRoZSBnaXZlbiB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlciB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBsYXVuY2hlZCB7QGxpbmsgT2JzaWRpYW5UcmFuc3BvcnR9LlxuICovXG5hc3luYyBmdW5jdGlvbiBsYXVuY2hEZXZJbnN0YW5jZSh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0cmFuc3BvcnQucmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJhbnNwb3J0LmRpc3Bvc2VTeW5jPy4oKTtcbiAgICB0aHJvdyBlO1xuICB9XG4gIHJlZ2lzdGVyRGV2SW5zdGFuY2VDbGVhbnVwKHRyYW5zcG9ydCk7XG4gIHJldHVybiB0cmFuc3BvcnQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHByb2Nlc3MtZXhpdCBhbmQgc2lnbmFsIGhhbmRsZXJzIChvbmNlKSB0aGF0IHN5bmNocm9ub3VzbHkgY2xvc2UgdGhlIG93bmVkIE9ic2lkaWFuXG4gKiBpbnN0YW5jZSB3aGVuIHRoZSBgbnBtIHJ1biBkZXZgIHByb2Nlc3MgdGVybWluYXRlcy5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gVGhlIG93bmVkIHRyYW5zcG9ydCB0byBkaXNwb3NlIG9uIHNodXRkb3duLlxuICovXG5mdW5jdGlvbiByZWdpc3RlckRldkluc3RhbmNlQ2xlYW51cCh0cmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0KTogdm9pZCB7XG4gIGlmIChpc0Rldkluc3RhbmNlQ2xlYW51cFJlZ2lzdGVyZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaXNEZXZJbnN0YW5jZUNsZWFudXBSZWdpc3RlcmVkID0gdHJ1ZTtcblxuICAvLyBgZXhpdGAgY292ZXJzIGFueSBgcHJvY2Vzcy5leGl0KClgLCBidXQgYSBkZWZhdWx0IEN0cmwrQyB0ZXJtaW5hdGVzIFdJVEhPVVQgZmlyaW5nIGBleGl0YCwgc28gdGhlIHNpZ25hbCBoYW5kbGVycyBndWFyYW50ZWUgdGhlIG93bmVkIE9ic2lkaWFuIGlzIGtpbGxlZCBvbiBzaHV0ZG93bi5cbiAgcHJvY2Vzcy5vbignZXhpdCcsIGRpc3Bvc2VEZXZJbnN0YW5jZSk7XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFsnU0lHSFVQJywgJ1NJR0lOVCcsICdTSUdURVJNJ10gYXMgY29uc3QpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBkaXNwb3NlRGV2SW5zdGFuY2UoKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlzcG9zZURldkluc3RhbmNlKCk6IHZvaWQge1xuICAgIGlmIChpc0Rldkluc3RhbmNlRGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXNEZXZJbnN0YW5jZURpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0cmFuc3BvcnQuZGlzcG9zZVN5bmM/LigpO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -133,10 +133,6 @@ const noRestrictedSyntaxRuleEntries = [
133
133
  message: "Do not use definite assignment assertions (!). Initialize the field or make it optional.",
134
134
  selector: "PropertyDefinition[definite=true]"
135
135
  },
136
- {
137
- message: "Do not use definite assignment assertions (!) on abstract fields.",
138
- selector: "TSAbstractPropertyDefinition[definite=true]"
139
- },
140
136
  {
141
137
  message: "Do not use anonymous inline object types. Define a named interface or `type` alias instead.",
142
138
  selector: "TSTypeLiteral:not(TSTypeAliasDeclaration > TSTypeLiteral)"
@@ -178,4 +174,4 @@ const noRestrictedSyntaxRuleEntries = [
178
174
  0 && (module.exports = {
179
175
  noRestrictedSyntaxRuleEntries
180
176
  });
181
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1uby1yZXN0cmljdGVkLXN5bnRheC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIGBuby1yZXN0cmljdGVkLXN5bnRheGAgcnVsZSBlbnRyaWVzIGZvciB0aGUgc2hhcmVkIEVTTGludCBjb25maWcuXG4gKlxuICogRXhwb3J0ZWQgYXMgYSBzdGFuZGFsb25lIGNvbnN0YW50IHNvIGVhY2ggc2VsZWN0b3IgY2FuIGJlIHVuaXQtdGVzdGVkXG4gKiBpbmRlcGVuZGVudGx5IG9mIHRoZSBsYXJnZXIgZGVjbGFyYXRpdmUgY29uZmlnLlxuICovXG5cbi8qKlxuICogQSBzaW5nbGUgYG5vLXJlc3RyaWN0ZWQtc3ludGF4YCBlbnRyeSBwYWlyaW5nIGFuIEVTTGludCBBU1Qgc2VsZWN0b3Igd2l0aCBhXG4gKiBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBwYXR0ZXJuIGlzIGJhbm5lZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cnkge1xuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbWVzc2FnZSBzaG93biB3aGVuIHRoZSBzZWxlY3RvciBtYXRjaGVzLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFU0xpbnQgQVNUIHNlbGVjdG9yIGlkZW50aWZ5aW5nIHRoZSBiYW5uZWQgcGF0dGVybi5cbiAgICovXG4gIHNlbGVjdG9yOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdHJpY3RlZC1zeW50YXggZW50cmllcyBlbmZvcmNlZCBieSB0aGUgc2hhcmVkIEVTTGludCBjb25maWcuXG4gKi9cbmV4cG9ydCBjb25zdCBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllczogcmVhZG9ubHkgTm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJ5W10gPSBbXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHVzZSBkZWZpbml0ZSBhc3NpZ25tZW50IGFzc2VydGlvbnMgKCEpLiBJbml0aWFsaXplIHRoZSBmaWVsZCBvciBtYWtlIGl0IG9wdGlvbmFsLicsXG4gICAgc2VsZWN0b3I6ICdQcm9wZXJ0eURlZmluaXRpb25bZGVmaW5pdGU9dHJ1ZV0nXG4gIH0sXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHVzZSBkZWZpbml0ZSBhc3NpZ25tZW50IGFzc2VydGlvbnMgKCEpIG9uIGFic3RyYWN0IGZpZWxkcy4nLFxuICAgIHNlbGVjdG9yOiAnVFNBYnN0cmFjdFByb3BlcnR5RGVmaW5pdGlvbltkZWZpbml0ZT10cnVlXSdcbiAgfSxcbiAge1xuICAgIG1lc3NhZ2U6ICdEbyBub3QgdXNlIGFub255bW91cyBpbmxpbmUgb2JqZWN0IHR5cGVzLiBEZWZpbmUgYSBuYW1lZCBpbnRlcmZhY2Ugb3IgYHR5cGVgIGFsaWFzIGluc3RlYWQuJyxcbiAgICBzZWxlY3RvcjogJ1RTVHlwZUxpdGVyYWw6bm90KFRTVHlwZUFsaWFzRGVjbGFyYXRpb24gPiBUU1R5cGVMaXRlcmFsKSdcbiAgfSxcbiAge1xuICAgIG1lc3NhZ2U6ICdEbyBub3QgdXNlIGFub255bW91cyBpbmxpbmUgbWFwcGVkIHR5cGVzLiBEZWZpbmUgYSBuYW1lZCBgdHlwZWAgYWxpYXMgaW5zdGVhZC4nLFxuICAgIHNlbGVjdG9yOiAnVFNNYXBwZWRUeXBlOm5vdChUU1R5cGVBbGlhc0RlY2xhcmF0aW9uID4gVFNNYXBwZWRUeXBlKSdcbiAgfSxcbiAge1xuICAgIG1lc3NhZ2U6ICdEbyBub3QgdXNlIGRvdWJsZSB0eXBlIGFzc2VydGlvbnMgKGFzIFggYXMgWSkuJyxcbiAgICBzZWxlY3RvcjogJ1RTQXNFeHByZXNzaW9uID4gVFNBc0V4cHJlc3Npb24nXG4gIH0sXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHVzZSBgYXMgbmV2ZXJgLiBJdCBzaWxlbnRseSBzYXRpc2ZpZXMgdHlwZSBjb25zdHJhaW50cyBieSBjbGFpbWluZyBcInRoaXMgdmFsdWUgaXMgb2YgZXZlcnkgdHlwZVwiIFx1MjAxNCBhbG1vc3QgYWx3YXlzIG1hc2tzIGEgcmVhbCB0eXBlIG1pc21hdGNoLiBGaXggdGhlIHVuZGVybHlpbmcgdHlwZXMgaW5zdGVhZC4nLFxuICAgIHNlbGVjdG9yOiAnVFNBc0V4cHJlc3Npb24gPiBUU05ldmVyS2V5d29yZCdcbiAgfSxcbiAge1xuICAgIG1lc3NhZ2U6ICdEbyBub3QgdXNlIGA8bmV2ZXI+YCB0eXBlIGFzc2VydGlvbnMuIFNhbWUgcmVhc29uaW5nIGFzIGBhcyBuZXZlcmAuJyxcbiAgICBzZWxlY3RvcjogJ1RTVHlwZUFzc2VydGlvbiA+IFRTTmV2ZXJLZXl3b3JkJ1xuICB9LFxuICB7XG4gICAgbWVzc2FnZTogJ0RvIG5vdCB1c2UgXyBwcmVmaXggb24gbWV0aG9kcyBvciBmdW5jdGlvbnMuIFRoZSBfIHByZWZpeCBpcyBmb3IgdW51c2VkIHBhcmFtZXRlcnMgb25seS4nLFxuICAgIHNlbGVjdG9yOiAnTWV0aG9kRGVmaW5pdGlvbltrZXkubmFtZT0vXl8vXTpub3QoW292ZXJyaWRlPXRydWVdKSdcbiAgfSxcbiAge1xuICAgIG1lc3NhZ2U6ICdEbyBub3QgdXNlIF8gcHJlZml4IG9uIG1ldGhvZHMgb3IgZnVuY3Rpb25zLiBUaGUgXyBwcmVmaXggaXMgZm9yIHVudXNlZCBwYXJhbWV0ZXJzIG9ubHkuJyxcbiAgICBzZWxlY3RvcjogJ0Z1bmN0aW9uRGVjbGFyYXRpb25baWQubmFtZT0vXl8vXSdcbiAgfSxcbiAge1xuICAgIG1lc3NhZ2U6ICdEbyBub3QgcmVuYW1lIGltcG9ydHMgd2l0aCBcIk1vY2tcIiBpbiB0aGUgYWxpYXMuIE1vY2sgY2xhc3NlcyBhcmUgdGhlIGNhbm9uaWNhbCB0eXBlcyBcdTIwMTQgdXNlIHRoZSBvcmlnaW5hbCBuYW1lLicsXG4gICAgc2VsZWN0b3I6ICdJbXBvcnRTcGVjaWZpZXJbbG9jYWwubmFtZT0vTW9jay9dOm5vdChbaW1wb3J0ZWQubmFtZT0vTW9jay9dKSdcbiAgfSxcbiAge1xuICAgIG1lc3NhZ2U6ICdEbyBub3QgdXNlIGBkZWNsYXJlYCBvbiBjbGFzcyBwcm9wZXJ0aWVzLiBJbml0aWFsaXplIHRoZSBwcm9wZXJ0eSBvciB1c2UgYSByZWd1bGFyIHR5cGUgYW5ub3RhdGlvbi4nLFxuICAgIHNlbGVjdG9yOiAnUHJvcGVydHlEZWZpbml0aW9uW2RlY2xhcmU9dHJ1ZV0nXG4gIH1cbl07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0Qk8sTUFBTSxnQ0FBd0U7QUFBQSxFQUNuRjtBQUFBLElBQ0UsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLEVBQ1o7QUFBQSxFQUNBO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsRUFDWjtBQUFBLEVBQ0E7QUFBQSxJQUNFLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxFQUNaO0FBQUEsRUFDQTtBQUFBLElBQ0UsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLEVBQ1o7QUFBQSxFQUNBO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsRUFDWjtBQUFBLEVBQ0E7QUFBQSxJQUNFLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxFQUNaO0FBQUEsRUFDQTtBQUFBLElBQ0UsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLEVBQ1o7QUFBQSxFQUNBO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsRUFDWjtBQUFBLEVBQ0E7QUFBQSxJQUNFLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxFQUNaO0FBQUEsRUFDQTtBQUFBLElBQ0UsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLEVBQ1o7QUFBQSxFQUNBO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsRUFDWjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
177
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1uby1yZXN0cmljdGVkLXN5bnRheC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIGBuby1yZXN0cmljdGVkLXN5bnRheGAgcnVsZSBlbnRyaWVzIGZvciB0aGUgc2hhcmVkIEVTTGludCBjb25maWcuXG4gKlxuICogRXhwb3J0ZWQgYXMgYSBzdGFuZGFsb25lIGNvbnN0YW50IHNvIGVhY2ggc2VsZWN0b3IgY2FuIGJlIHVuaXQtdGVzdGVkXG4gKiBpbmRlcGVuZGVudGx5IG9mIHRoZSBsYXJnZXIgZGVjbGFyYXRpdmUgY29uZmlnLlxuICovXG5cbi8qKlxuICogQSBzaW5nbGUgYG5vLXJlc3RyaWN0ZWQtc3ludGF4YCBlbnRyeSBwYWlyaW5nIGFuIEVTTGludCBBU1Qgc2VsZWN0b3Igd2l0aCBhXG4gKiBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBwYXR0ZXJuIGlzIGJhbm5lZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cnkge1xuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbWVzc2FnZSBzaG93biB3aGVuIHRoZSBzZWxlY3RvciBtYXRjaGVzLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFU0xpbnQgQVNUIHNlbGVjdG9yIGlkZW50aWZ5aW5nIHRoZSBiYW5uZWQgcGF0dGVybi5cbiAgICovXG4gIHNlbGVjdG9yOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdHJpY3RlZC1zeW50YXggZW50cmllcyBlbmZvcmNlZCBieSB0aGUgc2hhcmVkIEVTTGludCBjb25maWcuXG4gKi9cbmV4cG9ydCBjb25zdCBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllczogcmVhZG9ubHkgTm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJ5W10gPSBbXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHVzZSBkZWZpbml0ZSBhc3NpZ25tZW50IGFzc2VydGlvbnMgKCEpLiBJbml0aWFsaXplIHRoZSBmaWVsZCBvciBtYWtlIGl0IG9wdGlvbmFsLicsXG4gICAgc2VsZWN0b3I6ICdQcm9wZXJ0eURlZmluaXRpb25bZGVmaW5pdGU9dHJ1ZV0nXG4gIH0sXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHVzZSBhbm9ueW1vdXMgaW5saW5lIG9iamVjdCB0eXBlcy4gRGVmaW5lIGEgbmFtZWQgaW50ZXJmYWNlIG9yIGB0eXBlYCBhbGlhcyBpbnN0ZWFkLicsXG4gICAgc2VsZWN0b3I6ICdUU1R5cGVMaXRlcmFsOm5vdChUU1R5cGVBbGlhc0RlY2xhcmF0aW9uID4gVFNUeXBlTGl0ZXJhbCknXG4gIH0sXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHVzZSBhbm9ueW1vdXMgaW5saW5lIG1hcHBlZCB0eXBlcy4gRGVmaW5lIGEgbmFtZWQgYHR5cGVgIGFsaWFzIGluc3RlYWQuJyxcbiAgICBzZWxlY3RvcjogJ1RTTWFwcGVkVHlwZTpub3QoVFNUeXBlQWxpYXNEZWNsYXJhdGlvbiA+IFRTTWFwcGVkVHlwZSknXG4gIH0sXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHVzZSBkb3VibGUgdHlwZSBhc3NlcnRpb25zIChhcyBYIGFzIFkpLicsXG4gICAgc2VsZWN0b3I6ICdUU0FzRXhwcmVzc2lvbiA+IFRTQXNFeHByZXNzaW9uJ1xuICB9LFxuICB7XG4gICAgbWVzc2FnZTogJ0RvIG5vdCB1c2UgYGFzIG5ldmVyYC4gSXQgc2lsZW50bHkgc2F0aXNmaWVzIHR5cGUgY29uc3RyYWludHMgYnkgY2xhaW1pbmcgXCJ0aGlzIHZhbHVlIGlzIG9mIGV2ZXJ5IHR5cGVcIiBcdTIwMTQgYWxtb3N0IGFsd2F5cyBtYXNrcyBhIHJlYWwgdHlwZSBtaXNtYXRjaC4gRml4IHRoZSB1bmRlcmx5aW5nIHR5cGVzIGluc3RlYWQuJyxcbiAgICBzZWxlY3RvcjogJ1RTQXNFeHByZXNzaW9uID4gVFNOZXZlcktleXdvcmQnXG4gIH0sXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHVzZSBgPG5ldmVyPmAgdHlwZSBhc3NlcnRpb25zLiBTYW1lIHJlYXNvbmluZyBhcyBgYXMgbmV2ZXJgLicsXG4gICAgc2VsZWN0b3I6ICdUU1R5cGVBc3NlcnRpb24gPiBUU05ldmVyS2V5d29yZCdcbiAgfSxcbiAge1xuICAgIG1lc3NhZ2U6ICdEbyBub3QgdXNlIF8gcHJlZml4IG9uIG1ldGhvZHMgb3IgZnVuY3Rpb25zLiBUaGUgXyBwcmVmaXggaXMgZm9yIHVudXNlZCBwYXJhbWV0ZXJzIG9ubHkuJyxcbiAgICBzZWxlY3RvcjogJ01ldGhvZERlZmluaXRpb25ba2V5Lm5hbWU9L15fL106bm90KFtvdmVycmlkZT10cnVlXSknXG4gIH0sXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHVzZSBfIHByZWZpeCBvbiBtZXRob2RzIG9yIGZ1bmN0aW9ucy4gVGhlIF8gcHJlZml4IGlzIGZvciB1bnVzZWQgcGFyYW1ldGVycyBvbmx5LicsXG4gICAgc2VsZWN0b3I6ICdGdW5jdGlvbkRlY2xhcmF0aW9uW2lkLm5hbWU9L15fL10nXG4gIH0sXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHJlbmFtZSBpbXBvcnRzIHdpdGggXCJNb2NrXCIgaW4gdGhlIGFsaWFzLiBNb2NrIGNsYXNzZXMgYXJlIHRoZSBjYW5vbmljYWwgdHlwZXMgXHUyMDE0IHVzZSB0aGUgb3JpZ2luYWwgbmFtZS4nLFxuICAgIHNlbGVjdG9yOiAnSW1wb3J0U3BlY2lmaWVyW2xvY2FsLm5hbWU9L01vY2svXTpub3QoW2ltcG9ydGVkLm5hbWU9L01vY2svXSknXG4gIH0sXG4gIHtcbiAgICBtZXNzYWdlOiAnRG8gbm90IHVzZSBgZGVjbGFyZWAgb24gY2xhc3MgcHJvcGVydGllcy4gSW5pdGlhbGl6ZSB0aGUgcHJvcGVydHkgb3IgdXNlIGEgcmVndWxhciB0eXBlIGFubm90YXRpb24uJyxcbiAgICBzZWxlY3RvcjogJ1Byb3BlcnR5RGVmaW5pdGlvbltkZWNsYXJlPXRydWVdJ1xuICB9XG5dO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNEJPLE1BQU0sZ0NBQXdFO0FBQUEsRUFDbkY7QUFBQSxJQUNFLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxFQUNaO0FBQUEsRUFDQTtBQUFBLElBQ0UsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLEVBQ1o7QUFBQSxFQUNBO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsRUFDWjtBQUFBLEVBQ0E7QUFBQSxJQUNFLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxFQUNaO0FBQUEsRUFDQTtBQUFBLElBQ0UsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLEVBQ1o7QUFBQSxFQUNBO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsRUFDWjtBQUFBLEVBQ0E7QUFBQSxJQUNFLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxFQUNaO0FBQUEsRUFDQTtBQUFBLElBQ0UsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLEVBQ1o7QUFBQSxFQUNBO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsRUFDWjtBQUFBLEVBQ0E7QUFBQSxJQUNFLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxFQUNaO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -125,22 +125,41 @@ var __copyProps = (to, from, except, desc) => {
125
125
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
126
126
  var type_exports = {};
127
127
  __export(type_exports, {
128
- typeAsserter: () => typeAsserter
128
+ TypeAsserter: () => TypeAsserter
129
129
  });
130
130
  module.exports = __toCommonJS(type_exports);
131
131
  var import_object_utils = require('./object-utils.cjs');
132
- function typeAsserter() {
133
- return (0, import_object_utils.castTo)({
134
- assertAllKeys(keys) {
135
- return Object.freeze(keys.slice());
136
- },
137
- assertAllMembers(keys) {
138
- return Object.freeze(keys.slice());
139
- }
140
- });
132
+ class TypeAsserter {
133
+ /**
134
+ * Asserts that all keys of an object type are present in a list of keys.
135
+ *
136
+ * @remarks Only available when `[Type] extends [object]`.
137
+ */
138
+ assertAllKeys;
139
+ /**
140
+ * Asserts that all members of a union type are present in a list of members.
141
+ *
142
+ * @remarks Only available when `[Type] extends [LiteralKey]`.
143
+ */
144
+ assertAllMembers;
145
+ /**
146
+ * Creates a type asserter that captures {@link Type} for compile-time exhaustiveness checks.
147
+ */
148
+ constructor() {
149
+ const assertions = (0, import_object_utils.castTo)({
150
+ assertAllKeys(keys) {
151
+ return Object.freeze(keys.slice());
152
+ },
153
+ assertAllMembers(keys) {
154
+ return Object.freeze(keys.slice());
155
+ }
156
+ });
157
+ this.assertAllKeys = assertions.assertAllKeys;
158
+ this.assertAllMembers = assertions.assertAllMembers;
159
+ }
141
160
  }
142
161
  // Annotate the CommonJS export names for ESM import in node:
143
162
  0 && (module.exports = {
144
- typeAsserter
163
+ TypeAsserter
145
164
  });
146
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3R5cGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUeXBlIHV0aWxpdGllcy5cbiAqL1xuXG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICcuL29iamVjdC11dGlscy50cyc7XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUga2V5cyBvZiBhbiBvYmplY3QgYXMgc3RyaW5ncyBhbmQgYXNzZXJ0cyB0aGF0IGFsbCBrZXlzIGFyZSBwcmVzZW50IGluIGEgbGlzdCBvZiBrZXlzLlxuICpcbiAqIEB0eXBlUGFyYW0gVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAdHlwZVBhcmFtIEtleXMgLSBUaGUgbGlzdCBvZiBrZXlzIHRvIGFzc2VydC5cbiAqL1xuZXhwb3J0IHR5cGUgRXhhY3RLZXlzPFR5cGUgZXh0ZW5kcyBvYmplY3QsIEtleXMgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXT4gPSBFeGFjdE1lbWJlcnM8U3RyaW5nS2V5czxUeXBlPiwgS2V5cz47XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUgbWVtYmVycyBvZiBhIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgdG8gYXNzZXJ0IHRoZSBtZW1iZXJzIG9mLlxuICogQHR5cGVQYXJhbSBLZXlzIC0gVGhlIGxpc3Qgb2YgbWVtYmVycyB0byBhc3NlcnQuXG4gKi9cbmV4cG9ydCB0eXBlIEV4YWN0TWVtYmVyczxcbiAgVHlwZSBleHRlbmRzIExpdGVyYWxLZXksXG4gIEtleXMgZXh0ZW5kcyByZWFkb25seSBMaXRlcmFsS2V5W11cbj4gPSBFeGNsdWRlPEtleXNbbnVtYmVyXSwgVHlwZT4gZXh0ZW5kcyBuZXZlciA/IEV4Y2x1ZGU8VHlwZSwgS2V5c1tudW1iZXJdPiBleHRlbmRzIG5ldmVyID8gRHVwbGljYXRlczxLZXlzPiBleHRlbmRzIFtdID8gS2V5c1xuICAgIDogYEVSUk9SOiBEdXBsaWNhdGUgbWVtYmVyczogJHtUdXBsZVRvQ1NWPER1cGxpY2F0ZXM8S2V5cz4+fWBcbiAgOiBgRVJST1I6IE1pc3NpbmcgbWVtYmVyczogJHtUdXBsZVRvQ1NWPFVuaW9uVG9UdXBsZTxFeGNsdWRlPFR5cGUsIEtleXNbbnVtYmVyXT4+Pn1gXG4gIDogYEVSUk9SOiBJbnZhbGlkIG1lbWJlcnM6ICR7VHVwbGVUb0NTVjxVbmlvblRvVHVwbGU8RXhjbHVkZTxLZXlzW251bWJlcl0sIFR5cGU+Pj59YDtcblxuLyoqXG4gKiBBIHR5cGUgdGhhdCByZXByZXNlbnRzIGEgcmV0dXJuIHZhbHVlIHRoYXQgbWF5IGJlIGB2b2lkYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgdGhhdCBtYXkgYmUgcmV0dXJuZWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGB2b2lkYCByZXR1cm4gdHlwZS5cbmV4cG9ydCB0eXBlIE1heWJlUmV0dXJuPFQ+ID0gVCB8IHZvaWQ7XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICovXG5leHBvcnQgdHlwZSBQcm9wZXJ0eVZhbHVlczxUIGV4dGVuZHMgb2JqZWN0PiA9IFRbU3RyaW5nS2V5czxUPl07XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUga2V5cyBvZiBhbiBvYmplY3QgYXMgc3RyaW5ncy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICovXG5leHBvcnQgdHlwZSBTdHJpbmdLZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0gRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+O1xuXG4vKipcbiAqIEEgaGVscGVyIHRoYXQgY2FwdHVyZXMgYSB0eXBlIHBhcmFtZXRlciBhbmQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgY29tcGlsZS10aW1lIGV4aGF1c3RpdmVuZXNzIGNoZWNrcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFR5cGUgLSBUaGUgY2FwdHVyZWQgdHlwZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogLSBgYXNzZXJ0QWxsS2V5c2AgaXMgYXZhaWxhYmxlIHdoZW4gYFR5cGVgIGlzIGFuIG9iamVjdCB0eXBlLlxuICogLSBgYXNzZXJ0QWxsTWVtYmVyc2AgaXMgYXZhaWxhYmxlIHdoZW4gYFR5cGVgIGlzIGEgbGl0ZXJhbCBrZXkgdW5pb24gKGBzdHJpbmcgfCBudW1iZXJgKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHR5cGUgQSA9IHsgYTogMSwgYjogMiwgYzogMyB9O1xuICogdHlwZUFzc2VydGVyPEE+KCkuYXNzZXJ0QWxsS2V5cyhbJ2EnLCAnYicsICdjJ10pOyAvLyBPS1xuICogdHlwZUFzc2VydGVyPEE+KCkuYXNzZXJ0QWxsS2V5cyhbJ2MnLCAnYScsICdiJ10pOyAvLyBPSywgb3JkZXIgaXMgaWdub3JlZFxuICogdHlwZUFzc2VydGVyPEE+KCkuYXNzZXJ0QWxsS2V5cyhbJ2EnLCAnYicsICdjJywgJ2QnXSk7IC8vIEVycm9yOiBJbnZhbGlkIG1lbWJlcnM6IGRcbiAqIHR5cGVBc3NlcnRlcjxBPigpLmFzc2VydEFsbEtleXMoWydhJywgJ2InXSk7IC8vIEVycm9yOiBNaXNzaW5nIG1lbWJlcnM6IGNcbiAqXG4gKiB0eXBlIEIgPSAxIHwgMiB8IDMgfCAnYSc7XG4gKiB0eXBlQXNzZXJ0ZXI8Qj4oKS5hc3NlcnRBbGxNZW1iZXJzKFsxLCAyLCAzLCAnYSddKTsgLy8gT0tcbiAqIHR5cGVBc3NlcnRlcjxCPigpLmFzc2VydEFsbE1lbWJlcnMoWzEsIDIsIDMsICdhJywgNF0pOyAvLyBFcnJvcjogSW52YWxpZCBtZW1iZXJzOiA0XG4gKiB0eXBlQXNzZXJ0ZXI8Qj4oKS5hc3NlcnRBbGxNZW1iZXJzKFsxLCAyLCAzXSk7IC8vIEVycm9yOiBNaXNzaW5nIG1lbWJlcnM6IGFcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVBc3NlcnRlcjxUeXBlPiB7XG4gIC8qKlxuICAgKiBBc3NlcnRzIHRoYXQgYWxsIGtleXMgb2YgYW4gb2JqZWN0IHR5cGUgYXJlIHByZXNlbnQgaW4gYSBsaXN0IG9mIGtleXMuXG4gICAqXG4gICAqIEByZW1hcmtzIE9ubHkgYXZhaWxhYmxlIHdoZW4gYFtUeXBlXSBleHRlbmRzIFtvYmplY3RdYC5cbiAgICovXG4gIGFzc2VydEFsbEtleXM6IFtUeXBlXSBleHRlbmRzIFtvYmplY3RdID8gPGNvbnN0IEtleXMgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXT4oXG4gICAgICBrZXlzOiBFeGFjdE1lbWJlcnM8U3RyaW5nS2V5czxUeXBlPiwgS2V5cz5cbiAgICApID0+IHJlYWRvbmx5IChrZXlvZiBUeXBlKVtdXG4gICAgOiBuZXZlcjtcblxuICAvKipcbiAgICogQXNzZXJ0cyB0aGF0IGFsbCBtZW1iZXJzIG9mIGEgdW5pb24gdHlwZSBhcmUgcHJlc2VudCBpbiBhIGxpc3Qgb2YgbWVtYmVycy5cbiAgICpcbiAgICogQHJlbWFya3MgT25seSBhdmFpbGFibGUgd2hlbiBgW1R5cGVdIGV4dGVuZHMgW0xpdGVyYWxLZXldYC5cbiAgICovXG4gIGFzc2VydEFsbE1lbWJlcnM6IFtUeXBlXSBleHRlbmRzIFtMaXRlcmFsS2V5XSA/IDxjb25zdCBLZXlzIGV4dGVuZHMgcmVhZG9ubHkgTGl0ZXJhbEtleVtdPihcbiAgICAgIGtleXM6IEV4YWN0TWVtYmVyczxUeXBlLCBLZXlzPlxuICAgICkgPT4gcmVhZG9ubHkgVHlwZVtdXG4gICAgOiBuZXZlcjtcbn1cblxudHlwZSBEdXBsaWNhdGVzPFxuICBUIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdLFxuICBTZWVuIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID0gW10sXG4gIEFkZGVkIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID0gW10sXG4gIE91dCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA9IFtdXG4+ID0gVCBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBGaXJzdCwgLi4uaW5mZXIgUmVzdF0gPyBJbmNsdWRlczxTZWVuLCBGaXJzdD4gZXh0ZW5kcyB0cnVlID8gSW5jbHVkZXM8QWRkZWQsIEZpcnN0PiBleHRlbmRzIHRydWUgPyBEdXBsaWNhdGVzPFJlc3QsIFNlZW4sIEFkZGVkLCBPdXQ+XG4gICAgOiBEdXBsaWNhdGVzPFJlc3QsIFNlZW4sIFsuLi5BZGRlZCwgRmlyc3RdLCBbLi4uT3V0LCBGaXJzdF0+XG4gIDogRHVwbGljYXRlczxSZXN0LCBbLi4uU2VlbiwgRmlyc3RdLCBBZGRlZCwgT3V0PlxuICA6IE91dDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMsbm8tbWFnaWMtbnVtYmVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbnR5cGUgRXF1YWw8WCwgWT4gPSAoPFQ+KCkgPT4gVCBleHRlbmRzIFggPyAxIDogMikgZXh0ZW5kcyAoPFQ+KCkgPT4gVCBleHRlbmRzIFkgPyAxIDogMikgPyB0cnVlIDogZmFsc2U7XG5cbnR5cGUgSW5jbHVkZXM8VHlwZSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSwgTWVtYmVyPiA9IFR5cGUgZXh0ZW5kcyByZWFkb25seSBbaW5mZXIgRmlyc3QsIC4uLmluZmVyIFJlc3RdID8gRXF1YWw8Rmlyc3QsIE1lbWJlcj4gZXh0ZW5kcyB0cnVlID8gdHJ1ZSA6IEluY2x1ZGVzPFJlc3QsIE1lbWJlcj5cbiAgOiBmYWxzZTtcblxudHlwZSBMYXN0SW5VbmlvbjxVbmlvbj4gPSBVbmlvblRvSW50ZXJzZWN0aW9uPFVuaW9uIGV4dGVuZHMgdW5rbm93biA/ICgpID0+IFVuaW9uIDogbmV2ZXI+IGV4dGVuZHMgKCkgPT4gaW5mZXIgTGFzdCA/IExhc3QgOiBuZXZlcjtcblxudHlwZSBMaXRlcmFsS2V5ID0gbnVtYmVyIHwgc3RyaW5nO1xuXG50eXBlIFRvU3RyaW5nPFQ+ID0gVCBleHRlbmRzIG51bWJlciB8IHN0cmluZyA/IGAke1R9YCA6IG5ldmVyO1xuXG50eXBlIFR1cGxlVG9DU1Y8VHVwbGUgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10+ID0gVHVwbGUgZXh0ZW5kcyByZWFkb25seSBbaW5mZXIgRmlyc3QsIC4uLmluZmVyIFJlc3RdID8gRmlyc3QgZXh0ZW5kcyBMaXRlcmFsS2V5ID8gUmVzdCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA/IFJlc3RbJ2xlbmd0aCddIGV4dGVuZHMgMCA/IFRvU3RyaW5nPEZpcnN0PiA6IGAke1RvU3RyaW5nPEZpcnN0Pn0sJHtUdXBsZVRvQ1NWPFJlc3Q+fWBcbiAgICA6IG5ldmVyXG4gIDogbmV2ZXJcbiAgOiAnJztcblxudHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFVuaW9uPiA9IChVbmlvbiBleHRlbmRzIHVua25vd24gPyAoa2V5OiBVbmlvbikgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzIChrZXk6IGluZmVyIEludGVyc2VjdGlvbikgPT4gdm9pZCA/IEludGVyc2VjdGlvbiA6IG5ldmVyO1xuXG50eXBlIFVuaW9uVG9UdXBsZTxVbmlvbiwgTGFzdCA9IExhc3RJblVuaW9uPFVuaW9uPj4gPSBbVW5pb25dIGV4dGVuZHMgW25ldmVyXSA/IFtdIDogWy4uLlVuaW9uVG9UdXBsZTxFeGNsdWRlPFVuaW9uLCBMYXN0Pj4sIExhc3RdO1xuXG4vKipcbiAqIENyZWF0ZXMgYSB0eXBlIGhlbHBlciB0aGF0IGNhcHR1cmVzIGEgdHlwZSBwYXJhbWV0ZXIgZm9yIGNvbXBpbGUtdGltZSBleGhhdXN0aXZlbmVzcyBjaGVja3MuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgdG8gY2FwdHVyZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFR5cGVBc3NlcnRlcn0gd2l0aCBgYXNzZXJ0QWxsS2V5c2AgYW5kIGBhc3NlcnRBbGxNZW1iZXJzYCBtZXRob2RzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogdHlwZSBBID0geyBhOiAxLCBiOiAyLCBjOiAzIH07XG4gKiB0eXBlQXNzZXJ0ZXI8QT4oKS5hc3NlcnRBbGxLZXlzKFsnYScsICdiJywgJ2MnXSk7IC8vIE9LXG4gKiB0eXBlQXNzZXJ0ZXI8QT4oKS5hc3NlcnRBbGxLZXlzKFsnYycsICdhJywgJ2InXSk7IC8vIE9LLCBvcmRlciBpcyBpZ25vcmVkXG4gKlxuICogdHlwZSBCID0gMSB8IDIgfCAzIHwgJ2EnO1xuICogdHlwZUFzc2VydGVyPEI+KCkuYXNzZXJ0QWxsTWVtYmVycyhbMSwgMiwgMywgJ2EnXSk7IC8vIE9LXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRlcjxUeXBlPigpOiBUeXBlQXNzZXJ0ZXI8VHlwZT4ge1xuICByZXR1cm4gY2FzdFRvPFR5cGVBc3NlcnRlcjxUeXBlPj4oe1xuICAgIGFzc2VydEFsbEtleXM8Y29uc3QgS2V5cyBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdPihcbiAgICAgIGtleXM6IEV4YWN0TWVtYmVyczxTdHJpbmdLZXlzPG9iamVjdCAmIFR5cGU+LCBLZXlzPlxuICAgICk6IHJlYWRvbmx5IChrZXlvZiAob2JqZWN0ICYgVHlwZSkpW10ge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUoa2V5cy5zbGljZSgpIGFzIChrZXlvZiAob2JqZWN0ICYgVHlwZSkpW10pO1xuICAgIH0sXG4gICAgYXNzZXJ0QWxsTWVtYmVyczxjb25zdCBLZXlzIGV4dGVuZHMgcmVhZG9ubHkgTGl0ZXJhbEtleVtdPihcbiAgICAgIGtleXM6IEV4YWN0TWVtYmVyczxMaXRlcmFsS2V5ICYgVHlwZSwgS2V5cz5cbiAgICApOiByZWFkb25seSAoTGl0ZXJhbEtleSAmIFR5cGUpW10ge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUoa2V5cy5zbGljZSgpIGFzIChMaXRlcmFsS2V5ICYgVHlwZSlbXSk7XG4gICAgfVxuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLDBCQUF1QjtBQTBJaEIsU0FBUyxlQUF5QztBQUN2RCxhQUFPLDRCQUEyQjtBQUFBLElBQ2hDLGNBQ0UsTUFDb0M7QUFDcEMsYUFBTyxPQUFPLE9BQU8sS0FBSyxNQUFNLENBQThCO0FBQUEsSUFDaEU7QUFBQSxJQUNBLGlCQUNFLE1BQ2dDO0FBQ2hDLGFBQU8sT0FBTyxPQUFPLEtBQUssTUFBTSxDQUEwQjtBQUFBLElBQzVEO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
165
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3R5cGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUeXBlIHV0aWxpdGllcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4vZnVuY3Rpb24udHMnO1xuXG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICcuL29iamVjdC11dGlscy50cyc7XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUga2V5cyBvZiBhbiBvYmplY3QgYXMgc3RyaW5ncyBhbmQgYXNzZXJ0cyB0aGF0IGFsbCBrZXlzIGFyZSBwcmVzZW50IGluIGEgbGlzdCBvZiBrZXlzLlxuICpcbiAqIEB0eXBlUGFyYW0gVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAdHlwZVBhcmFtIEtleXMgLSBUaGUgbGlzdCBvZiBrZXlzIHRvIGFzc2VydC5cbiAqL1xuZXhwb3J0IHR5cGUgRXhhY3RLZXlzPFR5cGUgZXh0ZW5kcyBvYmplY3QsIEtleXMgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXT4gPSBFeGFjdE1lbWJlcnM8U3RyaW5nS2V5czxUeXBlPiwgS2V5cz47XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUgbWVtYmVycyBvZiBhIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgdG8gYXNzZXJ0IHRoZSBtZW1iZXJzIG9mLlxuICogQHR5cGVQYXJhbSBLZXlzIC0gVGhlIGxpc3Qgb2YgbWVtYmVycyB0byBhc3NlcnQuXG4gKi9cbmV4cG9ydCB0eXBlIEV4YWN0TWVtYmVyczxcbiAgVHlwZSBleHRlbmRzIExpdGVyYWxLZXksXG4gIEtleXMgZXh0ZW5kcyByZWFkb25seSBMaXRlcmFsS2V5W11cbj4gPSBFeGNsdWRlPEtleXNbbnVtYmVyXSwgVHlwZT4gZXh0ZW5kcyBuZXZlciA/IEV4Y2x1ZGU8VHlwZSwgS2V5c1tudW1iZXJdPiBleHRlbmRzIG5ldmVyID8gRHVwbGljYXRlczxLZXlzPiBleHRlbmRzIFtdID8gS2V5c1xuICAgIDogYEVSUk9SOiBEdXBsaWNhdGUgbWVtYmVyczogJHtUdXBsZVRvQ1NWPER1cGxpY2F0ZXM8S2V5cz4+fWBcbiAgOiBgRVJST1I6IE1pc3NpbmcgbWVtYmVyczogJHtUdXBsZVRvQ1NWPFVuaW9uVG9UdXBsZTxFeGNsdWRlPFR5cGUsIEtleXNbbnVtYmVyXT4+Pn1gXG4gIDogYEVSUk9SOiBJbnZhbGlkIG1lbWJlcnM6ICR7VHVwbGVUb0NTVjxVbmlvblRvVHVwbGU8RXhjbHVkZTxLZXlzW251bWJlcl0sIFR5cGU+Pj59YDtcblxuLyoqXG4gKiBEZXJpdmVzIGFuIGV2ZW50IG1hcCAoYHsgZXZlbnROYW1lOiBbY2FsbGJhY2tBcmdzXSB9YCkgZnJvbSBhIHR5cGUgZXhwb3NpbmcgYW4gb3ZlcmxvYWRlZCBgb24obmFtZSwgY2FsbGJhY2spYFxuICogbWV0aG9kIFx1MjAxNCBlLmcuIE9ic2lkaWFuJ3MgYFdvcmtzcGFjZWAgLyBgVmF1bHRgIC8gYE1ldGFkYXRhQ2FjaGVgLiBFYWNoIGBvbmAgb3ZlcmxvYWQgYmVjb21lcyBvbmUgZW50cnkga2V5ZWQgYnlcbiAqIHRoZSBldmVudCBuYW1lLCB3aXRoIHRoZSBjYWxsYmFjaydzIHBhcmFtZXRlcnMgYXMgYSBsYWJlbGVkIHR1cGxlOyB0aGUgd2lkZSBgb24obmFtZTogc3RyaW5nLCBcdTIwMjYpYCBjYXRjaC1hbGxcbiAqIG92ZXJsb2FkIGlzIGRyb3BwZWQuIFRoZSBtYXAgYXV0by10cmFja3MgdXBzdHJlYW0gb3ZlcmxvYWRzIChubyBoYW5kLWF1dGhvcmluZykuIEl0IGNhbm5vdCByZWNvbnN0cnVjdFxuICogZ2VudWluZWx5IGdlbmVyaWMgb3ZlcmxvYWRzLCBidXQgT2JzaWRpYW4ncyBldmVudCBvdmVybG9hZHMgYXJlIGFsbCBjb25jcmV0ZSBzdHJpbmctbGl0ZXJhbCBvbmVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIEEgdHlwZSBleHBvc2luZyBhbiBgb24obmFtZSwgY2FsbGJhY2ssIFx1MjAyNilgIG1ldGhvZCAoZS5nLiBhbiBPYnNpZGlhbiBgRXZlbnRzYCBzdWJjbGFzcykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiB0eXBlIFdvcmtzcGFjZUV2ZW50TWFwID0gRXh0cmFjdEV2ZW50TWFwPFdvcmtzcGFjZT47XG4gKiAvLyB7ICdmaWxlLW1lbnUnOiBbbWVudTogTWVudSwgZmlsZTogVEFic3RyYWN0RmlsZSwgc291cmNlOiBzdHJpbmcsIGxlYWY/OiBXb3Jrc3BhY2VMZWFmXTsgXHUyMDI2IH1cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBFeHRyYWN0RXZlbnRNYXA8VCBleHRlbmRzIEV2ZW50c1dpdGhPbj4gPSBVbmlvblRvSW50ZXJzZWN0aW9uPEVudHJ5T2ZPdmVybG9hZDxPdmVybG9hZFVuaW9uPFRbJ29uJ10+Pj47XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIHJldHVybiB2YWx1ZSB0aGF0IG1heSBiZSBgdm9pZGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHRoYXQgbWF5IGJlIHJldHVybmVkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBgdm9pZGAgcmV0dXJuIHR5cGUuXG5leHBvcnQgdHlwZSBNYXliZVJldHVybjxUPiA9IFQgfCB2b2lkO1xuXG4vKipcbiAqIEEgdHlwZSB0aGF0IHJlcHJlc2VudHMgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvcGVydHlWYWx1ZXM8VCBleHRlbmRzIG9iamVjdD4gPSBUW1N0cmluZ0tleXM8VD5dO1xuXG4vKipcbiAqIEEgdHlwZSB0aGF0IHJlcHJlc2VudHMgdGhlIGtleXMgb2YgYW4gb2JqZWN0IGFzIHN0cmluZ3MuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqL1xuZXhwb3J0IHR5cGUgU3RyaW5nS2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IEV4dHJhY3Q8a2V5b2YgVCwgc3RyaW5nPjtcblxudHlwZSBEdXBsaWNhdGVzPFxuICBUIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdLFxuICBTZWVuIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID0gW10sXG4gIEFkZGVkIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID0gW10sXG4gIE91dCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA9IFtdXG4+ID0gVCBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBGaXJzdCwgLi4uaW5mZXIgUmVzdF0gPyBJbmNsdWRlczxTZWVuLCBGaXJzdD4gZXh0ZW5kcyB0cnVlID8gSW5jbHVkZXM8QWRkZWQsIEZpcnN0PiBleHRlbmRzIHRydWUgPyBEdXBsaWNhdGVzPFJlc3QsIFNlZW4sIEFkZGVkLCBPdXQ+XG4gICAgOiBEdXBsaWNhdGVzPFJlc3QsIFNlZW4sIFsuLi5BZGRlZCwgRmlyc3RdLCBbLi4uT3V0LCBGaXJzdF0+XG4gIDogRHVwbGljYXRlczxSZXN0LCBbLi4uU2VlbiwgRmlyc3RdLCBBZGRlZCwgT3V0PlxuICA6IE91dDtcblxuLy8gTWFwcyBvbmUgYG9uKG5hbWUsIGNhbGxiYWNrLCBcdTIwMjYpYCBvdmVybG9hZCB0byBhIGB7IFtuYW1lXTogW2NhbGxiYWNrQXJnc10gfWAgZW50cnk7IGRyb3BzIHRoZSB3aWRlIGBuYW1lOiBzdHJpbmdgIGNhdGNoLWFsbC5cbnR5cGUgRW50cnlPZk92ZXJsb2FkPFRPdmVybG9hZD4gPSBUT3ZlcmxvYWQgZXh0ZW5kcyAobmFtZTogaW5mZXIgTmFtZSwgY2FsbGJhY2s6ICguLi5hcmdzOiBpbmZlciBBcmdzKSA9PiB1bmtub3duLCAuLi5yZXN0OiBuZXZlcltdKSA9PiB1bmtub3duID8gTmFtZSBleHRlbmRzIHN0cmluZyA/IHN0cmluZyBleHRlbmRzIE5hbWUgPyBuZXZlciA6IFJlY29yZDxOYW1lLCBBcmdzPlxuICA6IG5ldmVyXG4gIDogbmV2ZXI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzLG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG50eXBlIEVxdWFsPFgsIFk+ID0gKDxUPigpID0+IFQgZXh0ZW5kcyBYID8gMSA6IDIpIGV4dGVuZHMgKDxUPigpID0+IFQgZXh0ZW5kcyBZID8gMSA6IDIpID8gdHJ1ZSA6IGZhbHNlO1xuXG4vLyBUaGUgbWluaW1hbCBzaGFwZSB7QGxpbmsgRXh0cmFjdEV2ZW50TWFwfSBvcGVyYXRlcyBvbjogYSB0eXBlIGV4cG9zaW5nIGFuIG92ZXJsb2FkZWQgYG9uYCBtZXRob2QuXG5pbnRlcmZhY2UgRXZlbnRzV2l0aE9uIHtcbiAgb246IEdlbmVyaWNGdW5jdGlvbjtcbn1cblxudHlwZSBJbmNsdWRlczxUeXBlIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdLCBNZW1iZXI+ID0gVHlwZSBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBGaXJzdCwgLi4uaW5mZXIgUmVzdF0gPyBFcXVhbDxGaXJzdCwgTWVtYmVyPiBleHRlbmRzIHRydWUgPyB0cnVlIDogSW5jbHVkZXM8UmVzdCwgTWVtYmVyPlxuICA6IGZhbHNlO1xuXG50eXBlIExhc3RJblVuaW9uPFVuaW9uPiA9IFVuaW9uVG9JbnRlcnNlY3Rpb248VW5pb24gZXh0ZW5kcyB1bmtub3duID8gKCkgPT4gVW5pb24gOiBuZXZlcj4gZXh0ZW5kcyAoKSA9PiBpbmZlciBMYXN0ID8gTGFzdCA6IG5ldmVyO1xuXG50eXBlIExpdGVyYWxLZXkgPSBudW1iZXIgfCBzdHJpbmc7XG5cbi8vIFNwbGl0cyBhbiBvdmVybG9hZGVkIGNhbGwgc2lnbmF0dXJlIGludG8gYSB1bmlvbiBvZiBpdHMgaW5kaXZpZHVhbCBjYWxsIHNpZ25hdHVyZXMgKGEgd2VsbC1rbm93biBvdmVybG9hZC10by11bmlvbiB0cmljaykuXG4vKiBlc2xpbnQtZGlzYWJsZSBwZXJmZWN0aW9uaXN0L3NvcnQtaW50ZXJzZWN0aW9uLXR5cGVzLCBwZXJmZWN0aW9uaXN0L3NvcnQtdW5pb24tdHlwZXMsIEBzdHlsaXN0aWMvb3BlcmF0b3ItbGluZWJyZWFrIC0tIFRoZSBPdmVybG9hZFVuaW9uIHJlY3Vyc2lvbiByZWxpZXMgb24gdGhpcyBleGFjdCBvcGVyYW5kIG9yZGVyOyByZW9yZGVyaW5nIGJyZWFrcyB0ZXJtaW5hdGlvbiAoVFMyNTg5KSwgYW5kIHRoZSBsaW5lLWJyZWFrIHNoYXBlIGlzIGxlZnQgdG8gZHByaW50LiAqL1xudHlwZSBPdmVybG9hZFVuaW9uPFRPdmVybG9hZCBleHRlbmRzIEdlbmVyaWNGdW5jdGlvbj4gPSBFeGNsdWRlPFxuICBPdmVybG9hZFVuaW9uUmVjdXJzaXZlPCgoKSA9PiBuZXZlcikgJiBUT3ZlcmxvYWQ+LFxuICBUT3ZlcmxvYWQgZXh0ZW5kcyAoKSA9PiBuZXZlciA/IG5ldmVyIDogKCkgPT4gbmV2ZXJcbj47XG5cbnR5cGUgT3ZlcmxvYWRVbmlvblJlY3Vyc2l2ZTxUT3ZlcmxvYWQsIFRQYXJ0aWFsT3ZlcmxvYWQgPSB1bmtub3duPiA9IFRPdmVybG9hZCBleHRlbmRzICguLi5hcmdzOiBpbmZlciBBcmdzKSA9PiBpbmZlciBSZXR1cm4gPyBUUGFydGlhbE92ZXJsb2FkIGV4dGVuZHMgVE92ZXJsb2FkID8gbmV2ZXJcbiAgOlxuICAgIHwgT3ZlcmxvYWRVbmlvblJlY3Vyc2l2ZTxUUGFydGlhbE92ZXJsb2FkICYgVE92ZXJsb2FkLCBUUGFydGlhbE92ZXJsb2FkICYgKCguLi5hcmdzOiBBcmdzKSA9PiBSZXR1cm4pICYgUGljazxUT3ZlcmxvYWQsIGtleW9mIFRPdmVybG9hZD4+XG4gICAgfCAoKC4uLmFyZ3M6IEFyZ3MpID0+IFJldHVybilcbiAgOiBuZXZlcjtcbi8qIGVzbGludC1lbmFibGUgcGVyZmVjdGlvbmlzdC9zb3J0LWludGVyc2VjdGlvbi10eXBlcywgcGVyZmVjdGlvbmlzdC9zb3J0LXVuaW9uLXR5cGVzLCBAc3R5bGlzdGljL29wZXJhdG9yLWxpbmVicmVhayAtLSBUaGUgT3ZlcmxvYWRVbmlvbiByZWN1cnNpb24gcmVsaWVzIG9uIHRoaXMgZXhhY3Qgb3BlcmFuZCBvcmRlcjsgcmVvcmRlcmluZyBicmVha3MgdGVybWluYXRpb24gKFRTMjU4OSksIGFuZCB0aGUgbGluZS1icmVhayBzaGFwZSBpcyBsZWZ0IHRvIGRwcmludC4gKi9cblxudHlwZSBUb1N0cmluZzxUPiA9IFQgZXh0ZW5kcyBudW1iZXIgfCBzdHJpbmcgPyBgJHtUfWAgOiBuZXZlcjtcblxudHlwZSBUdXBsZVRvQ1NWPFR1cGxlIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdPiA9IFR1cGxlIGV4dGVuZHMgcmVhZG9ubHkgW2luZmVyIEZpcnN0LCAuLi5pbmZlciBSZXN0XSA/IEZpcnN0IGV4dGVuZHMgTGl0ZXJhbEtleSA/IFJlc3QgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gPyBSZXN0WydsZW5ndGgnXSBleHRlbmRzIDAgPyBUb1N0cmluZzxGaXJzdD4gOiBgJHtUb1N0cmluZzxGaXJzdD59LCR7VHVwbGVUb0NTVjxSZXN0Pn1gXG4gICAgOiBuZXZlclxuICA6IG5ldmVyXG4gIDogJyc7XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIHNoYXBlcyBmb3Ige0BsaW5rIFR5cGVBc3NlcnRlcn06IGEgY29uZGl0aW9uYWwgdHlwZSBkaXNhYmxlcyBlYWNoIG1ldGhvZCB3aGVuIHRoZVxuICogY2FwdHVyZWQgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IGl0LlxuICpcbiAqIEB0eXBlUGFyYW0gVHlwZSAtIFRoZSBjYXB0dXJlZCB0eXBlLlxuICovXG5pbnRlcmZhY2UgVHlwZUFzc2VydGlvbnM8VHlwZT4ge1xuICBhc3NlcnRBbGxLZXlzOiBbVHlwZV0gZXh0ZW5kcyBbb2JqZWN0XSA/IDxjb25zdCBLZXlzIGV4dGVuZHMgcmVhZG9ubHkgc3RyaW5nW10+KFxuICAgICAga2V5czogRXhhY3RNZW1iZXJzPFN0cmluZ0tleXM8VHlwZT4sIEtleXM+XG4gICAgKSA9PiByZWFkb25seSAoa2V5b2YgVHlwZSlbXVxuICAgIDogbmV2ZXI7XG4gIGFzc2VydEFsbE1lbWJlcnM6IFtUeXBlXSBleHRlbmRzIFtMaXRlcmFsS2V5XSA/IDxjb25zdCBLZXlzIGV4dGVuZHMgcmVhZG9ubHkgTGl0ZXJhbEtleVtdPihcbiAgICAgIGtleXM6IEV4YWN0TWVtYmVyczxUeXBlLCBLZXlzPlxuICAgICkgPT4gcmVhZG9ubHkgVHlwZVtdXG4gICAgOiBuZXZlcjtcbn1cblxudHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFVuaW9uPiA9IChVbmlvbiBleHRlbmRzIHVua25vd24gPyAoa2V5OiBVbmlvbikgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzIChrZXk6IGluZmVyIEludGVyc2VjdGlvbikgPT4gdm9pZCA/IEludGVyc2VjdGlvbiA6IG5ldmVyO1xuXG50eXBlIFVuaW9uVG9UdXBsZTxVbmlvbiwgTGFzdCA9IExhc3RJblVuaW9uPFVuaW9uPj4gPSBbVW5pb25dIGV4dGVuZHMgW25ldmVyXSA/IFtdIDogWy4uLlVuaW9uVG9UdXBsZTxFeGNsdWRlPFVuaW9uLCBMYXN0Pj4sIExhc3RdO1xuXG4vKipcbiAqIEEgaGVscGVyIHRoYXQgY2FwdHVyZXMgYSB0eXBlIHBhcmFtZXRlciBhbmQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgY29tcGlsZS10aW1lIGV4aGF1c3RpdmVuZXNzIGNoZWNrcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFR5cGUgLSBUaGUgY2FwdHVyZWQgdHlwZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogLSBgYXNzZXJ0QWxsS2V5c2AgaXMgYXZhaWxhYmxlIHdoZW4gYFR5cGVgIGlzIGFuIG9iamVjdCB0eXBlLlxuICogLSBgYXNzZXJ0QWxsTWVtYmVyc2AgaXMgYXZhaWxhYmxlIHdoZW4gYFR5cGVgIGlzIGEgbGl0ZXJhbCBrZXkgdW5pb24gKGBzdHJpbmcgfCBudW1iZXJgKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHR5cGUgQSA9IHsgYTogMSwgYjogMiwgYzogMyB9O1xuICogbmV3IFR5cGVBc3NlcnRlcjxBPigpLmFzc2VydEFsbEtleXMoWydhJywgJ2InLCAnYyddKTsgLy8gT0tcbiAqIG5ldyBUeXBlQXNzZXJ0ZXI8QT4oKS5hc3NlcnRBbGxLZXlzKFsnYycsICdhJywgJ2InXSk7IC8vIE9LLCBvcmRlciBpcyBpZ25vcmVkXG4gKiBuZXcgVHlwZUFzc2VydGVyPEE+KCkuYXNzZXJ0QWxsS2V5cyhbJ2EnLCAnYicsICdjJywgJ2QnXSk7IC8vIEVycm9yOiBJbnZhbGlkIG1lbWJlcnM6IGRcbiAqIG5ldyBUeXBlQXNzZXJ0ZXI8QT4oKS5hc3NlcnRBbGxLZXlzKFsnYScsICdiJ10pOyAvLyBFcnJvcjogTWlzc2luZyBtZW1iZXJzOiBjXG4gKlxuICogdHlwZSBCID0gMSB8IDIgfCAzIHwgJ2EnO1xuICogbmV3IFR5cGVBc3NlcnRlcjxCPigpLmFzc2VydEFsbE1lbWJlcnMoWzEsIDIsIDMsICdhJ10pOyAvLyBPS1xuICogbmV3IFR5cGVBc3NlcnRlcjxCPigpLmFzc2VydEFsbE1lbWJlcnMoWzEsIDIsIDMsICdhJywgNF0pOyAvLyBFcnJvcjogSW52YWxpZCBtZW1iZXJzOiA0XG4gKiBuZXcgVHlwZUFzc2VydGVyPEI+KCkuYXNzZXJ0QWxsTWVtYmVycyhbMSwgMiwgM10pOyAvLyBFcnJvcjogTWlzc2luZyBtZW1iZXJzOiBhXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVBc3NlcnRlcjxUeXBlPiB7XG4gIC8qKlxuICAgKiBBc3NlcnRzIHRoYXQgYWxsIGtleXMgb2YgYW4gb2JqZWN0IHR5cGUgYXJlIHByZXNlbnQgaW4gYSBsaXN0IG9mIGtleXMuXG4gICAqXG4gICAqIEByZW1hcmtzIE9ubHkgYXZhaWxhYmxlIHdoZW4gYFtUeXBlXSBleHRlbmRzIFtvYmplY3RdYC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhc3NlcnRBbGxLZXlzOiBUeXBlQXNzZXJ0aW9uczxUeXBlPlsnYXNzZXJ0QWxsS2V5cyddO1xuXG4gIC8qKlxuICAgKiBBc3NlcnRzIHRoYXQgYWxsIG1lbWJlcnMgb2YgYSB1bmlvbiB0eXBlIGFyZSBwcmVzZW50IGluIGEgbGlzdCBvZiBtZW1iZXJzLlxuICAgKlxuICAgKiBAcmVtYXJrcyBPbmx5IGF2YWlsYWJsZSB3aGVuIGBbVHlwZV0gZXh0ZW5kcyBbTGl0ZXJhbEtleV1gLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFzc2VydEFsbE1lbWJlcnM6IFR5cGVBc3NlcnRpb25zPFR5cGU+Wydhc3NlcnRBbGxNZW1iZXJzJ107XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0eXBlIGFzc2VydGVyIHRoYXQgY2FwdHVyZXMge0BsaW5rIFR5cGV9IGZvciBjb21waWxlLXRpbWUgZXhoYXVzdGl2ZW5lc3MgY2hlY2tzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSBjYXN0VG88VHlwZUFzc2VydGlvbnM8VHlwZT4+KHtcbiAgICAgIGFzc2VydEFsbEtleXM8Y29uc3QgS2V5cyBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdPihcbiAgICAgICAga2V5czogRXhhY3RNZW1iZXJzPFN0cmluZ0tleXM8b2JqZWN0ICYgVHlwZT4sIEtleXM+XG4gICAgICApOiByZWFkb25seSAoa2V5b2YgKG9iamVjdCAmIFR5cGUpKVtdIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUoa2V5cy5zbGljZSgpIGFzIChrZXlvZiAob2JqZWN0ICYgVHlwZSkpW10pO1xuICAgICAgfSxcbiAgICAgIGFzc2VydEFsbE1lbWJlcnM8Y29uc3QgS2V5cyBleHRlbmRzIHJlYWRvbmx5IExpdGVyYWxLZXlbXT4oXG4gICAgICAgIGtleXM6IEV4YWN0TWVtYmVyczxMaXRlcmFsS2V5ICYgVHlwZSwgS2V5cz5cbiAgICAgICk6IHJlYWRvbmx5IChMaXRlcmFsS2V5ICYgVHlwZSlbXSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZnJlZXplKGtleXMuc2xpY2UoKSBhcyAoTGl0ZXJhbEtleSAmIFR5cGUpW10pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYXNzZXJ0QWxsS2V5cyA9IGFzc2VydGlvbnMuYXNzZXJ0QWxsS2V5cztcbiAgICB0aGlzLmFzc2VydEFsbE1lbWJlcnMgPSBhc3NlcnRpb25zLmFzc2VydEFsbE1lbWJlcnM7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLDBCQUF1QjtBQThKaEIsTUFBTSxhQUFtQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1kO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtULGNBQWM7QUFDbkIsVUFBTSxpQkFBYSw0QkFBNkI7QUFBQSxNQUM5QyxjQUNFLE1BQ29DO0FBQ3BDLGVBQU8sT0FBTyxPQUFPLEtBQUssTUFBTSxDQUE4QjtBQUFBLE1BQ2hFO0FBQUEsTUFDQSxpQkFDRSxNQUNnQztBQUNoQyxlQUFPLE9BQU8sT0FBTyxLQUFLLE1BQU0sQ0FBMEI7QUFBQSxNQUM1RDtBQUFBLElBQ0YsQ0FBQztBQUNELFNBQUssZ0JBQWdCLFdBQVc7QUFDaEMsU0FBSyxtQkFBbUIsV0FBVztBQUFBLEVBQ3JDO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -4,6 +4,7 @@
4
4
  *
5
5
  * Type utilities.
6
6
  */
7
+ import type { GenericFunction } from './function.cjs';
7
8
  /**
8
9
  * A type that represents the keys of an object as strings and asserts that all keys are present in a list of keys.
9
10
  *
@@ -18,6 +19,22 @@ export type ExactKeys<Type extends object, Keys extends readonly string[]> = Exa
18
19
  * @typeParam Keys - The list of members to assert.
19
20
  */
20
21
  export type ExactMembers<Type extends LiteralKey, Keys extends readonly LiteralKey[]> = Exclude<Keys[number], Type> extends never ? Exclude<Type, Keys[number]> extends never ? Duplicates<Keys> extends [] ? Keys : `ERROR: Duplicate members: ${TupleToCSV<Duplicates<Keys>>}` : `ERROR: Missing members: ${TupleToCSV<UnionToTuple<Exclude<Type, Keys[number]>>>}` : `ERROR: Invalid members: ${TupleToCSV<UnionToTuple<Exclude<Keys[number], Type>>>}`;
22
+ /**
23
+ * Derives an event map (`{ eventName: [callbackArgs] }`) from a type exposing an overloaded `on(name, callback)`
24
+ * method — e.g. Obsidian's `Workspace` / `Vault` / `MetadataCache`. Each `on` overload becomes one entry keyed by
25
+ * the event name, with the callback's parameters as a labeled tuple; the wide `on(name: string, …)` catch-all
26
+ * overload is dropped. The map auto-tracks upstream overloads (no hand-authoring). It cannot reconstruct
27
+ * genuinely generic overloads, but Obsidian's event overloads are all concrete string-literal ones.
28
+ *
29
+ * @typeParam T - A type exposing an `on(name, callback, …)` method (e.g. an Obsidian `Events` subclass).
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * type WorkspaceEventMap = ExtractEventMap<Workspace>;
34
+ * // { 'file-menu': [menu: Menu, file: TAbstractFile, source: string, leaf?: WorkspaceLeaf]; … }
35
+ * ```
36
+ */
37
+ export type ExtractEventMap<T extends EventsWithOn> = UnionToIntersection<EntryOfOverload<OverloadUnion<T['on']>>>;
21
38
  /**
22
39
  * A type that represents a return value that may be `void`.
23
40
  *
@@ -36,6 +53,31 @@ export type PropertyValues<T extends object> = T[StringKeys<T>];
36
53
  * @typeParam T - The type of the object.
37
54
  */
38
55
  export type StringKeys<T extends object> = Extract<keyof T, string>;
56
+ type Duplicates<T extends readonly unknown[], Seen extends readonly unknown[] = [], Added extends readonly unknown[] = [], Out extends readonly unknown[] = []> = T extends readonly [infer First, ...infer Rest] ? Includes<Seen, First> extends true ? Includes<Added, First> extends true ? Duplicates<Rest, Seen, Added, Out> : Duplicates<Rest, Seen, [...Added, First], [...Out, First]> : Duplicates<Rest, [...Seen, First], Added, Out> : Out;
57
+ type EntryOfOverload<TOverload> = TOverload extends (name: infer Name, callback: (...args: infer Args) => unknown, ...rest: never[]) => unknown ? Name extends string ? string extends Name ? never : Record<Name, Args> : never : never;
58
+ type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;
59
+ interface EventsWithOn {
60
+ on: GenericFunction;
61
+ }
62
+ type Includes<Type extends readonly unknown[], Member> = Type extends readonly [infer First, ...infer Rest] ? Equal<First, Member> extends true ? true : Includes<Rest, Member> : false;
63
+ type LastInUnion<Union> = UnionToIntersection<Union extends unknown ? () => Union : never> extends () => infer Last ? Last : never;
64
+ type LiteralKey = number | string;
65
+ type OverloadUnion<TOverload extends GenericFunction> = Exclude<OverloadUnionRecursive<(() => never) & TOverload>, TOverload extends () => never ? never : () => never>;
66
+ type OverloadUnionRecursive<TOverload, TPartialOverload = unknown> = TOverload extends (...args: infer Args) => infer Return ? TPartialOverload extends TOverload ? never : OverloadUnionRecursive<TPartialOverload & TOverload, TPartialOverload & ((...args: Args) => Return) & Pick<TOverload, keyof TOverload>> | ((...args: Args) => Return) : never;
67
+ type ToString<T> = T extends number | string ? `${T}` : never;
68
+ type TupleToCSV<Tuple extends readonly unknown[]> = Tuple extends readonly [infer First, ...infer Rest] ? First extends LiteralKey ? Rest extends readonly unknown[] ? Rest['length'] extends 0 ? ToString<First> : `${ToString<First>},${TupleToCSV<Rest>}` : never : never : '';
69
+ /**
70
+ * Internal method shapes for {@link TypeAsserter}: a conditional type disables each method when the
71
+ * captured type does not support it.
72
+ *
73
+ * @typeParam Type - The captured type.
74
+ */
75
+ interface TypeAssertions<Type> {
76
+ assertAllKeys: [Type] extends [object] ? <const Keys extends readonly string[]>(keys: ExactMembers<StringKeys<Type>, Keys>) => readonly (keyof Type)[] : never;
77
+ assertAllMembers: [Type] extends [LiteralKey] ? <const Keys extends readonly LiteralKey[]>(keys: ExactMembers<Type, Keys>) => readonly Type[] : never;
78
+ }
79
+ type UnionToIntersection<Union> = (Union extends unknown ? (key: Union) => void : never) extends (key: infer Intersection) => void ? Intersection : never;
80
+ type UnionToTuple<Union, Last = LastInUnion<Union>> = [Union] extends [never] ? [] : [...UnionToTuple<Exclude<Union, Last>>, Last];
39
81
  /**
40
82
  * A helper that captures a type parameter and provides methods for compile-time exhaustiveness checks.
41
83
  *
@@ -48,55 +90,33 @@ export type StringKeys<T extends object> = Extract<keyof T, string>;
48
90
  * @example
49
91
  * ```ts
50
92
  * type A = { a: 1, b: 2, c: 3 };
51
- * typeAsserter<A>().assertAllKeys(['a', 'b', 'c']); // OK
52
- * typeAsserter<A>().assertAllKeys(['c', 'a', 'b']); // OK, order is ignored
53
- * typeAsserter<A>().assertAllKeys(['a', 'b', 'c', 'd']); // Error: Invalid members: d
54
- * typeAsserter<A>().assertAllKeys(['a', 'b']); // Error: Missing members: c
93
+ * new TypeAsserter<A>().assertAllKeys(['a', 'b', 'c']); // OK
94
+ * new TypeAsserter<A>().assertAllKeys(['c', 'a', 'b']); // OK, order is ignored
95
+ * new TypeAsserter<A>().assertAllKeys(['a', 'b', 'c', 'd']); // Error: Invalid members: d
96
+ * new TypeAsserter<A>().assertAllKeys(['a', 'b']); // Error: Missing members: c
55
97
  *
56
98
  * type B = 1 | 2 | 3 | 'a';
57
- * typeAsserter<B>().assertAllMembers([1, 2, 3, 'a']); // OK
58
- * typeAsserter<B>().assertAllMembers([1, 2, 3, 'a', 4]); // Error: Invalid members: 4
59
- * typeAsserter<B>().assertAllMembers([1, 2, 3]); // Error: Missing members: a
99
+ * new TypeAsserter<B>().assertAllMembers([1, 2, 3, 'a']); // OK
100
+ * new TypeAsserter<B>().assertAllMembers([1, 2, 3, 'a', 4]); // Error: Invalid members: 4
101
+ * new TypeAsserter<B>().assertAllMembers([1, 2, 3]); // Error: Missing members: a
60
102
  * ```
61
103
  */
62
- export interface TypeAsserter<Type> {
104
+ export declare class TypeAsserter<Type> {
63
105
  /**
64
106
  * Asserts that all keys of an object type are present in a list of keys.
65
107
  *
66
108
  * @remarks Only available when `[Type] extends [object]`.
67
109
  */
68
- assertAllKeys: [Type] extends [object] ? <const Keys extends readonly string[]>(keys: ExactMembers<StringKeys<Type>, Keys>) => readonly (keyof Type)[] : never;
110
+ readonly assertAllKeys: TypeAssertions<Type>['assertAllKeys'];
69
111
  /**
70
112
  * Asserts that all members of a union type are present in a list of members.
71
113
  *
72
114
  * @remarks Only available when `[Type] extends [LiteralKey]`.
73
115
  */
74
- assertAllMembers: [Type] extends [LiteralKey] ? <const Keys extends readonly LiteralKey[]>(keys: ExactMembers<Type, Keys>) => readonly Type[] : never;
116
+ readonly assertAllMembers: TypeAssertions<Type>['assertAllMembers'];
117
+ /**
118
+ * Creates a type asserter that captures {@link Type} for compile-time exhaustiveness checks.
119
+ */
120
+ constructor();
75
121
  }
76
- type Duplicates<T extends readonly unknown[], Seen extends readonly unknown[] = [], Added extends readonly unknown[] = [], Out extends readonly unknown[] = []> = T extends readonly [infer First, ...infer Rest] ? Includes<Seen, First> extends true ? Includes<Added, First> extends true ? Duplicates<Rest, Seen, Added, Out> : Duplicates<Rest, Seen, [...Added, First], [...Out, First]> : Duplicates<Rest, [...Seen, First], Added, Out> : Out;
77
- type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;
78
- type Includes<Type extends readonly unknown[], Member> = Type extends readonly [infer First, ...infer Rest] ? Equal<First, Member> extends true ? true : Includes<Rest, Member> : false;
79
- type LastInUnion<Union> = UnionToIntersection<Union extends unknown ? () => Union : never> extends () => infer Last ? Last : never;
80
- type LiteralKey = number | string;
81
- type ToString<T> = T extends number | string ? `${T}` : never;
82
- type TupleToCSV<Tuple extends readonly unknown[]> = Tuple extends readonly [infer First, ...infer Rest] ? First extends LiteralKey ? Rest extends readonly unknown[] ? Rest['length'] extends 0 ? ToString<First> : `${ToString<First>},${TupleToCSV<Rest>}` : never : never : '';
83
- type UnionToIntersection<Union> = (Union extends unknown ? (key: Union) => void : never) extends (key: infer Intersection) => void ? Intersection : never;
84
- type UnionToTuple<Union, Last = LastInUnion<Union>> = [Union] extends [never] ? [] : [...UnionToTuple<Exclude<Union, Last>>, Last];
85
- /**
86
- * Creates a type helper that captures a type parameter for compile-time exhaustiveness checks.
87
- *
88
- * @typeParam Type - The type to capture.
89
- * @returns A {@link TypeAsserter} with `assertAllKeys` and `assertAllMembers` methods.
90
- *
91
- * @example
92
- * ```ts
93
- * type A = { a: 1, b: 2, c: 3 };
94
- * typeAsserter<A>().assertAllKeys(['a', 'b', 'c']); // OK
95
- * typeAsserter<A>().assertAllKeys(['c', 'a', 'b']); // OK, order is ignored
96
- *
97
- * type B = 1 | 2 | 3 | 'a';
98
- * typeAsserter<B>().assertAllMembers([1, 2, 3, 'a']); // OK
99
- * ```
100
- */
101
- export declare function typeAsserter<Type>(): TypeAsserter<Type>;
102
122
  export {};